unity 事件和委托
时间: 2024-12-29 08:14:45 浏览: 14
### 使用事件和委托实现 Unity 游戏逻辑
在 Unity 中,事件和委托是强大的工具,用于构建灵活且可维护的游戏架构。两者共同工作可以创建松散耦合的对象间通信机制。
#### 定义委托类型
为了定义特定类型的回调函数签名,在代码中先声明一个委托:
```csharp
public delegate void PlayerAction();
```
这段代码定义了一个名为 `PlayerAction` 的委托,它不带参数也不返回任何值[^2]。
#### 创建并暴露事件成员
接着在一个类里公开一个基于上述委托的事件属性,允许外部组件注册自己的响应方法:
```csharp
using UnityEngine;
public class PlayerController : MonoBehaviour {
public event PlayerAction OnJump;
}
```
这里展示了如何利用 C# 的关键字 `event` 来封装之前定义好的委托实例 `OnJump` ,使得只有发布者能触发而订阅者仅限于添加或移除监听器[^4]。
#### 触发事件的方法
每当发生跳跃动作时调用此方法来激活所有已连接到 `OnJump` 事件上的处理器:
```csharp
void Jump() {
// 执行实际跳行动作...
// 如果有订阅者,则通知它们发生了跳跃行为
if (OnJump != null) {
OnJump();
}
}
```
注意检查是否有任何有效的订阅再尝试分发通知以防止运行时错误[^1]。
#### 订阅与取消订阅事件
其他脚本可以通过简单的 += 或 -= 运算符轻松地成为接收方之一:
```csharp
private void Start() {
player.OnJump += HandleJump; // 添加监听
}
private void OnDestroy() {
player.OnJump -= HandleJump; // 移除监听以防内存泄漏
}
private void HandleJump() {
Debug.Log("角色正在跳跃!");
}
```
这种设计模式不仅简化了复杂系统的开发过程还提高了代码重用性和扩展性[^3]。
阅读全文