ET框架:让Unity客户端与C#服务端不再各写一套
【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET
做多人游戏时最常被卡住的,是服务端逻辑和客户端各写一遍,分布式调试又要同时开好几个进程。ET框架的做法,是让Unity客户端和C#服务端共用同一套逻辑代码,并把分布式服务端的联调压缩进单个进程,主要面向要同时管客户端与服务端的团队。
🔧 ET框架核心设计:组件化、单进程与跨平台
实体与组件:把功能拆成可拼装的块
ET把游戏对象统一拆成实体(Entity,一切事物的基本单位),实体上可以挂组件(Component,挂在实体上的独立功能块)。也就是说,Player可以按需组合网络、属性、技能这些组件,各块独立扩展、互不拖累。传统做法是在一个大类里堆方法,或者层层继承;这里是"基础实体 + 组件拼接",组合关系一眼可见。原理展开可以看组件式设计说明。
单进程联调:分布式不再要多开窗口
ET开发期把全部服务器组件挂在同一个进程上,整套分布式拓扑在一个进程里就能模拟和断点调试。所以你可以像调本地代码一样调"集群"。传统做法是多个终端手动启动、逐台同步状态;这里是开发单进程,发布时用简单配置拆成多进程部署,代码不用改。
一套C#跨平台:Windows开发、Linux发布
服务端基于.NET 8(.NET Core的当前版本)编写,Windows上用Rider或Visual Studio调试,发布直接跑Linux,同一份代码不用改写。传统做法是客户端用C#、服务端换Go或Java,两边重复实现玩法;这里两端语言统一,公共逻辑直接复用。
🚀 ET框架从克隆到运行:环境搭建步骤
环境要求:Rider 2024.3+、.NET 8 SDK、Unity 6000.0.25。
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/et/ET - 在Unity Hub中打开ET文件夹(完整步骤见运行指南)
- 把外部脚本编辑器配置为Rider
- 获取GitHub Token,配置包管理器
- 安装状态同步Demo包,或帧同步Demo包
- 在菜单运行ET→StateSync→Init,或ET→LockStep→Init
- 编译ET.sln解决方案
- 打开Init场景点Play,即可一体化运行,也可以独立启动服务器

⚙️ ET框架热更新、网络协议与AI:值得展开的几件事
热更新:ET把所有逻辑方法做成扩展方法打进热更DLL,运行时重新加载DLL即可生效,不需要重启服务器。也就是说线上修数值、改行为不用停机发版。想动手可以从服务端启动流程切入,观察DLL加载时机。
多网络协议:ET除了TCP,还支持ENet和KCP两种可靠UDP协议。当客户端网络丢包率高时,这两者的延迟表现更稳,MOBA、竞技类玩法尤其用得上。建议先从TCP通路读起,再切KCP做对比测试。
内置AI框架:ET带了行为树等常见AI实现,NPC行为可以直接用节点拼出来,不必每个项目从零写状态机。切入入口就是下面两篇AI文档,AI框架总览先建立概念,行为机实现看落地方式。
顺带一个硬指标:商业MMO"千古风流"用ET在64核、128G内存的单物理机上承载1.5万在线,Release版本再开优化,性能还能翻倍。
📚 ET框架适合谁 & 延伸入口
ET适合做MMO、MOBA或任何大型多人玩法、客户端服务端都用C#的团队;如果你只是单机休闲小游戏、暂时没有分布式需求,它的分布式那套能力可能用不太上。
延伸阅读:
- 环境搭建与运行指南
- Actor模型:分布式通信机制
- 协程与单线程异步
- 为什么服务端选择.NET Core
【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考