博毅创为Alan老师

导航

Unity如何搭建游戏框架

Unity引擎本省就是一个框架,我们基于Unity再做一个游戏开发框架,本质就是建立一种组织自己项目的方式和方法,让程序+美术+策划一起协同工作,同时能开发出满足项目需求的游戏产品。所以游戏框架的架构与设计与项目管理本身有很密切的关系,今天从另外一个维度来说说基于游戏引擎来如何来做游戏app游戏开发框架。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

1: Unity引擎给我们开发游戏提供的是机制

渲染机制:

Unity封装了很多基础的渲染绘制相关的功能与组件以及渲染效果的一些基础算法,同时引入摄像机,光照等基本的处理方法。然后提供了一种机制(可编程渲染管线机制)允许开发者自己定制渲染的流程,数据传递和处理逻辑。同时提供了机制,让程序员能自己写Shader来定制一些特殊的渲染效果。为了降低开发难度,Unity为我们实现了几种常用的渲染管线与配套Shader, 如向前渲染管线,延时渲染管线,HRP高清渲染管线,URP轻量级渲染管线。

 

开发机制:

Unity给我们提供了两种开发机制,一种是组件化的开发机制,一种是ECS的开发机制。我们在做框架的时候,首先要想清楚我们是基于哪种开发模式,ECS现在比较火,性能高。组件化模式简单,符合大多数人的开发习惯。我们都采用引擎提供的开发机制来开发对应的游戏逻辑。

 

资源管理更新机制:

Unity针对资源管理提供了3中常用的机制,Resources, Assetsbundle, Addressable,根据你游戏的项目来选择一种机制就可以了,但是Unity引擎不会引入资源版本与打空包这些需求的考虑,因为每个项目都不一样,所以就需要你自己做框架来解决这些策略问题。

 

可视化编辑器与编辑器扩展机制:

可视化的搭建游戏场景是游戏引擎的主要功能之一,所以Unity提供了基本的编辑器的功能,提供了基本的组件和控件。同时每个项目有不同的一些工作流,比如打包脚本,比如关卡编辑器,对于Unity而言提供给用户进行扩展编辑器功能的机制,能给开发者做成一些工具实现不同的项目策略集成到游戏项目里面。

 

跨平台机制:

Unity帮我们解决了跨平台游戏发布的问题,这样不用每个平台都写一次代码。一次开发,发布到多个平台,但是我们发布游戏的时候可能要集成SDK,所以他提供原生的开发机制出来,让我们直接基于Unity 生成 对应平台的项目,然后再用对应平台的工具去对接SDK,比如Unity通过IL2cpp生成xcode的项目,如果要对接iOS的SDK,直接基于xcode使用苹果应用开发的规则来对接就好了,引擎提供SDK的机制,但是具体对接什么SDK,一次对接多少SDK,使用SDK的哪些功能,它不管。

 

玩家输入设备:

游戏需要接收玩家的操作,游戏引擎要对接各种操作设备,键盘鼠标这种直接从操作系统接入就可以了,还有其它游戏手柄的设备, 提供输入的虚拟映射,来方便玩家来配置对应的操作。鼠标,键盘,触摸屏, 游戏手柄等都接入到了游戏引擎中。如果有特殊的设备,可以根据SDK直接来访问和对接。

 

提供第三方开发库的机制:

Unity 通过Package和插件的方式来提供开发库与插件给别人使用,这样别人只要导入插件就可以用对应的功能库了。同时Unity提供了商店机制,方便开发者把开放好的第三方库放商店里面给全球的开发者使用。

 

提供性能参数分析相关机制与工具:

Unity 提供profiler工具对游戏开发中的性能剖析是非常重要的,因为有些性能数据只有Unity引擎内部才有,Unity内部有很多重要的与性能相关的数据,都可以供开发者访问到,但是它提供的性能分析工具只展示了通用重要的数据,于是有一些性能分析工具根据不同的项目性能需求,显示出更细致的性能数据的插件,其实都是读取了Unity提供的性能数据。

 

还有其它的一些机制,我这边就不一一列举了,对于Unity引擎给开发者提供的是一些游戏开发中的常用的机制,而接下来我们要做的是用这些机制,结合我们的项目和团队定制出最适合我们开发游戏项目的策略,所以本质上来说我们做游戏框架其实是基于Unity机制来定制定制适合我们的一种开发策略。

 

Unity游戏框架需要定制哪些策略

 

根据游戏定制渲染管线+Shader策略:

这个是大型游戏项目中很重要的一个环节,它首先会涉及到游戏的渲染效果,涉及到游戏运行的性能。比如我们要做一个卡通风格的游戏《火影忍者》里面所有的角色都是卡通风格,那么我们做框架的第一件事情就是要实现卡通渲染着色Shader。

如果游戏不需要支持任意数目的光源,最多只有4个光源,但又需要实时光照计算,而不能用静态光照,又需要极致性能在手机上跑,我们可能就会定制渲染管线或换渲染管线,用定制渲染管线或URP轻量级渲染管线来代替传统的向前渲染管线。所以框架要做的第一件事情就是根据项目选着或开发适合项目的渲染管线与Shader。然后做项目技术验证,看看当前的渲染效果与性能能否满足要求,多平台手机端的差异是否被解决等。

 

选择合适的开发模式来定制开发策略:

我们用Unity做项目的时候搭建框架首先要考虑的就是开发模式,到底是使用传统的组件化开发模式还是使用ECS模式,还是组件化+游戏逻辑ECS的模式结合。这个根据自己的项目来选择合适的就可以了。ECS,数据都在一个Entity内,大量的数据用Trunk分配,避免内存碎片,提升访问数据的缓存命中,提升性能,System只有代码算法逻辑, 可以通过多线程来调度System获得更好的性能。组件化模式开发简单方便,符合大多数开发者的思维习惯,选一个合适自己项目和团队的方式就可以了。有些技术总监一上来就各种复杂的开发模式,其实要反思一下这样是否真的适合团队,复杂的东西不是每个团队的开发者都能驾驭好的。

 

选择合适团队与项目的开发规则

开发模式选好了后,就来制定开发中团队协作的一些规则,通过规则来限定不同的研发角色的一些工作方式,让大家统一,高效的协同作战。比如版本管理工具用git。所有的角色,特效,UI,地图场景都做成预制体,预制体不挂任何的逻辑代码。根据美术来分好项目资源目录结构,场景美术, UI美术, 特效美术, 角色美术与动作特效等, 这样就可以独立的工作最大限度的减少版本冲突等。这些策略确定好了都是为了多人更好的协同开发,减少冲突。

制定好规则,规定好哪些代码需要考虑重用,哪些代码不用考虑重用,很多开发者在写一些原本不用考虑代码重用的地方,花了很多心思,想了很多的设计模式来包装,其实有时候没有必要,提前制定好规则,不用考虑重用的地方不用花太多的心思精力在可复用上。这样能大大减少开发人员包袱,让逻辑代码更简单。

制定好代码模块的衔接规则,能方便的屏蔽代码,隔离错误,移除与重构质量不高的代码。

还有一些定制命名规范等规则,一些程序与策划沟通的规则,这些就不再展开描述了。

 

定制好基于版本管理与增量更新的资源管理策略:

资源管理对于游戏开发而言是非常重要的,在开发中控制游戏的内中占用涉及到资源的加载与释放,每次更新新的功能与游戏打空包都涉及到资源的增量下载与更新,Unity提供了3中机制来做资源加载Resources, AssetsBundle, Addressable, 由于要涉及打空包和资源更新一般资源管理都抛弃掉了Resources,大部分的项目都基于AssetsBundle或Addressable来做好资源管理,资源的版本管理,和基于版本的增量更新与断点续传。这些都是框架自己根据项目来定制策略。

定制好多平台自动化打包发布的策略:

当我们开发完游戏或者游戏在测试的时候经常需要做版本发布。做好自动化的打包与发布非常的重要,比如某个版本要做内测了,用git拉取一个分支出来,然后运行自动化打包脚本,生成对应平台的安装包提交内测。内测的时候测试报告如何写,需要测试哪些功能等都要做好规定,定制好对应的策略,稳定的项目都是通过优秀的管理与测试测出来的。

 

定制好特定项目的特定工具

很多特定的游戏需要开发一些工具来完成,如关卡编辑器, 行为决策树,路径烘培与地图生成工具等。这个时候我们就需要开发一些工具出来给美术,策划来使用,帮助他们和程序很好的配合,完成项目开发。

 

经过这些考虑,基本上一个游戏框架的雏形就出来了,一个组织游戏项目开发的流程与规范基本就定型了,这样项目也就基于这样的方式铺开来,进行快速的迭代开发。

 

这个群里有一些的Unity游戏主程框架进阶的一些课程,值得大家学习和交流。

posted on 2023-10-24 14:56  游戏开发阿博  阅读(94)  评论(0编辑  收藏  举报