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);
相关推荐
mascon1 小时前
解决苹果手机在游戏中意外触发下拉菜单的方法
游戏·智能手机
郝学胜-神的一滴1 小时前
中级OpenGL教程 007:解决背面光照异常高光问题
c++·unity·游戏引擎·three.js·opengl·unreal
RReality1 小时前
【Unity Shader URP】水面效果 实战教程
unity·游戏引擎·图形渲染
yjcode7891 小时前
游戏交易点卡充值源码系统制造厂
游戏·游戏交易
ShyanZh2 小时前
从0开始做自己的免费游戏聚合站(一):爬取数据并展示基本页面
游戏·喜加一·epic
游乐码2 小时前
c#基础(七)延迟函数
开发语言·unity·c#·游戏引擎
魔法阵维护师2 小时前
从零开发游戏需要学习的c#模块,第二十六章(多种敌人与基础 AI)
学习·游戏·c#
LONGZETECH2 小时前
Unity 3D+C/S架构无人机数字孪生实训室:破解实训“三高”难题的底层技术实现
c语言·开发语言·3d·unity·架构·无人机
万岳科技系统开发12 小时前
外卖系统小程序开发趋势:即时零售与同城配送的融合升级
unity·游戏引擎·零售
十贺16 小时前
【Unity开发字典】分包、黏包基本概念和处理逻辑实现
unity·游戏引擎