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);
相关推荐
开维游戏引擎3 小时前
AI自动生成游戏时,deepseek和mimo对比
android·游戏·语言模型·游戏引擎·ai编程
avi91115 小时前
Unity 商业插件之(四)粒子系统,古法射击子弹轨迹 ,附加:HDRP Built-in Particle Shaders 最新的高级管线粒子Shader
unity·游戏引擎·粒子系统·particle·拖尾效果
海兰8 小时前
【游戏】迷雾镇(Mist Town)AI 沙箱游戏详细设计与部署指南(附源代码)
人工智能·游戏
陈天伟教授12 小时前
图解人工智能(60)人工智能应用-AI游戏
人工智能·游戏
魔士于安13 小时前
Shader forge技术美术专用
游戏·unity·游戏引擎·贴图·技术美术·模型
Y学院15 小时前
C#游戏脚本开发全流程(Unity通用完整版)
游戏·unity·c#
ellis197016 小时前
Lua的module和require
unity·lua
yyuuuzz16 小时前
游戏云服务器推荐的技术选择思路
大数据·运维·服务器·游戏·云计算·aws
淡海水17 小时前
38-Hybrid生态-LeanCLR总览
unity·架构·c#·热更新·clr·hybrid·leanclr
南境十里·墨染春水18 小时前
讲讲观察者模式
观察者模式