在 Unity 中,委托(delegate)是一种类型,它定义了方法的签名,允许将方法作为参数传递。可以把委托看作是一个指向方法的指针。例如,定义一个委托:public delegate void MyDelegate(int num);
,这里定义了一个接受一个整数参数且无返回值的委托类型。
Action 是.NET 框架提供的一种泛型委托。它有不同的重载形式,用于表示不同参数列表和无返回值的方法。例如,Action<int>
就等价于前面自定义的接受一个整数参数且无返回值的委托 MyDelegate
。使用方式如 Action<int> myAction = (num) => Debug.Log(num);
,这里使用了 Lambda 表达式来创建一个 Action 实例。
事件(event)本质上是基于委托的一种封装。它主要用于对象间的消息传递,当特定事情发生时,对象可以触发事件通知其他对象。在 Unity 中,一个常见的场景是游戏对象的某些状态改变时通知其他脚本。
例如,定义一个事件:
using UnityEngine;
using System;
public class EventExample : MonoBehaviour
{
// 定义委托
public delegate void MyEventHandler();
// 基于委托定义事件
public event MyEventHandler MyEvent;
private void Start()
{
// 注册事件处理方法
MyEvent += OnMyEvent;
// 触发事件
TriggerEvent();
}
private void TriggerEvent()
{
if (MyEvent != null)
{
MyEvent();
}
}
private void OnMyEvent()
{
Debug.Log("My event has been triggered.");
}
}
总结来说,委托是基础,定义方法签名;Action 是框架提供的便捷委托类型;事件是基于委托实现的对象间通信机制。