Unity ET服务器框架小记

发布时间 2023-11-07 00:21:14作者: AshScops

前言

之前用过一段时间Mirror,它是一个服务器客户端一体的框架,通过给方法打上特定注解,来控制该方法运行在客户端还是服务器上(Unity官方已弃用的UNet设计思路一致)。这是它的优点,也是它的缺点,见仁见智吧。抛开这一点不谈,如果是客户端做主机那还好,但如果要打包为Deplicate Server ,在云服务器部署运行,Mirror的性能就比较差了。

我需要一个商业级的游戏服务端框架,它最好开源易用、性能良好且已被各种项目验证。ET框架看起来符合这个要求。

ET框架的教程网上已经很多了,这里只记录一些我觉得比较重要的点。

项目初始化

每次新开项目总忘记初始化的步骤,索性在此按步骤顺序记录下来,方便日后查阅。

  1. 先使用Unity编辑器打开ET框架Unity文件夹,进入Preference,编译器选VS2022Generate .csproj files for全取消勾选。进入Init场景,右键Project面板选Open C# Project,等待VS加载完毕后即可。
  2. 返回ET框架目录,打开Client-Server.slnVS从顶部选择工具->选项->适用于Unity的工具->将“禁止完整生成项目”改为False。看到项目结构列表,先右键Unity.Mono生成,再选中解决方案生成。

初始化完成。

ET服务端架构

ET是一个单线程多进程的框架,因为它的多进程特点,方便做分布式架构和负载均衡。

由于它的组件化和多进程的特点,可以任意组合以实现第一、第二或第三代游戏服务器架构。

image

ET框架中的ECS编程原则

  1. 实体即组件,组件即实体。
  2. 如要编写一个新的实体或者组件,绝不继承除Entity之外的任何父类。
  3. 绝不使用任何的虚函数,使用逻辑分发替代。
  4. ModelModelView只存放实体和组件的数据字段声明,如非必要绝不放任何逻辑函数。
  5. HotfixHotfixView中只保留纯逻辑函数,也就是使用静态类和扩展方法编写的System,且绝不允
    许存在任何数据字段。
  6. ModelHotfix中绝不允许出现跟Unity3d引擎相关的游戏对象类和调用相关API函数。
  7. 如实体或组件有数据字段声明必须编写相关生命周期函数,以防实体对象池回收再利用导致逻辑错误。

为了避免OOP中冗长的继承链导致代码难以扩展,ET使用ECS架构,使用各个实体的组合实现对应逻辑。组合大于继承在这里体现得很好。

至于ET框架的其他部分,如:EventSystemETTaskExcel配表、Protobuf协议生成、Actor模型等等,这篇博客总结得都差不多了,故不在此记录。

参考资料

关于ET的设计理念和核心思想,可以查看作者的ET Book,指路->ET/Book at master · egametang/ET (github.com)

通过ET7实现双端游戏开发(一)之入坑 - 知乎 (zhihu.com)