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