Notifications
Article
最佳实践 | Unity项目设置
Published 9 months ago
388
0
最佳实践系列文章将探讨我们在与客户合作时遇到的一些常见的问题。这些都是我们的合作团队辛苦得出的经验和教训,我们很自豪能够和大家分享他们的智慧。
在Spotlight团队中,我们和优秀的Unity开发人员一起合作,深度挖掘Unity在游戏开发中的潜力。针对复杂图形、性能和设计方面的问题,我们看到了各种具有创新性的优秀解决方案。我们也看到了同样的问题与解决方案不断的反复出现。
最佳实践系列文章将探讨我们在与客户合作时遇到的一些常见的问题。这些都是我们的合作团队辛苦得出的经验和教训,我们很自豪能够和大家分享他们的智慧。我们已经为大家分享过以下内容:
最佳实践 | 碰撞性能优化
Unite Europe案例项目《影子战术》层级优化经验分享
这其中的很多问题只有在真正制作主机游戏、手机游戏、或者处理巨量游戏内容时才会出现。如果能在开发早期就将这些问题考虑进去,那么开发过程就会更轻松,而游戏也会更炫酷。
文件结构
在首次添加相机、摆放城镇、或是旋转某个立方体之前,花点时间思考项目的文件结构。虽然在项目窗口中非常容易搜索游戏数据,但完全依赖搜索并不切实际。理想情况是,通过良好组织的文件结构指引团队成员在对搜索内容毫无头绪时也能直达目的地。
组织文件结构有多种方法,下面将列出我们所见过的很不错的示例。但记住一点,选择适合项目的即可。如果您的项目布局能够很好的解答下列问题,那就可能是一个相当不错的布局。
  • 谁制作了这个资源?这是团队自己实现的还是购买的?
  • 这是什么类型的资源?脚本、音频、美术还是设计?这些信息有助于在游戏中发现问题时能追踪到数据。
  • 这个资源涵盖游戏的哪些部分?是否只出现在特定关卡,或是整个游戏,或仅用于登录界面?这些信息有助于了解指定资源的价值所在,以及对其进行更改时还需要处理多少相关数据。
  • 数据是否条理清晰?预制件或角色是否位于源模型附近,动画文件是否也在一起?
下面来介绍一些设计项目结构的示例。
文件夹置顶
  • 将所有自制资源所在的文件夹名称前缀加上下划线(_)。 这会将这些文件夹排列在其它文件夹之前。 就个人而言,我喜欢场景文件夹在最顶部,所以前缀添加两个下划线(如:__Scene)。
  • 从Asset Store资源商店下载的所有内容就保留默认安装目录。
  • 如果大量修改了资源商店购买的资源,就在文件夹名前面添加下划线,以免被更新版本所覆盖。
分而治之
  • 将所有从资源商店下载的内容都放在名为AssetStore的子文件夹下。
  • 修改所有使用硬编码路径的代码。
  • 这样可以将资源文件夹掌控权紧握于手,并且足够整洁。
每次先规范顶层文件夹
  • 每个工作小组都有自己的文件夹。关卡设计、系统设计、场景美术、角色设计。
  • 适用于大型团队。
  • 将您制作的内容放在易于识别的文件夹下。
  • 本地数据条理清晰。相关联的数据靠近放置。
管理资源商店插件包
对于有项目周期更长的大型团队来说,从资源商店下载的资源很容易就会让项目变得臃肿。杰出的插件作者们会努力让自己的工具易于上手,这就意味着通常这些插件会包涵大量的教程和示例项目以及所需的资源。
我们发现处理资源商店所带来的项目臃肿,最简单的方法就是避免将资源商店的大型资源包直接导入项目。而是导入到新项目中,然后删除不要的重度内容,仅保留项目所需。您可以清理任何不需要的资源,随意组织资源包,然后使用“Assets -> Export Package”对话框将其打包成新的资源包。
确保将原始版本和修改的版本都上传至您所使用的版本控制工具,以防后续更新您所购买的插件或者出现错误。
Unity 版本
下图就是我现在的桌面,由于同时兼顾的客户项目数量较多,所以总是需要至少安装5个Unity版本,其中还不包括1~3个最近从源码库中构建的版本。
如果您使用第三方版本控制工具,如git、hg、perofrce等,我强烈推荐添加您所使用的Unity版本。理想情况下,您游戏的每个分支都包含项目文件夹,然后就是项目所使用的Unity版本。随着您的团队不断扩大,这有助于简化管理,轻松升级Unity,也会有利于与Spotlight团队合作来分析项目。
初始项目设置
在新建项目时有一些很容易被忽视的项目设置。它们隐藏在自己的菜单里,通常离您正努力解决的问题十万八千里,很容易就忘记我们为您项目所附加的种种控制。下面根据菜单顺序,对一些最常被忽略的设置进行简单介绍。
Audio
  • 禁用Unity Audio:如果不打算使用Unity内置音频,那就在Audio设置下禁用Unity Audio。这将避免一些性能消耗。
Time
  • Fixed Timestep:如果没有大量使用关节或叠加刚体,就将其设为与目标帧率匹配,即(1/目标帧率)。
  • Maximum Allowed Timestep:这是允许传递给deltaTime的最大值。我一般将它设为约0.1f,也就是10FPS。如果您的游戏运行帧率低于10FPS,通常最佳方式是在恢复帧率前先慢慢优化。这对于随着游戏规模变大可能会出现的一帧延迟峰值非常有帮助,特别是在编辑器中进行加载时。
Player
  • Other Settings -> Rendering Color Space:几乎所有情况下您都期望将它设为Linear(线性)。它适用于大量的后处理特效。 GPU Skinning与Graphics Jobs:将两者都开启。这些设置都能改善在兼容性上的性能消耗。通过开启这些设置,可以确保所有内容都兼容它们。一些项目在开发后期才开启这些设置来改善性能,就可能会出现问题,此时修复性能所带来开销反而更高。
Physics
  • Default Solver Iterations:与上面的Fixed Timestep类似,它可以改善复杂物理系统的稳定性。如果项目不打算使用刚体,就将其设为1。
Quality
  • Anti Aliasing: 如果想要使用资源商店中的抗锯齿解决方案,或者是Unity的Post Processing Stack,就关闭默认的多重采样抗锯齿。
  • V Sync Count:如果您的目标帧率是30,就将其设为Every Second V Blank。如果出现开发期间帧率低于30的问题,则设为Dont't Sync。
Editor
  • Version Control:设置该项用于版本控制。如果没有使用版本控制,仍然建议使用Visible Meta Files,以便于在必要时候检查他们。
  • Asset Serialization:设置为Force Text。这将增加整个项目的大小,但您可以比较项目变化、检查资源,获得更多的控制权。这绝不会影响编译时间或最终编译的可执行文件。
如果想让您的游戏成为真正意义上的巨作,从项目一开始就要花点时间来正确进行设置,后续就会节省大量的时间。下一篇文章内容稍有不同,我们将分享一些内部编写的小型编辑器扩展工具,期望可以帮助大家提高开发效率,并演示如何自定以Unity编辑器。

Unity China
315
Comments