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);
相关推荐
晴夏。10 小时前
UE Spawn出来的Actor的生命周期和管理方法
游戏·ue5·ue4·ue
RPGMZ13 小时前
RPGMakerMZ 地图存档点制作 标题继续游戏直接读取存档
开发语言·javascript·游戏·游戏引擎·rpgmz·rpgmakermz
柚要做甚码15 小时前
godot-rust(gdext)2D游戏之旅【pong】 - 2
游戏·游戏开发
柚要做甚码15 小时前
godot-rust(gdext)2D游戏之旅【pong】 - 3
游戏·游戏开发
盼小辉丶17 小时前
PyTorch强化学习实战——构建生成对抗网络生成Atari游戏画面
pytorch·游戏·生成对抗网络
郝学胜-神的一滴17 小时前
[简化版 GAMES 101] 计算机图形学 07:图形学投影完全推导
c++·unity·图形渲染·three.js·unreal engine
邪修king19 小时前
UE5:C++ 实现 游戏逻辑 ↔ UI 双向联动
c++·游戏·ue5
heimeiyingwang1 天前
【架构实战】状态机架构:订单/工单状态流转设计
观察者模式·架构·wpf
Avalon7122 天前
Unity3D响应式渲染UI框架UniVue
游戏·ui·unity·c#·游戏引擎
念威2 天前
弹幕互动游戏AI无人直播方案 - 可遇AI无人直播助手
人工智能·游戏