IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:ECS

共 2 篇相关文章

IT 累计浏览 2,539

ECS 中的消息发布订阅机制

这篇讲的是作者在用Lua实现ECS框架时,如何解决“周期性状态迭代”与“响应式事件处理”之间的矛盾,并最终引入一套完备的消息发布订阅机制。 作者从实践中发现,纯粹的游戏循环难以高效处理复杂外部输入。因此,他最初刻意在ECS中回避事件系统,将内部事件都转化为状态变化。但这并不完全符合游戏混合型业务的本质。 于是,他决定为框架增加消息发布订阅模块。核心实现非常灵活:每条消息都是一个Lua table构成的键值对,例如 `{ type = "mouse", action = "move", x = 100 }`。系统通过 `world:pub` 发布,任何System则通过一个模式(pattern)来订阅感兴趣的消息,比如订阅所有 `type="new"` 的消息,或者只订阅特定实体的状态变化。 巧妙之处在于其性能优化思路。作者没有选择简单的遍历匹配,而是在订阅时建立索引缓存。发布时,先根据消息中的各个条件快速排除不相关的订阅者,大幅减少了比较次数。这种用空间换时间的策略,让消息分发效率更高。文章也探讨了面对复杂条件可能导致的缓存膨胀问题,为后续优化留下了空间。

IT 累计浏览 2,703

浅谈《守望先锋》中的 ECS 构架

这篇技术博客的作者从《守望先锋》GDC演讲出发,深入浅出地解析了游戏开发中的ECS架构。文章直面传统面向对象游戏引擎的痛点——每个游戏对象都捆绑了所有功能模块的Update方法,导致模块间耦合严重、内聚性差。对于像《守望先锋》这类需要复杂网络预测与同步的游戏,传统架构显得力不从心。 作者详细拆解了ECS(Entity-Component-System)的核心设计:Entity仅作为带ID的生命体容器;Component是纯数据(如位置、输入状态);System则是纯逻辑处理单元。框架负责根据System声明的Component组合,自动筛选出它关心的Entity子集进行遍历。这使得每个System能高度专注且松耦合。文章还提到了Singleton Component的演进、Utility函数的使用以及如何集中处理有副作用的行为。 最终,作者指出ECS最大的优势在于清晰分离状态与逻辑,这极大简化了网络同步中的状态快照与回滚操作。《守望先锋》利用这套架构,在60fps的固定更新频率下,优雅地处理了客户端预测、服务器仲裁及网络波动时的“时间压缩”同步难题,展现了架构在管理复杂度上的强大能力。