Unity ET框架小记
前言
之前用过一段时间Mirror
,它是一个服务器客户端一体的框架,通过给方法打上特定注解,来控制该方法运行在客户端还是服务器上(Unity
官方已弃用的UNet
设计思路一致)。这是它的优点,也是它的缺点,见仁见智吧。抛开这一点不谈,如果是客户端做主机那还好,但如果要打包为Deplicate Server
,在云服务器部署运行,Mirror
的性能就比较差了。
我需要一个商业级的游戏服务端框架,它最好开源易用、性能良好且已被各种项目验证。ET
框架看起来符合这个要求。
ET
框架的教程网上已经很多了,这里只记录一些我觉得比较重要的点。
项目初始化
每次新开项目总忘记初始化的步骤,索性在此按步骤顺序记录下来,方便日后查阅。
- 先使用
Unity
编辑器打开ET
框架Unity
文件夹,进入Preference
,编译器选VS2022
,Generate .csproj files for
全取消勾选。进入Init
场景,右键Project
面板选Open C# Project
,等待VS
加载完毕后即可。 - 返回
ET
框架目录,打开Client-Server.sln
,VS
从顶部选择工具->选项->适用于Unity
的工具->将“禁止完整生成项目”改为False
。看到项目结构列表,先右键Unity.Mono
生成,再选中解决方案生成。
初始化完成。
ET服务端架构
ET
是一个单线程多进程的框架,因为它的多进程特点,方便做分布式架构和负载均衡。
由于它的组件化和多进程的特点,可以任意组合以实现第一、第二或第三代游戏服务器架构。
ET框架中的ECS编程原则
- 实体即组件,组件即实体。
- 如要编写一个新的实体或者组件,绝不继承除
Entity
之外的任何父类。 - 绝不使用任何的虚函数,使用逻辑分发替代。
Model
和ModelView
只存放实体和组件的数据字段声明,如非必要绝不放任何逻辑函数。Hotfix
和HotfixView
中只保留纯逻辑函数,也就是使用静态类和扩展方法编写的System
,且绝不允
许存在任何数据字段。Model
和Hotfix
中绝不允许出现跟Unity3d
引擎相关的游戏对象类和调用相关API
函数。- 如实体或组件有数据字段声明必须编写相关生命周期函数,以防实体对象池回收再利用导致逻辑错误。
为了避免OOP
中冗长的继承链导致代码难以扩展,ET
使用ECS
架构,使用各个实体的组合实现对应逻辑。组合大于继承在这里体现得很好。
至于ET
框架的其他部分,如:EventSystem
、ETTask
、Excel
配表、Protobuf
协议生成、Actor
模型等等,这篇博客总结得都差不多了,故不在此记录。
参考资料
关于ET
的设计理念和核心思想,可以查看作者的ET Book
,指路->ET/Book at master · egametang/ET (github.com)。