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

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
C# Events в Unity: Избавься от спагетти-кода

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

Зачем?
- Сильно снизить связность кода
- Делать код modular и переиспользуемым
- Легко добавлять новую реакцию на событие (звук, анимацию, UI)
- Избегать постоянных проверок в Update (if (isDead) {...})

Как создать?
1. Объяви делегат и событие
2. Подпиши метод на событие
3. Вызови событие, когда что-то произошло

Пример (Смерть игрока):
public class PlayerHealth : MonoBehaviour
{
// 1. Объявляем событие
public static event Action OnPlayerDeath;

public void TakeDamage()
{
if (health <= 0)
{
// 3. Вызываем событие
OnPlayerDeath?.Invoke();
}
}
}

Как использовать?
public class GameManager : MonoBehaviour
{
void OnEnable()
{
// 2. Подписываемся на событие
PlayerHealth.OnPlayerDeath += HandlePlayerDeath;
}

void OnDisable()
{
// Важно: отписываемся при выключении
PlayerHealth.OnPlayerDeath -= HandlePlayerDeath;
}

void HandlePlayerDeath()
{
// Реакция на смерть игрока
Debug.Log("Game Over!");
Time.timeScale = 0f;
}
}

Важно!
- Всегда отписывайся от событий в OnDisable или OnDestroy, чтобы не было утечек памяти.
- ?.Invoke() проверяет, есть ли подписчики (null-check).

#Unity #CSharp #Events #Delegates #Optimization
🔥732🎄11
UnityEvents vs Action: когда что использовать?

В чём разница?
Оба подхода реализуют паттерн «наблюдатель», но с разным уровнем гибкости и сложности.

UnityEvent
Идеально для дизайнеров и работы в инспекторе.
Плюсы:
- Виден в инспекторе. Дизайнер уровней может сам настраивать связи между объектами.
- Сериализуется (сохраняется между запусками редактора).
- Простота использования.

Минусы:
- Меньшая производительность по сравнению с Action.
- Не такая гибкая подписка из кода.

Как использовать UnityEvent:
1. Объяви публичное поле в классе:
public UnityEvent OnSomethingHappened;
2. В инспекторе на объекте с этим скриптом появится сворачиваемый список вызовов (Calls).
3. Перетаскивай в него любой объект и выбирай его метод для вызова.

Action
Мощный инструмент для программистов. Работает только в коде.
Плюсы:
- Высокая производительность.
- Чистый и лаконичный синтаксис подписки.
- Полный контроль над подписками и отписками.

Минусы:
- Не виден в инспекторе. Только для программистов.

Как использовать Action:
1. Объяви событие в классе:
public static Action<int> OnEnemyDied;
2. Для вызова события в нужном месте:
OnEnemyDied?.Invoke(scoreValue);
3. В другом классе подпишись на событие:
GameManager.OnEnemyDied += AddScore;
Не забудь отписаться при уничтожении объекта:
void OnDestroy() => GameManager.OnEnemyDied -= AddScore;

Итог:
➡️ Используй UnityEvent для настройки взаимодействий между объектами в инспекторе (двери, кнопки, переключатели).
➡️ Используй Action для быстрых и частых событий внутри кода (система достижений, UI, логика игры).

Выбирай инструмент под задачу! 💪

Пост предложил @Fylht009
#Unity #CSharp #GameDev #Events #Gamedevelopment
🔥7111