热门
Unity功能详解,助力创作者有效优化移动端游戏性能
随着手游的火热,移动端游戏慢慢变成了游戏中的主流类型。许多知名工作室、独立工作室和独立创作者都开始转而进行移动端游戏的制作。在制作游戏的过程中内存的过度使用,CPU性能限制等问题往往让游戏创作者十分头疼。Unity的高级软件工程师团队将为这些复杂技术问题提供支持并帮助创作者们大幅优化移动端游戏性能。在本文中他们将与我们分享一些有关移动端游戏优化的专业知识,如果你对创作移动端游戏充满热情或是正苦于没有好的引擎制作游戏,那么不妨请继续看下去。
多年的行业经验使得Unity的加速解决方案团队对游戏源代码了如指掌,与大量的用户合作,也使得他们能够充分利用Unity引擎帮助用户解决各种在开发中遇到的难题。他们深入到游戏项目之中,帮助用户确定游戏的性能优化点,以获得更高的速度、稳定性和效率。
在本文中将详细介绍如何通过用户界面、物理和音频设置等功能来提高游戏性能。
现在让我们开始吧!
物理特性
Unity内置的Physics (Nvidia PhysX)在手机上可能很耗费资源,但以下技巧可以帮助你每秒挤出更多帧。
优化设置
在PlayerSettings中,找到Prebake Collision Meshes
请确保你已经编辑了Physics settings(Project Settings > Physics)并已经简化了 Layer Collision Matrix。
禁用Auto Sync Transforms并启用Reuse Collision Callbacks。
修改物理项目设置以提高性能。
请留意性能分析器中的物理模块。
简化colliders
使用Mesh colliders可能会很占用资源。用原始或简化的Mesh colliders来替换更复杂的Mesh colliders,来显示原始形状将会有效的节约资源。
colliders使用基本体或简化网格。
使用物理方法移动刚体
使用分类法,如移动位置或者添加力移动你的刚体物体。刚体的变形组件会直接导致物理世界的重新计算,这在复杂场景的创建中非常耗费资源。所以我们可以将物理物体移入固定数据而无需更新。
修正Fixed Timestep
默认值Fixed Timestep在项目设置中是0.02 (50 Hz)。更改此项属性可以更好的匹配你的目标帧速率(例如,30 fps为0.03)。
但是,如果帧速率在运行时下降,这意味着Unity会每帧多次调用固定数据,这可能造成CPU性能负担。
Maximum Allowed Timestep能够限制物理计算和固定数据事件在帧速率下降时可以使用的时间。降低该值意味着在性能故障期间,物理引擎和动画可能会变慢,同时也会降低它们对帧速率的影响。
修改固定时间步长以匹配您的目标帧速率,并降低最大允许时间步长以减少性能故障。
使用物理调试器可视化
使用物理调试窗口(窗口>分析>物理调试器)来帮助解决碰撞或差异的任何问题。
物理调试工具可以帮助用户可视化物理对象之间的交互方式。
用户界面
Unity用户界面(UGUI)经常会成为性能问题的来源。画布组件能够为用户界面元素生成并更新网格,并向图形处理器发出绘制调用。它的功能可能很耗费资源,因此在使用UGUI时,请记住以下要素。
区分开画布
如果有一个包含数千个元素的大画布,更新单个用户界面元素会迫使整个画布一起更新,这可能会让CPU达到峰值。
利用UGUI支持多个画布的能力。根据需要刷新的频率划分用户界面元素。将静态的用户界面元素保留在单独的画布上,将动态元素同时更新到较小的子画布上。
这样能够确保每个画布中的所有用户界面元素具有相同的Z值、材质和纹理。
隐藏不可见的用户界面元素
在游戏中偶尔会出现一些用户界面元素(例如,当角色受到伤害时会出现的生命条)。如果启用不可见用户界面元素,它可能仍在使用绘制调用。此时需要精确禁用所有不可见的用户界面组件,并根据需要重新启用它们。
但如果你只需要关闭画布的可见性,那么请禁用画布组件而不是游戏对象。这可以节省重建网格和顶点的时间。
限制图形投射并禁用光线投射目标
屏幕触摸或点击等输入事件需要图形投射功能。这在用户界面矩形变换的过程中简化了屏幕上的每个输入点的循环。
从顶层画布删除图形投射默认值。相反,添加图形投射将专门针对需要交互的单个元素(按钮、滚动条等)。
禁用反转图形,默认情况下处于激活状态。
另外,我们还可以在所有不需要的UI文本和图像上禁用射线投射目标。如果用户界面很复杂,有很多元素,所有这些细小的改变都可以减少不必要的计算,节省资源。
如果可能,禁用射线投射目标。
避免布局组
布局组更新效率低,所以要注意谨慎使用。如果你的内容不是动态的,就完全没有必要使用布局组功能,你可以使用比例布局的锚点。或者在设置用户界面后创建自定义代码来禁用布局组组件。
如果你确实需要对动态元素使用布局组(水平、垂直、网格),请避免嵌套它们以提高性能。
布局组会降低性能,尤其是嵌套时。
避免大的列表和网格视图
大列表和网格视图非常占用资源。如果需要创建一个大的列表或网格视图(例如,有数百个项目),不要为每个项目创建一个用户界面元素,请考虑重用一个较小的用户界面元素池。
避免大量重叠的元素
将大量用户界面元素(例如,堆叠在纸牌游戏中的纸牌)分层会造成资源透支。自定义你的代码,以便在运行时将分层元素合并成更少的元素和批次。
使用多种分辨率和纵横比
现在的移动设备大多有着不同的分辨率和屏幕尺寸,创建用户界面的替代版本可以在每台设备上提供最佳体验。
使用设备模拟器预览各种屏幕格式。
使用全屏用户界面时,隐藏所有其他内容
如果暂停或开始屏幕覆盖了场景中的所有其他内容,你需要禁用正在渲染3D场景的相机。同样,禁用隐藏在顶部画布背后的任何背景画布元素也能有效提升游戏性能。
在全屏用户界面期间你可以适当降低Application.targetFrameRate,因为我们不需要以60 fps的帧率进行更新。
将相机分配给世界空间和相机空间画布
离开事件或者渲染相机字段的空白会迫使Unity填写主摄像机,这是不必要的资源浪费。
这时你可以使用屏幕空间–覆盖功能,因为这不需要摄像头的参与。
使用世界空间渲染模式时,请确保填写事件摄影机。
音频
虽然音频通常不是性能瓶颈,但你仍然可以对其进行优化以节省内存。
优化音频剪辑的导入设置。
尽可能使用原始未压缩的WAV文件作为你的源资产
如果你使用任何压缩格式(如MP3或Vorbis)的音频,你需要使用Unity将它解压缩,然后在构建时重新压缩它。这会导致两次音频有损,降低最终质量。
压缩剪辑并降低压缩比特率
通过压缩减少剪辑的大小和内存使用:
对于大多数音频(或MP3文件对于不循环的音频)我们可以使用Vorbis对其进行压缩。
使用自适应差值脉冲编码调制(ADPCM),经常使用的声音(例如,脚步声、枪声)。与未压缩的PCM相比,这将缩小文件,但在回放的过程中可以快速解码。
移动设备上的音效上限是22050Hz。使用较低的设置通常对最终质量影响最小;这需要用自己的耳朵去判断。
选择合适的负载类型
设置因片段大小而异。
小剪辑(<200 kb)应该加载时解压缩。将声音解压缩为原始的16位PCM音频数据会增加CPU使用率和内存,因此此方法只适合短声音。
中等剪辑(<= 200 kb)应该保留在内存中压缩。
大文件(背景音乐)应该设置为流动,否则整个资产将立即加载到内存中。
从内存中卸载静音音频源
在创建静音按钮时,不要简单地将音量设置为0。你可以将音频源组件从内存中卸载,但前提是玩家不会经常打开和关闭它。
电话:010-50951355 传真:010-50951352 邮箱:sales@souvr.com ;点击查看区域负责人电话
手机:13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145