Akrus Games | Unity
2.95K subscribers
408 photos
89 videos
11 files
351 links
Самые годные лайфхаки по unity c#

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
😁5🎄211
This media is not supported in your browser
VIEW IN TELEGRAM
Игра подписчика @OpenProgrammer!
Продолжаю разработку игры PixelMine!

Pixel Mine это 2д ММОРПГ с милой пиксельной графикой.
Планируются различные квесты, свободное исследование мира, крафт и получение вещей, ивенты, торговля между игроками и многое другое...

--- --- --- --- --- --- ---

За эту неделю:

• Улучшен чат

• Добавлена новая механика - клады

• Добавлены новые предметы, а так же квесты

• Происходит доработка игры под веб

--- --- --- --- --- --- ---

ТГ канал: ТЫК!

Впереди ещё много интересного, подписывайтесь чтобы поучаствовать в бета тесте, и не пропускать новые обновления!
🔥9
Unity: Мощные инструменты анимации

Blend Trees (Деревья смешивания)
Что это? Инструмент для плавного перехода между несколькими анимациями на основе параметров (например, скорость или направление).

Зачем?
• Создать бесшовный переход от ходьбы к бегу.
• Реализовать движение в 8 направлениях (как в старых RPG).
• Контролировать анимацию поворота на месте.

Как работает?
1. Создаешь Blend Tree внутри State Machine.
2. Добавляешь в него анимации (например, idle, walk, run).
3. Выбираешь параметр для смешивания (чаще всего Speed типа Float).
4. Настраиваешь threshold (значение параметра, при котором проигрывается конкретная анимация).

Пример:
Animator.SetFloat("Speed", 5.5f); // Плавно включит анимацию бега

Animation Layers и Avatar Masks
Слои анимации позволяют проигрывать несколько анимаций одновременно поверх основной.

Маски аватора определяют, какие части скелета затрагивает слой.

Зачем?
Верхний слой (Upper Body): Анимация стрельбы или жестов, чтобы не прерывать анимацию ног.
Слой лица (Face Layer): Мимика и речь, независимые от тела.
Слой инвентаря: Анимация доставания оружия или использования предмета.

Как настроить?
1. В контроллере анимаций добавляешь новый слой.
2. Назначаешь ему Avatar Mask (например, "UpperBody").
3. Выставляешь Weight (сила влияния слоя) и Blending (аддитивный или поверхностный).

Any State
Что это? Особое состояние, которое есть в любом месте State Machine.

Зачем? Позволяет перейти в определенное состояние (например, "Death" или "HitReaction") из любого другого состояния, если условие выполнено.

Важно!
• Для перехода из Any State используй Trigger-параметр.
• Настрой переходы в нужное состояние и выставь условия.
• Это идеально для прерываемых анимаций, смерть и получение урона.

Пример:
// Прервать любую анимацию и включить смерть
void Die()
{
animator.SetTrigger("Die");
}


Итог:
Blend Trees решают проблему плавного перемещения. Layers и Masks позволяют комбинировать анимации разных частей тела. Any State — это кнопка "прервать всё" для критичных событий.

#Unity #Unity3d #Gamedev #Animation #Indiedev
5🔥211
Я добавил новые реакции!

Предыдущие устарели, поэтому появились 😮😒🙂🎧⌨️!

Попробуйте их поставить на этом посте.
И напишите свое мнение в комментариях!
Please open Telegram to view this post
VIEW IN TELEGRAM
1376432🎄1
🔊 3D-звук в Unity: Погружаем игрока в шутер

Зачем?
Чтобы звуки выстрелов, шагов, взрывов и голосов приходили с правильного направления и расстояния. Игрок будет точно знать, откуда стреляют или идёт враг.

Как работает?
Движок рассчитывает громкость и панораму (стерео) для каждого звука исходя из позиции источника и слушателя.

Быстрая настройка:
1. Добавь на объект компонент Audio Source.
2. Включи галочку Spatial Blend и передвинь ползунок до конца вправо (3D). Это главный параметр!
3. Настрой кривую затухания (3D Sound Settings -> Rolloff Mode: Logarithmic или Custom). Укажи, как далеко слышен звук (Max Distance).

Ключевые настройки Audio Source:
- Doppler Level: Эффект сжатия звука при быстром движении (как сирена машины, которая проносится мимо). Для оружия обычно ставится низким (~0.1).
- Spread: Ширина стерео-звука. Для точечных источников (пистолет) — низкое значение, для обширных (взрыв) — высокое.
- Reverb Zones: Добавь компонент Audio Reverb Zone на локацию (например, тоннель или пещера), чтобы звук реалистично отражался от стен.

Пример кода (включить/выключить звук шагов):

public class Footsteps : MonoBehaviour
{
public AudioSource footstepSound;

void Update()
{
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D))
{
if (!footstepSound.isPlaying)
{
footstepSound.Play();
}
}
else
{
footstepSound.Stop();
}
}
}

Важно!
- Слушатель по умолчанию привязан к главной камере. Не перемещай его отдельно.
- Для реалистичности используй Audio Mixer. Создай отдельную группу для звуков игры и применяй к ней эффекты (например, компрессию или эквалайзер).
- Тестируй звук в наушниках.

#Unity #Unity3D #GameDev #GameAudio #gamedevelopment
🔥5211
// vsego_chasow_potracheno_zdec = 469


P.s. накидайте новых реакций
12644😁22🤯1🎄11
🔥Топовые сцены, визуальные эффекты, UI и ассеты в Unity, все это можно найти на канале @gdmonkey

🧠 Учись на чужих примерах
🎨 Вдохновляйся артами и сценами
🛠 Находи новые ассеты и тулзы
🔗 Все работы — с ссылками на оригинал и авторов!

📌 Подписывайся на
Telegram-канал
📌
#unity #inspiration #gamedev
🔥6🎄2221
Unity: что надо знать каждому мидлу

Ми́дл — это тот, кто не просто умеет кодить, а мыслит архитектурно и пишет надежный код.

Чек-лист обязательных знаний:

1. Оптимизация:
* Профилировщик (Profiler) — твой лучший друг. Умей находить узкие места (CPU, GPU, Memory).
* Пулы объектов (Object Pooling) — для пуль, врагов, эффектов. Создавай объекты заранее, а не в реальном времени.
* Кеширование ссылок: Не ищи компоненты (GetComponent) каждый кадр. Находи их в Start/Awake и сохраняй в переменную.

2. Архитектура и читаемость кода:
* SOLID/DRY: Основы чистого кода. Избегай божественных классов (God Class), дели логику на модули.
* События (Events/Actions): Для слабой связности между компонентами. Объекты реагируют на события, а не дергают методы друг друга напрямую.
* Интерфейсы: Определяют контракт, а не реализацию. Помогают делать код гибким и тестируемым.

3. Продвинутые темы Unity:
* ScriptableObjects: Для данных (настройки врагов, предметов) и создания архитектур типа Event System.
* Assembly Definitions: Ускоряют перекомпиляцию и организуют код в модули.
* Custom Editors (Editor Tooling): Автоматизируй рутину — создавай инструменты для дизайнеров и геймдизайнеров.

Пример: кеширование и событие
public class Enemy : MonoBehaviour
{
private Health _health; // Кешируем компонент
public static Action<Enemy> OnEnemyDied; // Событие

private void Awake()
{
_health = GetComponent<Health>(); // Нашли один раз
}

private void Die()
{
OnEnemyDied?.Invoke(this); // Оповещаем всех подписчиков
gameObject.SetActive(false);
}
}


Главное: Умей объяснить почему код написан именно так. Твое преимущество — не в знании синтаксиса, а в способности выбрать лучшее решение для задачи.

#Unity #Unity3D #Gamedev #Programming #Code
11
Please open Telegram to view this post
VIEW IN TELEGRAM
75🔥32😁11
Шум Перлина в Unity: основа генерации миров

Что это?
Алгоритм для создания плавных, естественных случайных значений. Не просто хаос, а структурированный «шум», похожий на облака, рельеф или текстуру камня.

Зачем?
• Генерация ландшафта (горы, холмы)
• Создание текстур (мрамор, огонь, облака)
• Procedural-генерация миров (карты высот)
• Симуляция природных явлений (дым, туман)

Как работает?
В отличие от случайных чисел, шум Перлина создаёт связанные, непрерывные значения. Он создаёт плавные перепады высот вместо острых пиков.

Как использовать в Unity?
1. Получи значение шума в точке (x, y)
2. Используй это значение для высоты (Y) или внешнего вида объекта

Простой пример для меша:
void GenerateTerrain() {
MeshFilter mf = GetComponent<MeshFilter>();
Vector3[] vertices = mf.mesh.vertices;

for (int i = 0; i < vertices.Length; i++) {
// Получаем значение шума для точки
float sample = Mathf.PerlinNoise(
vertices[i].x * scale,
vertices[i].z * scale
);
// Применяем к высоте вершины
vertices[i].y = sample * heightMultiplier;
}

mf.mesh.vertices = vertices;
mf.mesh.RecalculateNormals();
}

(Переменные scale и heightMultiplier настраивай в инспекторе)

Важно!
• Используй Mathf.PerlinNoise — встроенная функция Unity.
• Координаты должны быть дробными, а не целыми (например, 0.1, 0.15, 0.2).
• Для больших миров используй смещение (offset), чтобы избежать повторения.
• Комбинируй несколько слоёв шума (octaves) для сложного рельефа.

💡 Применяй для: процедурных планет, пещер, растительности и любых органических форм.

Создавай бесконечные уникальные миры! 🌍

#Unity #Unity3D #ProceduralGeneration #PerlinNoise #Gamedev
52
Я тут недавно сделал папку каналов с крутыми людьми и с помощью них у меня стало 300 папищиков. 🤗
Поэтому давайте не опозорьте меня и подпишитесь на них.🎧

Эта папочка про самые известные и крутые сообщества, будет интересно!

https://t.me/addlist/SutqpHfdJkhiZjcy
Запомнили, не позорим меня🎩
Мем для вас!
Please open Telegram to view this post
VIEW IN TELEGRAM
126🔥4
Unity: какие мини-проекты должен попробовать сделать каждый

Зачем?
Чтобы на практике закрепить основы и понять полный цикл разработки. От идеи до работающего билда.

Список для старта:

1. Roll-a-Ball
Простой 3D шар, которым ты управляешь. Собирай кубики, чтобы набрать очки.
Чему научишься: движение объекта, коллизии, сбор предметов, простой UI.

2. 2D Платформер
Персонаж, который прыгает по платформам, избегает врагов и собирает монеты.
Чему научишься: 2D физика, анимации, состояния персонажа, простой ИИ врагов.

3. Арканоид (Breakout)
Платформа, которая отбивает мяч, чтобы разбить все блоки на уровне.
Чему научишься: работа с 2D коллизиями, префабы, создание уровней.

4. Бесконечный раннер
Персонаж автоматически бежит вперед, игрок уворачивается от препятствий.
Чему научишься: генерация препятствий, увеличение сложности, работа с бесконечным миром.

5. Простой тайкун (Idle Game)
Кликер, где ты зарабатываешь монеты, улучшаешь свой доход и покупаешь новые здания.
Чему научишься: логика улучшений, сохранение прогресса (PlayerPrefs), работа с UI.

Почему это работает?
Каждый проект фокусируется на ключевых механиках. Сделав их, ты не просто изучишь код, а поймешь, как все части игры соединяются в одно целое.

Начинай с самого простого и постепенно усложняй! 🚀

#Unity #Unity3D #GameDev #ИндиРазработка #Gamedevelopment
7🔥3🎄1
😒

Капец вы много комментов написали под прошлым постом. Продолжайте в том же духе!

реакций накидайте
Please open Telegram to view this post
VIEW IN TELEGRAM
8652😁11
РКН заблокировало Itch.io...

Причина: «содержание информации, которая запрещена в РФ».

Если кто не знает itch.io это единственная популярная платформа где можно бесплатно выкладывать свои игры. Что-то вроде стима, но проекты начинающих людей.
1054
Сегодня отмечается день программиста!

256-й день года выбран не случайно:
Дата праздника объясняется расчетом: 2 (двоичная система исчисления) в степени 8 (количество битов в байте). То есть 2^8= 256. Поэтому в обычный год день программиста 13 сентября, а в високосный — 12 сентября


Поздравляю вас!
93🔥31
Unity: Адаптивный Canvas под любые разрешения

В чем проблема?
UI-элементы уплывают за экран или сбиваются в кучу при изменении размера окна или на другом устройстве.

Решение:
Правильная настройка Canvas и компонента Canvas Scaler.

Как настроить?
1. Canvas: В компоненте Canvas установи Render Mode в Screen Space - Overlay.
2. Canvas Scaler: Это главный компонент для адаптивности.
* UI Scale Mode: Выставь Scale With Screen Size.
* Reference Resolution: Поставь разрешение, под которым ты разрабатываешь интерфейс (например, 1920x1080).
* Screen Match Mode: Выставь Expand. Это ключевая настройка!

Почему «Expand»?
Этот режим гарантирует, что твой UI будет равномерно масштабироваться и всегда помещаться на экране, не обрезаясь.

Как anchoring?
Привязывай элементы к краям экрана. Выдели UI-объект и в окне Rect Tool (удерживая Alt) выбери нужный якорь. Например, для панели здоровья привяжи к левому верхнему углу.

Итог:
Canvas Scaler + правильные якоря = идеальный интерфейс на любом экране.

#Unity #Unity3D #UI #Canvas #Gamedev
84🔥3🎄3
Доброе утро, разработчики!
Всем удачной рабочей недели! ❤️
🔥965🎄11
Light Probes в Unity: освещение динамических объектов

Что это?
Система, которая «запоминает» освещение в разных точках сцены. Это навигационные точки для света.

Зачем?
Чтобы движущиеся объекты (персонажи, машины) были реалистично освещены.
• Без проб: динамические объекты освещаются только прямым светом или Lightmaps, выглядят плохо и не вписываются в сцену.
• С пробами: объекты подхватывают отраженный (baked) свет от окружения, выглядят естественно.

Как работает?
1. Расставляешь пробы в сцене (GameObject > Light > Light Probe Group).
2. Запекаешь освещение (Bake Lighting).
3. Unity интерполирует (смешивает) свет между пробами для объекта в реальном времени.

Как настроить?
1. На движущемся объекте должен быть компонент Renderer.
2. В его материалах убедись, что используется Standard или подобный шейдер.
3. В настройках Renderer в разделе Lighting должно быть включено Use Light Probes.

Важно!
• Ставь пробы там, где проходит игрок или двигаются объекты.
• Избегай резких переходов света. Делай сетку проб плотнее в таких местах.
• Не забывай запекать освещение после расстановки проб.

💡 Применяй для: персонажей, врагов, машин, всего, что движется по сцене со baked-освещением.

#Unity #Unity3D #GameDev #Lighting #LightProbes
🔥72
🙁

Проголосуйте за канал, чтобы вернуть премиум реакции. https://t.me/boost/AkrusUnity
Please open Telegram to view this post
VIEW IN TELEGRAM
105🤯11
Unity: мониторинг через график в инспекторе

Зачем?
Вместо того чтобы следить за цифрами в консоли, наблюдай за изменением значений в реальном времени на наглядном графике. Идеально для отладки ИИ, баланса здоровья или скорости.

Как это работает?
Используем атрибут [SerializeField] и специальный тип AnimationCurve.

Как сделать?
1. Объяви публичное поле с типом AnimationCurve.
2. В коде добавляй в него ключевые точки с данными.

Простой пример: отслеживание дистанции до врага.

using UnityEngine;

public class EnemyAI : MonoBehaviour
{
[SerializeField] private AnimationCurve _distanceGraph;

void Update()
{
float distanceToPlayer = Vector3.Distance(transform.position, player.position);
// Добавляем новое значение на график (Время, Значение)
_distanceGraph.AddKey(Time.time, distanceToPlayer);
}
}

1. Добавь скрипт на объект.
2. В инспекторе появится график.
3. Запусти игру и смотри, как значение меняется в реальном времени!

Важно!
• Не забывай очищать график перед новым запуском игры (правый клик по графику -> «Clear All»).
• Используй для отладки сложных систем: HP, скорость, параметры анимаций.

Удобно и наглядно для тонкой настройки геймплея! 📊

#Unity #Unity3D #Gamedev #РазработкаИгр #Отладка
🔥731
Что такое тесты?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁75311