Unity 之中的委托应用十分广泛, 这里假设背包类对象编写, 一般背包道具更新会设置以下事件:
-
记录背包道具变动
-
如果界面是通用金币, 则需要更新界面金币数量
-
如果涉及敌人也需要通知并且针对的类型, 需要去通知敌人, 玩家已经获得某个道具
using System;
using System.Collections;
using UnityEngine;
/// <summary>
/// 背包对象类
/// </summary>
public class Bag : MonoBehaviour{
// 假设目前的背包对象列表
private ArrayList items = default;
// 注意委托默认不对外则为 private, 如果要手动对外绑定则直接声明 public
// 这里默认返回 bool 是为了考虑到如果背包满了需要弹出提示错误
public delegate bool ItemChange(int val);
// 声明背包的委托事件[ 对外开放, 可以被其他脚本绑定 ]
public ItemChange changeItem;
// 初始化方法
private void Awake() {
changeItem += AddItem;// 追加添加道具委托方法
changeItem += UpdateUI;// 追加获取道具的之后更新界面
changeItem += NotifyMessage;// 追加推送全局通知道具消息[ 可以同步推送给敌人/好友 ]
}
// 对外方法, 用于唤醒所有的道具获取的更新事件
public void UpdateItem(int val) {
if (changeItem.Invoke(val)) {
Debug.Log("获取成功");
} else {
Debug.Log("获取失败");
};
}
// 追加道具[ 默认背包对象脚本本体成员,名为 `Bag` ]
private bool AddItem(int val) {
items.Add(val);
return true;
}
// 以下为假设情况
// ===================================================
// 更新界面获取道具[ 假设为界面脚本的类成员, 名为 `GUI` ]
private bool UpdateUI(int val) {
Debug.Log("获取道具 = " + val);
return true;
}
// 弹出内部消息提示[ 假设为弹出消息框架提示用户, 名为 `Message` ]
private bool NotifyMessage(int val) {
Debug.Log("敌对对象注意, 玩家XXX获取道具 = " + val);
return true;
}
}