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

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
Шум Перлина в 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
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
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
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
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
Unity: по каким параметрам тестировать проект

Что проверять?
Не только на баги. Важна стабильность и производительность на разных устройствах.

Ключевые метрики:
- FPS (Кадры в секунду): Цель — стабильные 60 (или 30 для мобильных). Резкие просадки — повод для оптимизации.
- Память: Утечки оперативной памяти (RAM) и рост занимаемого места. Следи за мусором (Garbage Collection) в Profiler.
- Загрузка CPU/GPU: Профилировщик (Profiler) покажет, что нагружает систему: скрипты, рендеринг или физика.
- Нагрев и батарея: Сильный нагрев или быстрый разряд на мобильном устройстве — признак неоптимального кода.
- Размер билда: Следи, чтобы не подключались неиспользуемые ассеты и библиотеки.

Как тестировать?
1. В редакторе: Используй встроенный Profiler (Window > Analysis > Profiler).
2. На целевых устройствах: Собирай Development Build с флажком Autoconnect Profiler. Тестируй на слабом “железе”.
3. Стресс-тесты: Создай сцену с максимальным количеством объектов и эффектов, чтобы проверить пределы производительности.

Пример кода для вывода FPS:
public class FPSCounter : MonoBehaviour
{
private float count;

private IEnumerator Start()
{
while (true)
{
count = 1f / Time.unscaledDeltaTime;
yield return new WaitForSeconds(0.5f);
}
}

private void OnGUI()
{
GUI.Label(new Rect(10, 10, 100, 20), "FPS: " + Mathf.Round(count));
}
}

Важно!
- Тестируй с самого начала разработки, а не в конце.
- Проверяй на разных платформах (Android, iOS, PC).
- Используй Build Report для анализа размера билда.

💡 Регулярное тестирование сэкономит недели фиксов перед релизом!

#Unity #GameDev #Оптимизация #Тестирование #Performance
4🎄422😱11
Unity: ключевые инструменты тестирования и оптимизации

Что проверять перед билдом?
Быстрая проверка проекта на основные узкие места: производительность, память, размер сборки.

1. Статистика (Stats) во вкладке Game
Зачем? Мгновенная оценка производительности в реальном времени.
Смотри на:
FPS (кадры в секунду): цель — стабильные 60+.
CPU: общее время рендера и обработки скриптов.
Render Thread: нагрузка на рендер.
Batches (батчи): чем их меньше — тем лучше. Объединяй объекты!
Saved by batching: сколько вызовов отрисовано за 1 батч. Цифра должна быть высокой.
Tris/Verts: количество треугольников и вертексов на кадр.

2. Профайлер (Window > Analysis > Profiler)
Зачем? Найти точную причину падений FPS.
Как использовать?
1. Открой окно.
2. Запусти игру.
3. Смотри графики. Пики — это проблемы.
CPU: ищи тяжёлые скрипты и методы.
Rendering: проблемы с рендером, сложные шейдеры.
Memory: утечки памяти (кнопка «Take Sample» для снимка).
Audio: нагрузка от звуков.

3. Размер билда (File > Build Settings > Build)
Зачем? Узнать итоговый вес игры и что его увеличивает.
Что делать?
• В окне билда нажми «Build» и посмотри итоговый размер.
• Для деталей: в билде открой «Build Report» (включи в настройках Player).
• Смотри: какие ассеты самые тяжёлые (текстуры, аудио, модели).
• Сжимай текстуры, оптимизируй аудио (формат .ogg).

4. Батчинг (Batching)
Зачем? Снизить количество вызовов отрисовки (draw calls).
Как работает?
Static Batching: для статических объектов (отмеченных Static). Unity объединяет их в одну сетку.
Dynamic Batching: Unity автоматически объединяет мелкие объекты с общими материалами.
Важно! Используй общие материалы для одинаковых объектов — это ключ к батчингу.

💡 Вывод: перед билдом всегда проверяй Stats и Профайлер, чтобы найти слабые места. Оптимизируй батчинг и следи за памятью.

#Unity #Unity3D #Optimization #GameDev #Профайлер #Батчинг
🔥64
Unity: способы увлечения игрока в игру

🎯 Что это?
Техники геймдизайна и реализации, которые создают глубокое погружение и удерживают интерес к геймплею с первых секунд.

Зачем?
- Сделать игру запоминающейся и уникальной
- Увеличить время игровой сессии
- Получить положительные отзывы и рекомендации

---

🚀 Ключевые методы
1. Сильная первая минута
Дайте игроку почувствовать силу и действие сразу.
➡️ Пример: взрыв в начале, погоня, быстрое получение крутой способности.
2. «Ещё один ход»-эффект
Создавайте короткие игровые циклы с быстрым вознаграждением.
➡️ Пример: быстрая перезарядка, ежесекундные бонусы, ежеуровневые апгрейды.

3. Визуальный прогресс
📊 Визуализируйте рост через интерфейс.
➡️ Пример: шкала опыта, которая заполняется после каждого боя, или дерево навыков с мгновенными улучшениями.

4. Сочноть геймплея
🎮 Базовые действия должны доставлять радость.
➡️ *Пример: сочные прыжки в платформере, приятная отдача от выстрела.*

---

💻 Пример кода: система мгновенного вознаграждения

public class InstantReward : MonoBehaviour
{
[Header("Настройки визуала")]
public ParticleSystem rewardParticles;
public AudioClip rewardSound;

[Header("Награда")]
public int goldAmount = 10;
public int xpAmount = 15;

public void GiveReward()
{
// Добавляем ресурсы
PlayerInventory.Gold += goldAmount;
PlayerProgress.XP += xpAmount;

// Визуальная обратная связь
Instantiate(rewardParticles, transform.position, Quaternion.identity);
AudioSource.PlayClipAtPoint(rewardSound, Camera.main.transform.position);

// Лёгкая тряска камеры для эффекта
CameraShake.Instance.Shake(0.2f, 0.5f);
}
}

---

🎮 Что запомнить:
- Мгновенная обратная связь (визуал, звук, вибрация)
- Избегайте затяжных туториалов — учите в процессе
- Создавайте «моменты величия» для игрока
- Тестируйте на новых игроках — где они теряют интерес?

---

Действуй! Проанализируй свою игру: где игрок может заскучать? Убери это.

#Unity #GameDesign #Gamedev #ИгровойДизайн #Юнити
🔥711
Unity vs Unreal Engine: что выбрать?

Ключевое отличие
Unity — гибкость и доступность для инди и мобильных проектов.
Unreal — мощь для AAA-графики и больших команд.

Когда выбрать Unity?
• Делаешь мобильные или казуальные игры
• Работаешь один или в небольшой команде
• Хочешь быстро прототипировать и выпускать проекты
• Основной язык — C# (более простой для новичков)
• Платформа: Windows, Mac, Android, iOS, Web — из коробки

Когда выбрать Unreal?
• Создаешь шутер или проект с топовой графикой
• Готов работать с Blueprints (визуальное скриптование) или C++
• Команда крупная, есть технические художники

Графика
Unity: хороша, но требует ручной настройки под высокий уровень.
Unreal: фотореализм «из коробки» благодаря продвинутому рендереру.

Стоимость
Оба движка бесплатны с роялти после определенного порога доходов.

Итог
Нет «лучшего» движка. Есть инструмент, который подходит под твои конкретные задачи.
Начинаешь — стартуй с Unity. Хочешь кинематографичную графику — смотри в сторону Unreal.

#Unity #UnrealEngine #Gamedev #GameDevComparison
221😱111
🔍 Godot vs Unity: что выбрать в 2025?

Ключевые различия:

• Движок:
Unity — промышленный стандарт для 3D и мобильных игр.
Godot — легкий, открытый движок с акцентом на 2D и простоту.

• Язык:
Unity — C# (строгая типизация, большой синтаксис).
Godot — GDScript (Python-подобный, легкий для новичков) + C#.

• Графика:
Unity — мощный рендеринг, URP/HDRP, шейдеры Shader Graph.
Godot — Vulkan/Metal, собственный язык шейдеров, проще настройка.

• Сообщество:
Unity — огромная база tutorials, ассетов, форумов.
Godot — быстрорастущее комьюнити, но материалов меньше.


Когда что выбрать?
→ Unity: если нужна графика AAA, кроссплатформенность или работа в студии.
→ Godot: для инди-проектов, быстрого прототипирования.

Оба движка достойны. Выбор зависит от задач, опыта и предпочтений! 🎮

#Unity #Godot #GameDev #Gamedevelopment
8🔥432
💰 Заработок на мобильных играх: Яндекс Игры, VK Play

Что ждёт разработчика?
Доход сильно зависит от типа игры, монетизации и маркетинга. Цифры очень примерные!

Яндекс Игры (Yandex Games)
• Платформа с огромной аудиторией СНГ.
• Основная монетизация: реклама (встроенная видео-реклама, баннеры).
• Примерный доход: от 300 до 2000 руб с одной игры в месяц.
• Ключевой фактор: количество ежедневных активных игроков (DAU).
• Плюс: встроенные платежи (IAP) для премиум-игр.

VK Play
• Активно развивающаяся платформа от VK.
• Монетизация: реклама и внутриигровые покупки.
• Примерный доход: от 300 до 1000 руб за месяц.
• Перспективно для аркадных и гипер-казуальных проектов.

Что влияет на доход?
- Качество и уникальность игры
- Постоянные обновления и поддержка
- Умение продвигать свой продукт

💡 Вывод: Не стоит рассчитывать на мгновенную прибыль. Начинай с небольших проектов, изучай аналитику и собирай аудиторию. Это марафон, а не спринт.

#Unity #GameDev #ИндиРазработка #Монетизация
🔥63😁11
Выбор IDE для Unity: инструменты для кода

Что это?
IDE — это твой главный редактор для написания скриптов. Где код становится игрой.

Топ-3 варианта:

Visual Studio (официальный стандарт)
• Плюсы: идеальная интеграция с Unity, автодополнение кода, отладка прямо в редакторе.
• Минусы: может быть тяжеловата для слабых ПК.

Rider — мощный профи
• Плюсы: умный анализ кода, находит ошибки "на лету", встроенные шаблоны для Unity.
• Минусы: платный (но есть бесплатный пробный период).

VS Code — легкий и быстрый
• Плюсы: быстрая работа, тысячи расширений, бесплатный.
• Минусы: требует ручной настройки для работы с Unity.

Как выбрать?
- Новичок? Бери Visual Studio — уже настроена под Unity.
- Профи-кодер? Попробуй Rider — скорость разработки возрастет.
- Любитель кастомизации? VS Code даст полную свободу.

💡 Важно: в Unity (Edit → Preferences → External Tools) выбери свою IDE как внешний редактор.

Пиши код в удобной среде — это ускорит разработку!
#Unity #IDE #GameDev #CSharp
622
Паттерн «Состояние» (State): Умное управление поведением

Что это?
Паттерн, который позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Как режимы работы устройства.

Зачем?
• Избегать гигантских конструкций switch или if-else
• Четко разделять логику разных состояний
• Упрощать добавление новых состояний

Как работает?
1. Создаешь интерфейс состояния (IState) с методами Enter(), Update(), Exit()
2. Реализуешь конкретные состояния (например, IdleState, MoveState, AttackState)
3. Создаешь класс StateMachine, который управляет текущим состоянием

Пример: Простая машина состояний врага
// 1. Интерфейс состояния
public interface IEnemyState
{
void Enter();
void Update();
void Exit();
}

// 2. Конкретное состояние - Преследование
public class ChaseState : IEnemyState
{
public void Enter() { Debug.Log("Начинаю преследование!"); }
public void Update() { /* Логика движения к игроку */ }
public void Exit() { Debug.Log("Прекращаю преследование."); }
}

// 3. Машина состояний
public class EnemyAI : MonoBehaviour
{
IEnemyState currentState;

public void ChangeState(IEnemyState newState)
{
currentState?.Exit();
currentState = newState;
currentState?.Enter();
}

void Update()
{
currentState?.Update();
}
}

// Использование:
EnemyAI ai = GetComponent<EnemyAI>();
ai.ChangeState(new ChaseState());


Важно!
• Каждое состояние отвечает только за свою логику
• Переход между состояниями происходит в одном месте (StateMachine)
• Отлично сочетается с другими паттернами (например, Command)

💡 Применяй для: ИИ врагов, анимаций, управления игроком (бег, прыжок, атака).

#Unity #CSharp #Patterns #StateMachine #GameDev
🎄432
Чистый код в Unity: правила для читаемости и поддержки

Что это?
Правила написания кода, которые делают его понятным для тебя и других разработчиков.

Зачем?
• Легче находить и исправлять ошибки
• Упрощается командная работа
• Ускоряется добавление нового функционала

Основные правила:

1️⃣ Именуй методы как действия
Название должно сразу объяснять суть.
// Хорошо:
void MovePlayer() {}
void CalculateDamage() {}

// Плохо:
void DoSomething() {}
void Process() {}


2️⃣ Заменяй "магические числа" на константы
Числа в коде без пояснений запутывают.
// Вместо:
if (health < 30) {}

// Используй:
private const int LOW_HEALTH_THRESHOLD = 30;
if (health < LOW_HEALTH_THRESHOLD) {}


3️⃣ Разделяй ответственность по классам
Один класс — одна задача.
• PlayerMovement.cs — за перемещение
• PlayerHealth.cs — за здоровье
• PlayerInventory.cs — за инвентарь

4️⃣ Убирай дублирование кода
Повторяющуюся логику выноси в отдельные методы.
// Вынеси в метод:
private void PlaySound(AudioClip clip)
{
audioSource.PlayOneShot(clip);
}


5️⃣ Пиши осмысленные комментарии
Объясняй "почему", а не "что".
// Плохо: 
x += 10; // Добавляем 10 к x

// Хорошо:
x += bonusScore; // Начисляем бонус за сложное достижение


💡 Помни: код читают чаще, чем пишут. Делай его понятным!
#Unity #CSharp #GameDev #ЧистыйКод
🔥74311
Адаптивный UI в Unity: как избежать поломок

Что это?
Правильная настройка UI, который корректно отображается на любых разрешениях экрана.

Как сделать?
1. Canvas Scaler:
- Режим: Scale With Screen Size
- Референсное разрешение: 1920x1080
- Screen Match Mode: Match Width Or Height

2. Anchors и Pivot:
- Фиксируй элементы через anchorMin/anchorMax
- Пример: кнопка в углу всегда останется на месте

3. Safe Area для мобилок:

   RectTransform rect = GetComponent<RectTransform>();
rect.anchorMin = Screen.safeArea.position;
rect.anchorMax = Screen.safeArea.size;


4. Layout Group:
- Используй Vertical/Horizontal Layout Group
- Избегай фиксированных размеров
- Для сложных списков контролируй размеры через LayoutElement

5. Единый UIManager:
- Централизованное управление окнами
- Отслеживание текущего экрана
- Блокировка ввода при переходах

Важно!
• Тестируй на разных разрешениях (от телефона до планшета)
• Для Scroll View оптимизируй через Object Pooling
• Используй события вместо прямых ссылок между панелями

💡 Применяй для: мобильных игр, кроссплатформенных проектов, сложных интерфейсов.
Стабильный UI = профессиональное впечатление от игры!

#Unity #UI #GameDev #AdaptiveUI
53
Изменяемое окно игры в Unity

Как настроить?
В сборках под ПК (Windows/Mac/Linux) это делается в настройках плеера.

Пошагово:
1. Открой File → Build Settings
2. Выбери платформу (PC)
3. Нажми Player Settings
4. В разделе Resolution and Presentation:
- Default Is Full Screen — сними галочку
- Fullscreen Mode — выбери "Windowed"
- Resizable Window — отметь галочку (доступно для Windows/Mac)

Важные нюансы:
• Размер окна при старте задаётся в полях Default Screen Width/Height
• Игрок может менять размер перетаскиванием краёв окна
• В коде можно отслеживать изменение размера:

void Update()
{
if (Screen.width != lastWidth || Screen.height != lastHeight)
{
// Пересчитать интерфейс или камеру
UpdateLayout();
lastWidth = Screen.width;
lastHeight = Screen.height;
}
}


Что проверить:
- Интерфейс (UI) должен адаптироваться под разные разрешения
- Камера может требовать перенастройки при изменении пропорций
- Для Windows убедись, что в Target Platform выбрана версия с DX11/OpenGL

💡 Используй для: удобства тестирования, игр с оконным режимом, инструментов разработки.

Советую прочитать предыдущий пост про настройку Canvas

#Unity #GameDev #Сборка #Unity2D #Unity3D
4331
Шумы в Unity: генерация миров и не только

Что это?
Математические алгоритмы для создания псевдослучайных узоров. Не просто хаос, а структурированная случайность!

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

Основные типы:
Perlin Noise - классика для плавных высот:
float height = Mathf.PerlinNoise(x * scale, y * scale);


Simplex Noise - оптимизированная версия Perlin
Value Noise - более блочный и резкий результат
Cellular Noise - для ячеистых структур (пчелиные соты, трещины)

Пример использования для террейна:
for (int x = 0; x < width; x++) {
for (int z = 0; z < depth; z++) {
// Получаем высоту через шум
float y = Mathf.PerlinNoise(x * 0.1f, z * 0.1f) * 20f;
Instantiate(groundTile, new Vector3(x, y, z), Quaternion.identity);
}
}


Важно!
• Используй разные масштабы (scale) для детализации
• Комбинируй несколько слоёв шума для сложных форм
• В Unity есть встроенный Mathf.PerlinNoise
• Для продвинутых вариантов используй сторонние библиотеки (FastNoise)

💡 Применяй для: процедурной генерации, VFX, случайных событий с естественным видом.
Преврати хаос в контролируемый инструмент!

#Unity #GameDev #ProceduralGeneration #Noise #Gamedevelopment
🔥6531
Изменяемое окно игры в Unity

Как настроить?
В сборках под ПК (Windows/Mac/Linux) это делается в настройках плеера.

Пошагово:
1. Открой File → Build Settings
2. Выбери платформу (PC)
3. Нажми Player Settings
4. В разделе Resolution and Presentation:
- Default Is Full Screen — сними галочку
- Fullscreen Mode — выбери "Windowed"
- Resizable Window — отметь галочку (доступно для Windows/Mac)

Важные нюансы:
• Размер окна при старте задаётся в полях Default Screen Width/Height
• Игрок может менять размер перетаскиванием краёв окна
• В коде можно отслеживать изменение размера:

void Update()
{
if (Screen.width != lastWidth || Screen.height != lastHeight)
{
// Пересчитать интерфейс или камеру
UpdateLayout();
lastWidth = Screen.width;
lastHeight = Screen.height;
}
}


Что проверить:
- Интерфейс (UI) должен адаптироваться под разные разрешения
- Камера может требовать перенастройки при изменении пропорций
- Для Windows убедись, что в Target Platform выбрана версия с DX11/OpenGL

💡 Используй для: удобства тестирования, игр с оконным режимом, инструментов разработки.

Советую прочитать пост про настройку Canvas

#Unity #GameDev #Сборка #Unity2D #Unity3D
🔥94😱21
Unity Animator: Any State — гибкие переходы

Что это?
Состояние, из которого можно перейти в другое состояние *в любой момент*, независимо от текущей анимации.

Зачем?
• Реагировать на критические события мгновенно (смерть, получение урона)
• Прерывать любую анимацию (например, атаку — если игрока отбросило)
• Упрощать логику переходов между несвязанными состояниями

Как настроить?
1. В окне Animator Controller правой кнопкой → Create StateAny State
2. Создай переход из Any State в целевое состояние (например, "Death")
3. Добавь условие перехода (Bool, Trigger и т.д.)
4. В коде активируй параметр при событии:
animator.SetTrigger("Die"); // Прервёт ЛЮБУЮ анимацию

Важные нюансы:
⚠️ Приоритет: Если к Any State привязано несколько переходов, выполнится первый *валидный*.
Order Matters: Измени порядок переходов в списке (верхний = выше приоритет).
Exit Time не работает: Переход мгновенный, тайминг игнорируется.

Пример:
// При получении смертельного урона:
public void TakeDamage(int damage) {
health -= damage;
if (health <= 0) {
animator.SetTrigger("Die"); // Сработает из ЛЮБОГО состояния
}
}

💡 Где использовать:
• Смерть/возрождение
• Стан/оглушение
• Резкая смена действия (телепорт, трансформация)

Используй Any State для критических событий — сделай игру отзывчивой!
#Unity #gamedev #Animator #Unity3D
🔥52😱1
👁️ Как создать «зрение» ИИ врага в Unity?

Легко!

Давайте рассмотрим процесс поэтапно:

1️⃣ 1. В двухмерном пространстве можно просто отправить один рейкаст в направлении игрока и проверить, происходит ли столкновение.
2️⃣ 2. Однако, если игрок слегка выглядывает из-за угла и его видно, то этот способ не подойдёт. В таком случае, следует отправлять несколько рейкастов веером и проверять, сталкиваются ли они с чем-либо.
3️⃣ 3. Но что делать в трёхмерном пространстве? Не отправлять же миллион рейкастов!

Для этого можно воспользоваться коллайдером, проверить столкновения и отправить пучок рейкастов!

---

"Все гениальное просто, все простое гениально"


👍 Ставьте лайк и подписывайтесь на канал!
#unity #charp #gamedev #ии #unity3d
5🔥41
Tilemap в Unity: Создание 2D-уровней

Что это?
Система для быстрого построения 2D-уровней из тайлов (кирпичики-спрайты). Идеально для платформеров, топ-даун игр и пиксель-арта.

Как начать:
1. Создай Tilemap: ПКМ в Hierarchy → 2D Object → Tilemap
2. Добавь Grid (сетка-родитель для всех Tilemap), обычно создаётся автоматически
3. Открой окно Tile Palette (Window → 2D → Tile Palette)

Практика:
// Генерация случайного тайла в коде:
public Tile[] groundTiles; // Перетащи тайлы в инспектор

void GeneratePlatform()
{
Tilemap tilemap = GetComponent<Tilemap>();
Vector3Int position = new Vector3Int(Random.Range(-5, 5), 0, 0);

// Выбираем случайный тайл
Tile randomTile = groundTiles[Random.Range(0, groundTiles.Length)];
tilemap.SetTile(position, randomTile);
}



Основные инструменты:
Кисть (Paint Brush) - рисование тайлов
Заливка (Bucket) - заполнение областей
Ластик (Erase) - удаление тайлов
Rule Tiles - умные тайлы с авто-текстурированием

Создание Rule Tile:
1. ПКМ в Project → Create → 2D → Tiles → Rule Tile
2. Настрой правила соседства (например: трава с землёй снизу)
3. Перетащи в Tile Palette

Важные советы:
• Разделяй слои: Foreground, Background, Collision (добавь Composite Collider 2D)
• Используй Animated Tiles для воды/лавы
• Для оптимизации: включи Chunk Culling в Tilemap Renderer
• Экспортируй карты в .json через [SerializeField]

💡 Пример применения:
- Случайная генерация платформ
- Прорисовка подземелий
- Создание разрушаемых блоков

#Unity2D #Tilemap #GameDev #IndieDev

---

🔥 Дополнительные хаки:
1. Разрушаемые тайлы:
void DestroyTile(Vector2 worldPos)
{
Tilemap tilemap = GetComponent<Tilemap>();
Vector3Int cellPos = tilemap.WorldToCell(worldPos);
tilemap.SetTile(cellPos, null); // Удаляем тайл
SpawnExplosionEffect(worldPos);
}



2. Авто-коллайдеры:
• Добавь Tilemap Collider 2D
• Выбери Used By Composite
• Добавь Composite Collider 2D (настрой форму в Rigidbody 2D)

3. Слои для сортировки:
• Настрой Sorting Layer в Tilemap Renderer
• Используй Order in Layer для переднего/заднего плана

Пост создан в вашем стиле: минимум теории, максимум практики! 🚀
🔥5