samsparty 发表于 2023-3-27 11:56

游戏开发架构概论

Unity3D高级编程读书笔记
意义

一个好的架构需要具备如下几个特点

[*]承载力:例如一个架构能承载多少逻辑系统,当代码行数拓展到百万行,是否可以实现彼此的工作解构,服务器架构能承载多少人同时访问,客户端能渲染多少元素
[*]可扩展性:在添加新的子系统后能不影响或尽可能的少影响其他子系统的运作,不必跟着重写
[*]易用性:效率高,容易上手,对接
[*]可伸缩性:服务器可大可小成本动态,开发流程可以被简化缩小成本
[*]容错性以及错误的感知:出现Bug时可以及时感知
思维方式

架构系统的时候抽象能力是最重要的
具备抽象能力具有以下三种工具:

[*]分层思维:在面对复杂系统时候,采用划分层次先后的顺序解决问题,每个层次都专注解决某个问题。最后再先后穿插形成整个系统层次
[*]分治思维:面对复杂或者没有处理过的问题问题也可以采用分而治之,对于一次无法解决的大问题,把大问题分解为若干子问题,直到可以解决的小问题,解决小问题便可以逐步解决大问题
[*]演化思维:在前期设计的时候就要想好后期可能的演化方向,渐近的把单块架构演化成微服务架构
Unity架构

采用先分层->分治->演化的形式构建Unity架构
核心分为五大层:

[*]UI框架层
[*]核心逻辑框架层
[*]资源管理层:分AB管理和Prefab管理
[*]数据管理层:分内存数据管理和外部数据管理
[*]网络层
[*]常用/工具库
[*]动画控制
根据项目实际情况再分治各个层级,直到确定每个具体可以执行的子问题,并且把最难把控的放在最优先的位置去做
例如对于网络层可以分解成使用UDP/TCP/HTTP(这里据我了解一般都是用UDP+重发包实现rUDP,TCP与UDP的选择在前些年已经被证实UDP更好)
对于网络层的API又可以拆分为Connect和DisConect、Send、Receive、Event等等,而对于其中的每一个API接口方法确定具体的实操细节逐个击破
各个其他层的拆分原则:

[*]数据表:Excel选择二进制/Json/Pb(之前实习全用的pb,这里作者写做选择应该是在demo开发前期用Json会更方便,例如一开始学做的单机小游戏就是用Json),读取接口和解析接口的定义(例如Pb的MergeFrom、WriteTo这些接口函数是否需要简化裁剪防止占用代码段大小)
[*]UI层:NGUI/UGUI(这里不太理解为什么NGUI还要纳入选择,难道不是普遍用UGUI),对界面基类、界面管理、输入事件绑定进行选择,自定义通用组件基类和各类通用组件
[*]外部资源管理:是否用AB,是否对AB分类,是否依赖AB资源之间的关系,是否加载与释放AB的管理,是否加密AB
[*]AI层:状态机/行为树/机器学习/其他,状态机/行为树接口,AI可视化工具,AI拓展接口
[*]地形地图:2D/3D,场景编辑器是否用网络合并,场景内大小物体区别对待,大地形如何显示,是否划分区块
[*]寻路与网格:A星算法/跳点算法/其他算法,网络栅格/三角网格,长距离寻路的解决方案/地图数据管理
[*]常用库:时间函数,数学函数,数字变量加密封装,坐标转换函数,Debug调试工具,各大逻辑系统通用工具
[*]角色行为控制:人物移动处理方案、摄像机碰撞检测、动画特效编辑器、技能编辑器、行为流的建立
[*]2D动画控制:动画组件封装,2D图合并为图集,2D动画组件流程
演化过程:在逐个编写子模块的过程中发现某些地方设计不合理,修复甚至推翻重做替换的过程逐步演化完善架构
文档的重要性:方便后续完善过程中兼容考虑之前思考的问题

maltadirk 发表于 2023-3-27 12:03

rudp 游戏的网络实现有类似的代码参考吗[飙泪笑]

TheLudGamer 发表于 2023-3-27 12:09

具体细节我也还没吃透只知道基本的理论,代码可以在github上面找找。
页: [1]
查看完整版本: 游戏开发架构概论