【发布时间】:2019-02-08 18:11:34
【问题描述】:
我有一个代表房间的预制件。我有一个在玩家进入时触发的统一事件,我有一个事件监听器,它在事件引发时改变房间的状态。它还会更改任何预制件副本的状态,而不是触发事件的房间。 如何将事件的范围缩小到仅触发事件的游戏对象的实例?
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);
}
}
【问题讨论】:
标签: unity3d