Unity游戏通用框架——事件的订阅和发布(观察者模式)

在游戏开发的基本思想中,逻辑与表现的分离极为重要,相互之间并不关心具体实现,只注册对应的事件,有事件发生时才调用相应的函数

事件管理器

csharp 复制代码
using System.Collections;
using System.Collections.Generic;

public class event_manager : Singletom<event_manager> {
    public delegate void on_event_handler(string name, object udata);
    
    private Dictionary<string, on_event_handler> event_listeners = new Dictionary<string,on_event_handler>();

    // 订阅者而言
    public void add_event_listener(string name, on_event_handler handler) {
        if (this.event_listeners.ContainsKey(name)) {
            this.event_listeners[name] += handler;
        }
        else {
            this.event_listeners.Add(name, handler);
        }
    }

    public void remove_event_listener(string name, on_event_handler handler) {
        if (!this.event_listeners.ContainsKey(name)) {
            return;
        }

        this.event_listeners[name] -= handler;
        if (this.event_listeners[name] == null) {
            this.event_listeners.Remove(name);
        }
    }
    // end 

    // 发布
    public void dispatch_event(string name, object udata) {
        if (!this.event_listeners.ContainsKey(name)) {
            return;
        }

        if (this.event_listeners[name] != null) {
            this.event_listeners[name](name, udata);
        }
    }
    // end 

}

使用

发布

csharp 复制代码
event_manager.Instance.dispatch_event("coin", (object)100);

订阅

csharp 复制代码
void on_coin_value(string name, object udata) {
    int coin = (int)udata;
    Debug.Log("coin = " + coin);
}
event_manager.Instance.add_event_listener("coin", this.on_coin_value);
相关推荐
java_logo2 小时前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机
寂寞的船2 小时前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity
寂寞的船5 小时前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
淡海水6 小时前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船7 小时前
【Unity知识速递】第6期 URP性能优化完全指南:从内存到GPU的三维调优
unity·性能优化·编辑器
寂寞的船11 小时前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
AI小百科1 天前
AI 进游戏:游戏里的 NPC 开始有自己的性格
人工智能·游戏·ai
云-缩影2 天前
文生图技术落地:从广告到游戏,哪些场景真的能用
人工智能·游戏
hkNaruto2 天前
【AI】游戏大模型智能体OODA过程记忆问题解决方案:AgenticSTS 有界记忆契约:技术分析与流水线改造操作手册
人工智能·游戏·机器学习
tealcwu2 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity