找回密码
 立即注册
查看: 211|回复: 2

游戏开发架构概论

[复制链接]
发表于 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动画组件流程
    演化过程:在逐个编写子模块的过程中发现某些地方设计不合理,修复甚至推翻重做替换的过程逐步演化完善架构
    文档的重要性:方便后续完善过程中兼容考虑之前思考的问题
发表于 2023-3-27 12:03 | 显示全部楼层
rudp 游戏的网络实现  有类似的代码参考吗[飙泪笑]
发表于 2023-3-27 12:09 | 显示全部楼层
具体细节我也还没吃透只知道基本的理论,代码可以在github上面找找。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-4 08:33 , Processed in 0.102616 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表