unity 事件的派发 注册 监听 代码
时间: 2023-11-17 09:06:37 浏览: 37
在Unity中,事件的派发、注册和监听可以通过以下几个步骤完成:
1. 创建自定义事件类
首先,我们需要创建一个自定义事件类,这个类需要继承自`UnityEvent`类。例如,我们可以创建一个名为`MyEvent`的事件类:
```csharp
using UnityEngine.Events;
public class MyEvent : UnityEvent<int, string> {}
```
在上面的代码中,我们定义了一个名为`MyEvent`的自定义事件类,它可以传递两个参数:一个整数和一个字符串。
2. 发送事件
要发送事件,我们需要获取对事件管理器的引用,并使用`Invoke`方法触发事件。例如,我们可以在一个名为`MySender`的脚本中发送事件:
```csharp
public class MySender : MonoBehaviour
{
private MyEvent myEvent;
private void Start()
{
myEvent = new MyEvent();
myEvent.AddListener(OnMyEvent);
myEvent.Invoke(42, "hello");
}
private void OnMyEvent(int intParam, string stringParam)
{
Debug.LogFormat("MyEvent received with params: {0}, {1}", intParam, stringParam);
}
}
```
在上面的代码中,我们创建了一个`MyEvent`对象,并添加了一个事件侦听器。调用`Invoke`方法将触发事件,并将整数值42和字符串值“hello”传递给事件侦听器。
3. 注册事件侦听器
要注册事件侦听器,我们需要获取对事件管理器的引用,并使用`AddListener`方法将侦听器添加到事件列表中。例如,我们可以在一个名为`MyListener`的脚本中注册事件侦听器:
```csharp
public class MyListener : MonoBehaviour
{
private MyEvent myEvent;
private void OnEnable()
{
myEvent = new MyEvent();
myEvent.AddListener(OnMyEvent);
}
private void OnDisable()
{
myEvent.RemoveListener(OnMyEvent);
}
private void OnMyEvent(int intParam, string stringParam)
{
Debug.LogFormat("MyEvent received with params: {0}, {1}", intParam, stringParam);
}
}
```
在上面的代码中,我们在`OnEnable`方法中注册事件侦听器,并在`OnDisable`方法中注销事件侦听器。每当`MyEvent`被触发时,`OnMyEvent`方法将被调用,并将传递的参数打印到控制台中。
总之,Unity提供了一个强大的事件系统,使得我们可以轻松地实现事件的派发、注册和监听。通过自定义事件类、使用`AddListener`和`Invoke`方法,我们可以在游戏中实现各种事件,并响应它们。