介绍
事件系统是指用于在程序内部传递消息和通知的一种机制。它是一种典型的观察者模式的实现方式。在 Unity 中,事件系统可以帮助我们在游戏中实现各种功能,比如触发剧情事件、处理游戏输入、实现物体间的交互等等。
Unity 自带的事件系统主要有两种,一种是基于 GameObject 的事件机制,另一种是基于C#的委托和事件。
实现方法
基于 GameObject 的事件机制
在 Unity 中,我们可以通过添加组件的方式来绑定脚本,然后在脚本中使用事件机制来实现各种功能。比如,我们可以添加一个 Button 组件,并在脚本中添加 OnClick 事件,这样在点击按钮时就会触发该事件,从而执行对应的代码。这种事件机制是基于 GameObject 的,因为它需要在场景中添加组件才能使用。
基于 C# 的委托和事件
除了 GameObject 事件机制外,Unity 还提供了基于 C# 的委托和事件机制。这种事件机制是更加灵活的,因为它可以在不同的脚本中传递事件,而不需要在场景中添加组件。我们可以在一个脚本中定义一个事件委托,并在另一个脚本中订阅这个委托,从而实现事件的传递和响应。
以下是一个使用 C# 事件机制的示例代码:
// 定义事件委托
public delegate void MyEventHandler();
public class MyEventClass
{
// 定义事件
public event MyEventHandler MyEvent;
// 触发事件
public void TriggerEvent()
{
MyEvent?.Invoke();
}
}
public class Subscriber
{
public void Subscribe(MyEventClass myEventClass)
{
// 订阅事件
myEventClass.MyEvent += HandleEvent;
}
public void Unsubscribe(MyEventClass myEventClass)
{
// 取消订阅事件
myEventClass.MyEvent -= HandleEvent;
}
// 响应事件
public void HandleEvent()
{
Debug.Log("Event handled!");
}
}
在上面的代码中,我们首先定义了一个事件委托 MyEventHandler,并在 MyEventClass 类中定义了一个事件 MyEvent。在 TriggerEvent 方法中,我们通过检查事件是否为空来判断是否有订阅者,如果有就触发事件。在 Subscriber 类中,我们定义了 Subscribe 和 Unsubscribe 方法来订阅和取消订阅事件。HandleEvent 方法则是用来响应事件的。