前言
之前用过一段时间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)。
通过ET7实现双端游戏开发(一)之入坑 – 知乎 (zhihu.com)
__EOF__
本文作者:OtusScops
本文链接:https://www.cnblogs.com/OtusScops/p/17814155.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!