unity 委托 和事件
时间: 2024-06-22 22:02:44 浏览: 175
在Unity中,委托(Delegate)和事件(Events)是两个关键的概念,它们被用来实现回调和异步编程,使得游戏开发中的组件间能够更加灵活地传递和处理信息。
**委托(Delegate):**
委托是一种类型,它存储对特定方法的引用。在Unity中,你可以创建一个委托类型,然后将实际的方法赋值给这个委托。当需要在某个时间点执行这个方法时,只需调用委托即可。例如,你可以创建一个委托来处理所有UI元素的点击事件:
```csharp
public delegate void ButtonClickEventHandler(string buttonName);
ButtonClickEventHandler clickHandler;
// 在初始化或响应UI点击时,执行委托
void OnButtonClicked(string buttonName) {
clickHandler(buttonName); // 调用存储的方法
}
// 注册事件处理
void SubscribeButtonClick(Button button) {
clickHandler = button.onClick;
}
```
**事件(Events):**
事件是对特定委托的封装,通常由类或接口提供。当你想要公开某个行为的变化通知给其他组件时,你可以定义一个事件。在Unity中,`MonoBehaviour`类提供了许多内置事件,如`OnTriggerEnter`、`OnDestroy`等。例如,创建一个简单的碰撞事件:
```csharp
public class ColliderComponent : MonoBehaviour {
public event Action<GameObject> OnCollisionEnter;
void OnCollisionEnter(Collision collision) {
if (OnCollisionEnter != null) {
OnCollisionEnter(collision.gameObject);
}
}
}
// 使用时
ColliderComponent myCollider;
myCollider.OnCollisionEnter += OnCollisionHandler;
void OnCollisionHandler(GameObject other) {
// 处理碰撞
}
```
阅读全文