当前位置: 首页 > news >正文

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

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

事件管理器

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 }

使用

发布

event_manager.Instance.dispatch_event("coin", (object)100);

订阅

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);
http://www.lryc.cn/news/460551.html

相关文章:

  • 将 Ubuntu 系统中的 **swap** 空间从 2GB 扩展到 16GB
  • 流程图 LogicFlow
  • Mac通过键盘选取内容
  • 如何通过OpenCV实现图像融合拼接?
  • Qt5.14.2 安装详细教程(图文版)
  • 深圳市步步精科技有限公司荣获发明专利,彰显技术研发实力
  • std::function的概念和使用方法
  • OpenAI的Swarm是一个实验性质的多智能体编排框架
  • 简易STL实现 | Map 的实现
  • `concurrent.futures` 是 Python 标准库中的一个模块
  • PicoQuant GmbH公司Dr. Christian Oelsner到访东隆科技
  • leetcode128最长连续序列 golang版
  • 【OpenCV】(六)—— 阈值处理
  • 重学SpringBoot3-集成Redis(九)之共享Session
  • Linux:信号保存与处理
  • 工具方法 - 可选的一些AI聊天机器人
  • YOLOv11改进策略【卷积层】| CVPR-2023 ScConv:即插即用,减少冗余计算并提升特征学习
  • 总结拓展十四:批次管理(2)
  • 架构设计笔记-18-安全架构设计理论与实践
  • Python网络爬虫
  • 38. 外观数列
  • Android中的三种数据存储方式
  • VS2022中Qt环境配置步骤
  • 【前端】 常用的版本控制符号汇总
  • OWASP Top 10 漏洞详解:基础知识、面试常问问题与实际应用
  • 实景三维赋能自然资源精细化管理创新
  • Science Robotics 通过新材料打造FiBa软机器人 可实现四种形态进化
  • C++ 的特性可以不用在主函数中调用
  • 香港大学神作 LightRAG 横空出世!AI 检索生成系统革命,秒懂复杂信息,动态数据无所遁形!
  • 云栖实录 | 智能运维年度重磅发布及大模型实践解读