我有一个预制的房间。我有一个统一事件,当玩家进入时会触发该事件,我有一个事件监听器,该事件监听器会在事件引发时更改房间的状态。它还会更改任何预制件副本的状态,而不是触发事件的房间的状态。 如何将事件的范围缩小到仅触发该事件的游戏对象的实例?
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);
}
}
答案 0 :(得分:1)
为什么要使用事件?当玩家进入时,只需调用此房间的方法即可。
private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
GetComponent<GameEventListener>().OnEventRaised();
}
}