资讯动态

ET框架完整指南:分布式架构、Actor模型与组件式设计的3大核心机制

发布时间:2026/9/17 19:32:18 来源:尧图企业网站定制
ET框架完整指南分布式架构、Actor模型与组件式设计的3大核心机制【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ETET框架是一款同时覆盖 Unity3D 客户端和 C# 服务端的开源游戏框架主要面向大型多人在线游戏场景。它用分布式架构解决在线扩容问题用 Actor 消息机制替代容易出错的线程共享再用组件式设计让功能模块即插即用。本文按架构 → 机制 → 场景 → 上手的顺序把这套体系拆开讲清楚。️ 分布式架构为什么好落地传统游戏服务端常用单进程多线程的方式榨取多核性能代价是共享变量、加锁和难以复现的并发 bug。ET 反其道而行每个游戏逻辑进程只跑在一条线程上进程之间互不干扰。这个选择带来四个直接好处线程安全一个进程内的逻辑完全隔离不存在两个线程抢同一个变量的情况调试省心可以直接用现成的 profiler 和系统工具如 top查看 CPU、内存占用不用自己再造一套调试工具扩容无感一台物理机跑单进程和把同样的进程拆到多台物理机上开发方式没有任何区别性能释放逻辑单线程运行CPU 算力可以完整用在游戏逻辑上。代价也客观存在跨进程消息需要序列化/反序列化网络消息会有几毫秒延迟但通常可以忽略。 Actor模型落地Entity对象直接收消息经典 Actor 模型如 erlang把进程当作消息接收方发消息前要先知道对方进程的 PID。ET 做了两点不同的设计消息的接收单位是 Entity 对象而不是进程。一个 Entity 挂上MailBoxComponent组件就变成了一个 Actor对方只需持有它的InstanceId即可投递消息不用关心它具体在哪个进程、哪台机器上。架构基底是单线程多进程而传统 Actor 方案多为单进程多线程erlang 那种进程级 Actor可以看作 ET Entity 级 Actor 的一种特例比如把整个 Game.Scene 当作一个 Actor。实际使用中比如地图进程要把消息转发给玩家的 Gate 会话只要拿到该会话的InstanceId通过ActorSenderComponent取到对应的ActorMessageSender再Send或Call即可整个过程不涉及任何线程同步问题。 组件式改造功能模块如何热插拔ET 的设计哲学是一切皆实体所有游戏对象都继承自 Entity 基类能力不靠继承树堆出来而是动态挂载组件。给一个玩家对象依次加上移动、背包、技能组件player.AddComponentMoveComponent()这类调用它就获得了移动、物品管理和施法能力NPC 需要移动就挂移动组件不需要背包就不挂背包组件。这种组织方式带来三个特性高度模块化一个组件 一份数据 一段逻辑边界清晰热插拔运行时按需添加或移除坐骑、临时 Buff 这类阶段性能力不必永远占用内存极低依赖组件之间相互独立增删某个组件不会波及其他模块新人写的组件即使质量一般重写它即可不会拖垮整体。正因为组件可自由拼装ET 还能把整套服务器能力装进同一个进程当单机版分布式服务器调试发布时再按配置拆成多进程——开发期一个进程线上按需要拆 N 个进程。⏱️ ETTask协程异步操作写成同步的样子分布式服务端有大量跨进程的等待操作等远程调用返回、等数据库结果如果拆成回调逻辑会被切成碎片。ET 提供了ETTask 协程它基于 C# 的 async/await 思路但去掉了同步上下文那一层开销比原生 Task 写法更简洁高效。一句await WaitTimeAsync(5000);就能表达等 5 秒后继续执行整段逻辑读起来是线性的不存在回调地狱。 事件机制谁在驱动游戏逻辑ET 的事件系统EventSystem负责把数据变化和各模块响应解耦。框架内置了几类生命周期事件AwakeSystem在组件创建后触发一次UpdateSystem每帧执行ChangeSystem在组件内容被修改时由开发者手动触发此外反序列化完成DeserializeSystem等阶段也都有对应事件。同时开发者可以定义自己的自定义事件——典型用法是扣血消息只负责修改血值血条 UI 和头像模块各自订阅血值变化事件去刷新自己的显示模块之间互不依赖。 适合做什么类型的游戏MMO分布式架构配合 Actor 消息支撑数千玩家同时在线RTS单位控制、战斗判定天然适合消息驱动的 Actor 模型手机网络游戏组件粒度小、拼装灵活客户端开发效率高。 快速上手环境配置与开发流程先把仓库拉下来git clone https://gitcode.com/GitHub_Trending/et/ET环境上推荐使用Rider作为 C# 编辑器。在 Unity 的 Edit → Preferences → External Tools 中把 External Script Editor 选为 Rider并勾选生成 .csproj 的选项随后通过 Assets → Open C# Project 打开解决方案即可开始编码日常开发遵循固定节奏创建 Entity 对象 → 按需挂载组件 → 用事件组织逻辑 → 最后把单进程调试结果发布为多进程。功能上ET 已演进为 Package 模式网络、寻路、配置、登录等能力都以独立 ET Package 形式提供可按需集成。 下一步读哪些官方文档组件式设计说明理解数据与逻辑分离的完整思路Actor模型详解消息收发与邮箱机制的细节更好的协程ETTask 背后的实现原理事件机制 EventSystem各事件类型的订阅方式运行指南完整的环境搭建与打包步骤如果你正在规划 MMO、RTS 或以 C# 为唯一开发语言的双端项目可以直接从运行指南开始搭一个最小可运行环境再结合 Actor模型 的位置透明消息机制把单进程开发、多进程上线的工作流跑通。【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价