353人加入学习
(6人评价)
Steam模拟经营游戏《冒险村的商人日记》从开发到上架全流程

开发 策划 美术 音乐 发行 全部教给你

价格 ¥ 890.00

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;
    }
}

 

[展开全文]

授课教师

独立游戏制作人,业余程序

课程特色

视频(245)
下载资料(22)
图文(1)