using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Game Event", fileName = "New Game Event")] public class GameEvent : ScriptableObject { private readonly List _listeners = new List(); public void Raise() { // Проходимся по списку в обратном порядке, на случай если слушатель удалится во время вызова for (int i = _listeners.Count - 1; i >= 0; i--) { _listeners[i].OnEventRaised(); } } public void RegisterListener(GameEventListener listener) { if (!_listeners.Contains(listener)) { _listeners.Add(listener); } } public void UnregisterListener(GameEventListener listener) { if (_listeners.Contains(listener)) { _listeners.Remove(listener); } } }