本文共 7458 字,大约阅读时间需要 24 分钟。
不论是对于Unity初学者还是极有经验的开发者来说,项目设计与管理都是迟早需要接触并掌握的知识点。本文将由Unity技术支持工程师田彪,为大家详细全面地介绍Unity项目设计与管理的系统知识。全文分为五大块,今天先为大家介绍上篇策划及美术部分的内容。在制作游戏时,游戏内容各型各色,但使用Unity设计游戏项目通常大致包括以下几部分:
项目简述
策划文案
美术资源
程序逻辑
性能优化
我们会详细介绍游戏制作过程中的每一步工作,便于Unity开发者以及潜在的开发者对Unity游戏开发有更深的认识,帮助开发者在开发过程中少走弯路。
想要制作成功的游戏,前期调研工作必不可少,作为开发者,需要了解玩家的喜好,聆听玩家的声音。在游戏完全推向玩家那一刻,该游戏就不再属于项目组,而属于该游戏的受众。游戏项目在启动具体内容开发时,需要确立以下几点:
市场上存在各种类型的游戏,为了避免游戏过于同质化,项目组的相关负责人需要确定,该项目是定位于何种类型,是RPG还是FPS又或者是Sport类。
任何项目组制作的游戏最终都需要推向市场,只有得到玩家的支持,游戏才能走得更远。项目启动初期,必定会存在游戏开发的大致时间计划,是8个月还是1年,又或者是18个月 ?
游戏项目开发必定存在经费预算,预算包括研发预算和推广预算两部分,项目组的人员配置通常取决于游戏复杂度和项目经费预算。在游戏总体内容固定前提下,人员数量与开发时间大致成反比,但是如果组内人员管理不善,也会存在不协调。所以在项目人员总数确定的情况下,还需明确项目组内具体分配,策划,美术,程序各多少人。
游戏大纲可以让所有项目组开发成员在没有接触游戏前能对将要开发的游戏有一个大致认识,同时也能激发项目组成员的想象力,对游戏内容提出更好的建议。游戏大纲是目前手游开发过程中被大多项目组忽略的重要一步。
“兵马未动,粮草先行~~”,优秀的策划文案是项目良好的开端。文案的内容相同,而排版不同,其效果必定也不同。设计文档应该逻辑清晰,排版干净,简单易懂,最好是图文并茂。比如可以是这样的
美术是游戏的脸,玩家对游戏的第一印象是美术风格,美术直接决定了玩家是否会在游戏中停留超过十分钟。美术人员在制作相关美术资源时,具体涉及到以下几个部分。
预先制定完整的美术标准后,在整个项目开发中,美术资源反复修改的频率降低了,美术人员所做的无用工作定然也大大降低。美术资源的标准规范大致涵盖以下几点:
材质数量
模型三角面
纹理尺寸
粒子数量
动画帧频
当美术人员把模型文件导入Unity编辑器时,若导入设置的各选项设置合理,对游戏性能有着良性影响,导入时需要注意以下事项。
若勾选上图中”Read/Write Enabled”将会使该模型在内存中存在一份拷贝,用于在脚本中对模型进行修改。若该模型不会在脚本中进行修改,则不勾选。
Optimize Mesh 必须勾选,便于引擎底层对Mesh进行优化处理。
Normals & Tangents 中的Normals选项若设置为非Import项,可以降低Memory,并减少ipa/apk包体容量。
Unity引擎在导入Shader到编辑器时,不会对Shader进行编译,而是在开发者发布到具体平台时再编译Shader。在Shader的查看面板可以查询具体信息,如下所示:
如果当前Shader为固定管线模式,点击上图中的Show generated code 按钮,可以查看对应的Vertex/fragment模式代码。
点击上图中的Compile and show code可以生成对应的汇编代码或者GLSL代码。
在工程文件夹的Library/ShaderCache文件下,可以查看所有的Shader缓存文件。
Shader性能分心工具 — AMD GPU ShaderAnalyzer / PVRShaderEditor。
Unity支持目前主流的各种图片格式,包括PSD,TGA,PNG,GIF,BMP,JPG,TIFF,PICT等。引擎在导入图片时,会生成引擎自身所使用的贴图数据,在图片导入设置中,需要合理设置各选项。
若勾选上图中”Read/Write Enabled”将会使该贴图在内存中存在一份拷贝,用于在脚本中对其进行修改。若该贴图不会在脚本中进行修改,则不勾选。
若图片尺寸不是2的指数,其所占用内存的大小略大于原始尺寸,并且GPU对其进行读取的速度也有可能会略微偏慢。
若勾选Generate Mip Maps,改贴图所占用内存会变大33%,但对整体性能有很大提升。
Unity 5使用了全新的光照系统,更优的光照算法,有助于美术人员制作优美的场景,但是使用光照时,除了考虑到场景精美度时,还需要考虑到玩家设备的兼容性。
移动平台推荐使用Baked或 Mixed,避免使用RealTime模式的关照。
Render Mode 不推荐使用Important。
使用Baked模式时,在菜单Window->Lighting的Object标签页,可通过设置Scale In Lightmap的值,以变更lightmap中有多少像素值用于该GameObject的光照计算。
Unity目前支持Animation和Animator两种动画播放形式。Animation是老式动画系统,Animator作为新的动画系统,有其特有的优势。在使用Animator时,理解如下信息,有助于更好的使用的Animator。
勾选Apply Root Motion表示动画可以更改根节点的位置,如果不勾选,则根节点的位置信息无法通过动画更改,即便在动画帧里有关于根节点的位置信息。
State 表示具体的动画状态信息,若要实现状态切换,通过Transition完成。
Blend Tree 用于多个动画的平滑混合,并且可设置每个动画各自的权重值。
在菜单Window->Animator窗口中可执行具体操作。
声音是游戏中不可或缺的部分,好的音乐效果对提升游戏品质有着重大意义,Unity支持主流的各种音乐格式,包括mp3,ogg,wav,aif等。但是,如果音乐格式设置不当,也会降低游戏性能。
基于Vorbis编码的音乐文件(比如ogg)解压后占用10倍于其磁盘大小的内存。
PCM音质高但是压缩率很低。
Mp3格式音乐在iOS设备上有硬件解码器。
Load Type 中的Decompress On Load 选项不推荐用于大文件。大文件推荐使用 Compressed In Memory选项。
Load In Background 如果勾选表示该音频文件将在后台加载,而不会造成主线程阻塞。
合并模型(美术人员手动合并或者使用引擎的Batching技术)
在合并模型时,如果被合并的模型并未使用同一材质,那么该合并操作并不会提升性能。同理,如果被合并的模型使用了多重材质,而并不共用贴图,合并操作也不会提升性能。
减少材质的使用数量,尽量材质共用
纹理拼接,把多张小尺寸纹理拼接到同一张大尺寸纹理中
避免使用多重渲染,比如反射,阴影,像素光照等
动画优化,包括减少骨骼数量,降低动画帧率等
模型对象
调整模型三角面是优化美术资源的基本步骤,如果一个角色模型1500面能达到要求,那为何要使用1600面呢。
光照设计
在移动设备上,尽量使用light map代替实时光照,即便美术人员需要很炫的光照效果,也可以预先由美术人员调节好实时光照效果后再进行light map烘焙。
Shader性能
Unity引擎为开发者提供了大量的内置Shader,基本满足开发者的项目需求。如果某些特殊效果需要自定义Shader,在编写Shader程序时,需要注意一些具体细节。
纹理压缩
压缩纹理不仅可以节省内存,同时也节省运算带宽。同时,建议3D模型贴图都应生成对应的Mipmaps,如果选择生成Mipmaps,则该纹理对应的内存大小相对原先会变大33%左右,但如果不选择生成Mipmaps,则在整体性能上会有很大损失。
LOD使用
Unity中关于LOD的使用有LOD Group和Camera.layerCullDistances两种方式。其中LOD Group主要用于大型模型对象,而Camera.layerCullDistances主要用于碎片化的模型对象。
Profiler
Memory Profiler
Frame Debugger
Test Runner
Mac OS -> Instruments
Allocations, Time Profiler
最后,Unity的官方手册是Unity开发者执行性能优化的葵花宝典,在你素手无策时,不妨尝试如下步骤: