(相关资料图)
ECS最重要的特性一是数据跟逻辑分离,二是数据驱动逻辑。什么是数据驱动逻辑呢?不太好理解,我们举个例子 一个moba游戏,英雄都有血条,血条会在人物头上显示,也会在左上方头像UI上显示。这时候服务端发来一个扣血消息。我们怎么处理这个消息?第一种方法,在消息处理函数中修改英雄的血数值,修改头像上血条显示,同时修改头像UI的血条。这种方式很明显造成了模块间的耦合。第二种方法,扣血消息处理函数中只是改变血值,血值的改变抛出一个hpchange的事件,人物头像模块跟UI模块都订阅血值改变事件,在订阅的方法中分别处理自己的逻辑,这样各个模块负责自己的逻辑,没有耦合。 ET提供了多种事件,事件都是可以多次订阅的:
Player player = ComponentFactory.Create(); // 订阅Player的Awake事件 public class PlayerAwakeSystem: AwakeSystem { public override void Awake(Player self) { } }
// 订阅Player的Start事件 public class PlayerStartSystem: StartSystem{ public override void Start(Player self) { } }
// 订阅Player的Update事件 public class PlayerUpdateSystem: UpdateSystem{ public override void Update(Player self) { } }
// 订阅Player的Destroy事件 public class PlayerDestroySystem: DestroySystem{ public override void Destroy(Player self) { } } Player player = ComponentFactory.Create (); // 这里会触发Destroy事件 player.Dispose();
// 订阅Player的Destroy事件 public class PlayerChangeSystem: ChangeSystem{ public override void Change(Player self) { } } Player player = ComponentFactory.Create (); // 需要手动触发ChangeSystem Game.EventSystem.Change(player);
// 订阅Player的Deserialize事件 public class PlayerDeserializeSystem: DeserializeSystem{ public override void Deserialize(Player self) { } } // 这里player2会触发Deserialize事件 Player player2 = MongoHelper.FromBson (player.ToBson());
// 订阅Player的Load事件 public class PlayerLoadSystem: LoadSystem{ public override void Load(Player self) { } }
int oldhp = 10; int newhp = 5; // 抛出hp改变事件 Game.EventSystem.Run("HpChange", oldhp, newhp); // UI订阅hp改变事件 [Event("HpChange")] public class HpChange_ShowUI: AEvent{ public override void Run(int a, int b) { throw new NotImplementedException(); } } // 模型头顶血条模块也订阅hp改变事件 [Event("HpChange")] public class HpChange_ModelHeadChange: AEvent { public override void Run(int a, int b) { throw new NotImplementedException(); } }
[MessageHandler(AppType.Gate)] public class C2G_LoginGateHandler : AMRpcHandler{ protected override void Run(Session session, C2G_LoginGate message, Action reply) { G2C_LoginGate response = new G2C_LoginGate(); reply(response); } }
更具体的消息事件等到讲消息的时候再细细讲解了10. 数值事件,数值模块再讲解......, 更多的事件由自己去开发。
ET框架的逻辑就是由以上各种事件来驱动的。
ET开源地址地址:egametang/ET: Unity3D Client And C# Server Framework (github.com) qq群:474643097
关键词:
ET介绍——事件机制EventSystem
山西安排部署小型水库安全度汛工作|环球简讯
清华AIGC发展研究报告1.0版正式发布-今日快讯
天天新资讯:华为发布全屋智能4.0已建立214家全屋智能体验店覆盖115个城市
常州市邹区镇人民政府一行到访中国照明电器协会_快看
什琴斯尼:连续两个赛季没拿冠军很失望,我的扑救都成了徒劳-全球聚看点
医脉通(02192.HK):5月18日南向资金增持5万股
56岁江珊在《后浪》状态太真实,表演接地气,贤妻良母典范 世界微速讯
东东不死传说爆笑版人物大全_东东不死传说爆笑版
阜平县气象台发布冰雹橙色预警【Ⅱ级/严重】【2023-05-18】
焦点关注:姿态看T1零换五强拆翻盘JDG,直接躺倒沉默:宙斯开太好了
当前快看:去看展吧!与四川历史文化名人“对话”,传巴蜀灿烂文化
“爱赏嘉定”读城记,在行走中发现自己的城市
公众号平台官网注册申请_公众号申请官网|环球快报
山西农大信息学院招生办电话业几本_全球热消息
天津应届毕业生落户需要满足什么条件?
每日快讯!北京养老金计发基数2023调整吗?今年退休养老金计算公式是什么?
先正达集团撤回科创板上市申请、将申报沪市主板 上交所答记者问-播报
笔记带货、本地团购、AIGC种草,焦虑的小红书加速“狂飙” 世界看点
今日热闻!绿色新能源项目密集落户湖北宜昌
环球热点评!相聚孟母故里 传承家教家风
皇马出局风波:为了曼城欧冠的前途,瓜迪奥拉活得比谁都清醒! 世界讯息
今日虚拟专用网股票价格一览,受益的虚拟专用网概念股票有哪些?
【世界新视野】又发现42辆盗油车!美军再次非法偷盗叙利亚石油
全球今日讯!提升企业信用监管数据质量 破除“信息孤岛”
“中非阿视听之夜”活动在北京举行 环球热点评
上海市算力网络数字医疗创新实验室发布医疗算网大模型“Uni-talk”_短讯
锦富5.03亿元竞得江门蓬江滨江新区商住地 楼面价4600元/平米
全球热推荐:2023广州李荣浩演唱会内场票价多少钱?
530是什么意思的代表了什么_530是什么意思