ET 游戏框架快速上手:用一份 C# 代码库同时构建 Unity 客户端和游戏服务端
【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET
ET 是一个面向 Unity3D 客户端与 C# .NET 服务端的双端游戏框架,客户端和服务端共享同一套代码。官方基准测试中,单机网络层完成 100 万次 Ping-Pong 消息平均只花约 4 秒,折合每秒收发约 20 万条。如果你是独立开发者或小团队,打算做带服务端的在线游戏(尤其是 MMO),这是一个开箱就能搭起完整链路的候选方案。
图:ET9 起功能拆分为独立 Package(见 Packages/ 目录),包注册表可在 Unity 编辑器内配置
做带服务端的游戏,通常会撞上这两堵墙
第一堵墙是协议与逻辑的双份维护。客户端和服务端各写一套,消息结构在两边各定义一遍,改一个字段要改两处,时间久了两端必然漂移,联调变成找茬游戏。
第二堵墙是分布式服务端的调试成本。传统做法要启动一堆进程(登录服、网关服、战斗服……),断点根本没法打,开发基本靠打 log 猜。功能以后想从中心服拆到独立进程,又是一大轮代码迁移。
ET 的设计就是冲着这两点去的:双端共享代码消除第一堵墙,"组件挂载"式的进程设计消除第二堵墙。
用 ET 做在线游戏,你能拿到这几样东西
双端共享同一个 C# 代码库
网络消息、逻辑层代码只写一遍,客户端和服务端直接引用同一份文件。新增一条协议改一个地方就够了,两端协议天然一致。
单进程开发,发布时再拆多进程
服务端所有功能都是组件,开发时可以把全部组件挂进一个进程,一个进程就是整组分布式服务器,可以随便单步调试(N 变 1)。发布时换一份配置,按进程拆分组件即可(1 变 N),拆服基本不改代码。
纤程(Fiber)让多核利用不改变写法
纤程就像进程里轻量级的任务,比线程便宜得多,客户端和服务端都能创建多个纤程并行跑网络、寻路、逻辑。开发时你写的还是单线程代码,多核收益是架构自动给的。
KCP 可靠 UDP 加 MemoryPack 序列化,收发 0GC
网络层是纯 C# 实现的 KCP,底层还能切 TCP/WebSocket,UDP 联不通时运行时动态切换、玩家不掉线;序列化用 MemoryPack,网络收发不产生 GC。竞技类游戏丢包、闪断场景下比 TCP 更稳。
F7 热重载,服务端不停服更新
开发中改完代码按 F7 立即生效,不用重启客户端或服务端;线上服务端也能动态更新逻辑,省掉停机维护窗口。
机器人压测:复用客户端逻辑代码
机器人直接共享客户端逻辑层代码,官方案例里 4 台 24 核机器模拟 1 万人跑任务,上线前把服务端压力测一遍。
测试用例就是完整游戏环境
每个单元测试拉起一整条客户端加服务端的真实交互(例如起 5 个机器人客户端测组队),不用 mock 接口。这也是 ET10 主打的 AI 协作开发基础:让 AI 写完逻辑,再让它写测试跑通即可验证。
帧同步与状态同步的 demo 都有
仓库自带预测回滚帧同步(cn.etetet.lockstep)和状态同步(cn.etetet.statesync)两套可运行 demo,按你游戏的玩法选同步模型,不用自己从零搭。
从零到跑通状态同步 Demo 的 5 步
环境准备(清单):
- Unity 2022.3.62(锁定版本,新手不要换)
- Rider(最新版)与 .NET 8(Windows 可经 Visual Studio 安装,macOS 用 Homebrew)
- 全程保持稳定代理,否则 Unity 包与 NuGet 包下载会失败
运行步骤:
- 克隆全新工程(官方反复强调必须全新克隆,别拿旧工程改):
git clone https://gitcode.com/GitHub_Trending/et/ET - 项目根目录执行初始化:
pwsh ./Scripts/Initialize-Project.ps1 - Unity Hub 打开 ET 目录;Edit → Preferences → External Tools 里外部编辑器选 Rider,再 Assets → Open C# Project 打开 ET.sln
- 在 Rider 中完整编译 ET.sln(保持代理开启)
- 双击
Packages/cn.etetet.statesync/Scenes/Init场景点 Play,客户端连上自带服务端即可登录;想单独起服务端,用 Unity 菜单 ET → Loader → Server Tools → Start Server(详见 运行指南)
看数字:性能与规模的三个佐证
- 官方 Benchmark:100 万次 Ping-Pong 约 4 秒跑完,平均每秒收发 20 万条消息,README 里附了自检方法(Unity 菜单 ServerTools → select Benchmark → Start Watcher)。
- 商业 MMO《千古风流》:64 核 128G 的单服单物理机做到 1.5 万在线,100 人团队 2 年开发完成;官方称 Release 版优化后还有翻倍空间。
- 规模下限同样被验证:README 的商业项目列表里,神选誓约、新生、魔力回忆等多款 MMO 由 1 个人基于 ET 开发并上线。
当前主版本为 ET10,锁定的 Unity 版本是 2022.3.62,配套 .NET 8。
ET 适合谁,谁可以绕道
适合:做 MMO 或任何需要长连接服务端的游戏、希望一人或小队同时搞定前后端、愿意接受"框架规定架构"的 C# 团队——它的编译期分析器会强制你写出符合规范的代码,这既是约束也是护栏。
不适合:纯单机客户端游戏(服务端、网络、纤程这套机制对你只是负担);团队主力语言不是 C#;以及不愿按指定工具链(Rider + .NET 8 + 固定 Unity 版本)走的开发者。另外注意许可:开源版使用 ET License,仅限学习,商业使用需要购买商业许可(README 中标价 4999)。
现在就动手
克隆仓库,通读 Book/1.1Running Guide.md,然后按上面 5 步把状态同步 Demo 跑起来——第一个能登录的客户端出现之前,别急着讨论架构。
【免费下载链接】ETUnity3D Client And C# Server Framework项目地址: https://gitcode.com/GitHub_Trending/et/ET
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考