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

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
Выбор 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
Игра подписчика @ZARKI01

The Unknown Parameter / Неизвестный Параметр

Жанр: Atmospheric survival-horror от первого лица.

Сеттинг: Луна. Вы космонавт, отправленный на поиски пропавшей научной экспедиции.

Что ждёт внутри: Найти можно лишь их трупы... и «это», что за ними охотилось. Забрать образцы и бежать к кораблю под аккомпанемент панических сообщений с луны. Атмосфера одиночества, паники и безысходности в духе классических космических ужасов.

Движок: Unity

Пишу на C#, активно учусь и прототипирую. В планах небольшой, но концентрированный и пугающий опыт.

Следите за развитием! Буду делиться скриншотами, гифками и болью геймдева.

Этот проект я буду делать постепенно, так как ещё пока осваиваю Юнити, и поэтому разработка может длиться от нескольких месяцев.

Тгк - https://t.me/minikraft2010fnaf

#геймдев #индиразработка #хоррор #unity #godotengine #indiegames #indiedev
🔥43😱1
Изменяемое окно игры в 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
RigidBody в Unity: основа физики

Что это?
Компонент, который делает объект подчинённым физике Unity: гравитация, столкновения, сила.

Зачем?
• Реалистичное движение предметов
• Реакция на удары и падения
• Управление через силы и импульсы
• Настройка массы, трения, упругости

Как использовать?
1. Добавь компонент Rigidbody (или Rigidbody2D для 2D)
2. Включи/отключи Use Gravity при необходимости
3. Управляй движением через код

Пример:

Rigidbody rb;

void Start()
{
rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.forward * 10f, ForceMode.Impulse);
}


Важно!
• ForceMode.Force — плавное ускорение
• ForceMode.Impulse — резкий толчок
• Масса влияет на физику
• Для статичных объектов Rigidbody не нужен

💡 Используй Rigidbody, если хочешь, чтобы объект вёл себя как в реальном мире.

Классный плейлист по физике https://youtube.com/playlist?list=PL8C4SmiVZY0wUFQrUXKQCS3BhRk2MIs8v&si=rkiHtIe4BN_GY0gX

#Unity #Physics #Rigidbody
7🔥411
👁️ Как создать «зрение» ИИ врага в Unity?

Легко!

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

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

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

---

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


👍 Ставьте лайк и подписывайтесь на канал!
#unity #charp #gamedev #ии #unity3d
5🔥41
C# Атрибуты в Unity: мета-инструкции для кода

Что это?
Специальные метки для классов, переменных или методов. Они дают подсказки движку и редактору Unity, как с ними работать.

Зачем?
- Делать переменные видимыми в Инспекторе без ключевого слова public
- Задавать диапазоны значений для ползунка
- Добавлять в контекстное меню кнопки для вызова методов
- Скрывать ненужные поля в Инспекторе

Как использовать?
Просто напиши имя атрибута в квадратных скобках [] перед элементом.

Популярные атрибуты:

[SerializeField]
Показывает private поле в Инспекторе.
[SerializeField] private int _health;


[Range(min, max)]
Создает ползунок для значения.
[Range(0f, 10f)] public float speed;


[Header("Название")]
Добавляет заголовок в Инспектор.
[Header("Player Settings")]
public int playerScore;


[Tooltip("Подсказка")]
Показывает текст при наведении курсора.
[Tooltip("Сила прыжка в ньютонах")] 
public float jumpForce;


[HideInInspector]
Прячет public поле из Инспектора.
[HideInInspector] public bool isGrounded;


Важно!
Атрибуты не меняют логику кода, а только управляют его отображением и поведением в редакторе Unity. Еще в поля можно писать только константы, не переменные!

💡 Используй, чтобы сделать процесс настройки объектов интуитивным и удобным.

Пост попросил @Cheeeeeeeb
#Unity #Unity3D #CSharp #Атрибуты #Gamedevelopment
11🔥5
C# Атрибуты в Unity: мета-инструкции для кода

Что это?

Специальные метки для классов, переменных или методов. Они дают подсказки движку и редактору Unity, как с ними работать.

Зачем?

- Делать переменные видимыми в Инспекторе без ключевого слова public
- Задавать диапазоны значений для ползунка
- Добавлять в контекстное меню кнопки для вызова методов
- Скрывать ненужные поля в Инспекторе

Как использовать?

Просто напиши имя атрибута в квадратных скобках [] перед элементом.

Популярные атрибуты:

[SerializeField]
Показывает private поле в Инспекторе.
[SerializeField] private int _health;


[Range(min, max)]
Создает ползунок для значения.
[Range(0f, 10f)] public float speed;


[Header("Название")]
Добавляет заголовок в Инспектор.
[Header("Player Settings")]
public int playerScore;


[Tooltip("Подсказка")]

Показывает текст при наведении курсора.
[Tooltip("Сила прыжка в ньютонах")] 
public float jumpForce;


[HideInInspector]

Прячет public поле из Инспектора.
[HideInInspector] public bool isGrounded;


Важно!

Атрибуты не меняют логику кода, а только управляют его отображением и поведением в редакторе Unity. НО есть атрибут Obsolete который не относится к юнити и не влияет на отображение в редакторе. Еще в поля можно писать только константы, не переменные!

💡 Используй, чтобы сделать процесс настройки объектов интуитивным и удобным.

#Unity #Unity3D #CSharp #Атрибуты #Gamedevelopment
🔥8🎄2