✅ C# Events в Unity: Избавься от спагетти-кода
Что это?
Паттерн, позволяющий объектам общаться друг с другом без прямых ссылок.
Зачем?
- Сильно снизить связность кода
- Делать код modular и переиспользуемым
- Легко добавлять новую реакцию на событие (звук, анимацию, UI)
- Избегать постоянных проверок в Update (
Как создать?
1. Объяви делегат и событие
2. Подпиши метод на событие
3. Вызови событие, когда что-то произошло
Пример (Смерть игрока):
Как использовать?
Важно!
- Всегда отписывайся от событий в
-
#Unity #CSharp #Events #Delegates #Optimization
Что это?
Паттерн, позволяющий объектам общаться друг с другом без прямых ссылок.
Зачем?
- Сильно снизить связность кода
- Делать код 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
🔥7 3 2🎄1 1