Как я могу отправить UnityEvent определенному экземпляру GameObject? - PullRequest
0 голосов
/ 08 февраля 2019

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

private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
                RoomEnter.Raise();           
        }

public class GameEventListener : MonoBehaviour
    {
        [Tooltip("Event to register with.")]
        public GameEvent Event;

        [Tooltip("Response to invoke when Event is raised.")]
        public UnityEvent Response;

        private void OnEnable()
        {
            Event.RegisterListener(this);
        }

        private void OnDisable()
        {
            Event.UnregisterListener(this);
        }

        public void OnEventRaised()
        {
            Response.Invoke();
        }
    }

public class GameEvent : ScriptableObject
    {
        /// The list of listeners that this event will notify if it is raised.
        private readonly List<GameEventListener> eventListeners = 
            new List<GameEventListener>();

        public void Raise()
        {
            for(int i = eventListeners.Count -1; i >= 0; i--)
                eventListeners[i].OnEventRaised();
        }

        public void RegisterListener(GameEventListener listener)
        {
            if (!eventListeners.Contains(listener))
                eventListeners.Add(listener);
        }

        public void UnregisterListener(GameEventListener listener)
        {
            if (eventListeners.Contains(listener))
                eventListeners.Remove(listener);
        }
    }

1 Ответ

0 голосов
/ 08 февраля 2019

Зачем использовать событие?Когда игрок войдет, просто вызовите метод ЭТОЙ комнаты.

private void OnTriggerEnter2D(Collider2D other)
{
    if (other.CompareTag("Player"))
    {
        GetComponent<GameEventListener>().OnEventRaised();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...