Unity作为全球最知名的游戏引擎之一,功能已经做的非常完善了,为什么我们还要在开发项目的时候需要搭建游戏框架呢?基于Unity来搭建一个游戏框架,我们又应该如何思考,如何做?今天给大家分享一些Unity游戏框架搭建相关的内容和理念。
为什么有Unity引擎还要搭建一个游戏框架?
Unity是游戏引擎,面对的是任意类型的游戏使用和不同的开发团队。所以他提供的是机制,很少提供一些具体的策略,比如资源管理,提供addressable/asssetsBundle机制。比如开发模式提供组件化开发的模式,比如编辑器扩展,提供编辑器扩展的机制。Unity提供的场景编辑,光照烘培,粒子系统等工具为我们开发游戏提供了很多方便,解决了3D游戏中场景制作特效等问题。提供Prefab机制,可以将编辑的好的内容做成一个一个的预制体。提供渲染管线定制与Shader开发机制,方便我们做出高性能的渲染和特定的效果以及开发特殊的Shader。提供了这些机制后,至于每个团队,每家公司具体怎么用即使用策略交给团队与公司自己决定,Unity不去做过多的设计和干涉。所以这就是为什么很多公司会基于Unity 做一套适合自己团队,适合自己游戏的开发框架, 来规定一些具体的策略,和开发协作中的一些规定。每个公司开发的游戏类型和需求不一样,有一些专门领域的算法和工具需要公司来定制,自然unity就不会提供了,比如特定的地图编辑器等。
Unity游戏框架要解决哪些问题?
上面了解了我们为何有了Unity引擎还要搭建Unity框架,接下来我们来分析一下一个Unity游戏开发框架到底要解决哪些问题,确定哪些策略和机制。
首先要确定的就是组织代码和资源的方式。我们做项目需要维护,需要多人协作,同时开发游戏,包含了美术,策划,程序等多个岗位的开发人员。如果通过制定一个策略把这些开发人员组织在一起,比如目录结构如何划分,美术做好的界面放哪里,美术做好的地图放哪里,美术做好的特效放哪里,策划做好的数值数据放哪里,程序如何使用资源,如何读取策划的数值表,数值表的格式是什么?程序的代码如何放,哪些属于其它项目可用的代码,哪些属于这个游戏业务逻辑代码。
其次要考虑的是游戏的核心玩法所需要的美术风格,渲染效果和游戏性能。对于一个游戏而言最重要的现在就是玩法与效果,所以客户端的游戏效果是什么样子对于游戏来说很重要,所以很多大型的游戏公司里面做项目的第一件事情就是定制渲染管线编写Shader做好对应的美术风格。同时手机游戏还要考虑不同的平台显示的效果的差异,需要通过修改代码来修正这些显示上的差异。还有些核心的玩法需要高度的依赖一些Shader,比如衣服布料等,同时多人战斗的核心玩法还需要定制和修改相关的组件来做到高性能,支撑核心战斗。
还有可能要针对游戏的玩法和类型开发一些特殊的工具,比如地图编辑器,比如关卡编辑器,比如路径点标记等等。这些就需要开发一些特殊的工具和脚本。
最后要做的就是上线发布时候必要的一些工具和功能,比如SDK对接,打空包,资源更新,代码热更新等。考虑这些,也是我们做游戏框架必须要解决的问题,而这些问题一般Unity引擎不会直接提供。
Unity 游戏框架具体如何设计
通过上面的描述大家明白了为什么要基于Unity游戏引擎来搭建框架,那么当我们要做一个类型的游戏的时候如何来做游戏框架呢?我这边分享一个我带项目时候的具体的做法,供大家参考。
首先策划会告诉我这个游戏的核心玩法,我要快速的确认这个游戏的美术风格细节(光照,影音等),确认最复杂最消耗性能的战斗客户端的性能是否能支持,最快的速度模拟这种性能极限来做渲染管线的定制和Shader优化等。核心玩法的技术难点一旦被验证过了,这个游戏基本上都能做出来。这样框架里面就有了渲染效果代码和特定的Shader。这个解决后美术就可以进场来做场景设计和资源编辑了。
渲染效果与性能问题解决后,接下来就开始做常用的一些功能模块来支撑业务逻辑的开发,首先是目录结构的组织,游戏框架代码的启动流程,各个常用的游戏模块: 资源管理模块, 调试日志模块,UI管理模块, 网络管理模块,数据表格管理模块, 一些工具性质的代码,如http上传下载, 工具类的函数等。
接下来搭建热更新与资源更新,打空包相关的代码脚本和编辑器扩展,能支持资源更新热更新,打空包等。打包的时候还要考虑到版本号和版本管理。
最后就是针对游戏玩法关卡设计等,开发一些工具,比如关卡编辑器,地图编辑器与路径烘培等。
这些东西都做好了以后,针对这个项目的框架就算做好了,大家基于这套来进行开发协作,框架也就做好了。
今天的分享就到这里.可以进去unity学习小组里可以获取一些更多的Unity 游戏开发相关的技术讲解和教程。