
为更强的性能配置您的 Unity 项目
这是系列文章中的第一篇,解读了针对您的 Unity 项目的优化技巧。将它们作为在更少资源下以更高帧率运行的指南。一旦您尝试了这些最佳实践,请务必查看系列中的其他页面:
查看我们为 Unity 6 开发者和艺术家提供的最新优化指南:
为更强的性能配置您的项目
优化良好的素材资源管道可以加快加载时间,减少内存使用,并提高运行时性能。通过与经验丰富的技术艺术家合作,您的团队可以定义和执行素材资源格式、规格和导入设置,以确保高效和流畅的工作流程。
不要仅依赖默认设置。利用特定平台的覆盖选项卡来优化纹理、网格几何和音频文件等素材资源。不正确的设置可能导致更大的构建大小、更长的构建时间和较差的内存使用。
考虑使用 预设 来建立针对您特定项目需求的基线设置。这种主动的方法有助于确保素材资源从一开始就经过优化,从而在所有平台上实现更好的性能和更一致的体验。
有关更多指导,请参考 艺术素材资源的最佳实践 或在 Unity Learn 上探索 移动应用程序的 3D 艺术优化 课程。这些资源提供了有价值的见解,可以帮助您就 Unity 网页构建、移动和 XR 应用程序的素材资源优化做出明智的决策。

在 UNITY 中打包 2D 精灵时的三种类型的图集
禁用不必要的 Player 或质量设置
在 Player 设置中,禁用 自动图形 API 以防止为不支持的平台生成过多的着色器变体。如果您的应用程序不支持较旧的 CPU,请禁用 目标架构。
在 质量 设置中,禁用不必要的质量级别。
了解更多关于 图形 API 的信息。

在质量设置中,禁用不必要的质量级别。
切换到 IL2CPP
将脚本后端从 Mono 切换到 IL2CPP(中间语言到 C++)可以提供更好的运行时性能。然而,这也可能会增加构建时间。一些开发者更喜欢在本地使用 Mono 以加快迭代速度,然后在构建机器和/或发布候选版本时切换到 IL2CPP。请参考 优化 IL2CPP 构建时间文档 以获取有关减少构建时间的更多信息。
注意:通过使用此选项,Unity 在为您的目标平台创建本机二进制文件(.exe、.apk、.xap)之前,将脚本和程序集中的 IL 代码转换为 C++。
请参阅 IL2CPP 内部介绍 或查阅 编译器选项手册页面 以了解各种编译器选项如何影响运行时性能。
选择正确的帧率
移动项目必须在帧率与电池寿命和热限制之间取得平衡。与其在 60 fps 下逼迫设备的极限,不如考虑以 30 fps 作为折中。Unity 默认在移动设备上使用 30 fps。
在针对 XR 平台时,帧率的考虑更加关键。72 fps、90 fps,甚至 120 fps 的帧率通常是保持沉浸感和防止运动病所必需的。这些更高的帧率有助于确保流畅和响应迅速的体验,这对 VR 环境中的舒适性至关重要。然而,这些在功耗和热管理方面也带来了自己的挑战,特别是在独立的 VR 头戴设备中。
选择合适的帧率是了解目标平台的具体需求和限制,无论是移动设备、独立的 VR 头戴设备还是 AR 设备。通过仔细选择合适的帧率,您可以在不同平台上优化性能和用户体验。
您还可以在运行时动态调整帧率,使用Application.targetFrameRate。例如,您可以在缓慢或相对静态的场景中将帧率降到30 fps以下,并为游戏保留更高的帧率设置。
更多信息请参见文档。
减少或禁用加速度计频率
Unity每秒多次获取您手机的加速度计。如果您的应用程序中未使用此功能,请禁用它,或降低其频率以获得更好的整体性能。
了解更多关于加速度计的信息。

如果您在手机游戏中未使用加速度计频率,请禁用它。
避免大型层级结构
拆分您的层级。如果您的游戏对象不需要嵌套在层级中,请简化父子关系。
较小的层级可以利用多线程来刷新场景中的变换。复杂的层级会导致不必要的变换计算和更多的垃圾回收成本。
压缩您的纹理
考虑以上两个使用相同模型和纹理的示例。左侧的设置消耗的内存几乎是右侧的26倍,而视觉质量没有太大改善。
对移动设备、XR和网络使用自适应可缩放纹理压缩(ATSC)。绝大多数正在开发的游戏倾向于针对支持ATSC压缩的最低规格设备。
唯一的例外是:
- 针对A7设备或更低的iOS游戏(例如,iPhone 5、5S等) – 使用PVRTC
- 针对2016年之前设备的Android游戏 – 使用ETC2(爱立信纹理压缩)
如果像PVRTC和ETC这样的压缩格式质量不够高,并且如果ASTC在您的目标平台上不完全支持,请尝试使用16位纹理而不是32位纹理。
有关按平台推荐的纹理压缩格式的更多信息,请参阅手册。

未压缩纹理比压缩纹理需要更多内存。
利用纹理导入设置
纹理可能会使用过多资源,因此优化您的导入设置至关重要。一般来说,请尝试遵循以下指南:
- 降低最大尺寸:使用产生视觉上可接受结果的最小设置。这不会破坏原始数据,并且可以快速减少您的纹理内存。
- 使用2的幂(POT):Unity要求纹理压缩格式的纹理尺寸为2的幂。
- 关闭读取/写入启用选项:启用时,此选项会在CPU和GPU可寻址内存中创建一个副本,导致纹理的内存占用翻倍。在大多数情况下禁用它,只有在您在运行时生成需要覆盖的纹理时才启用它。您还可以通过Texture2D.Apply强制此选项,传入makeNoLongerReadable设置为True。
- 禁用不必要的Mip Maps:对于在屏幕上保持一致大小的纹理,例如2D精灵和UI图形,不需要Mip Maps。但是,对于与相机距离变化的3D模型,请保留Mip Maps启用。
了解更多关于纹理导入设置的信息。
图集您的纹理
图集是将多个较小的纹理组合成一个较大纹理的过程。纹理图集 减少内存使用并需要更少的绘制调用,从而减少 GPU 所需的工作量。
- 对于 2D 项目:使用 精灵图集 (资源 > 创建 > 2D > 精灵图集) 而不是渲染单个精灵或纹理。
- 对于 3D 项目:您可以使用您选择的 数字内容创作 (DCC) 软件包。一些第三方工具,如 MA_TextureAtlasser 或 TexturePacker 也可以用于构建纹理图集。
组合纹理并重新映射 UVs 以适应任何不需要高分辨率贴图的 3D 几何体。可视化编辑器使您能够设置和优先考虑纹理图集或 精灵表 中的大小和位置。
纹理打包器 将单个贴图合并为一个大纹理。然后 Unity 可以发出一次绘制调用,以较小的性能开销访问打包的纹理。
在 这里 阅读有关精灵图集的更多信息。

使用纹理图集来减少绘制调用的数量。
检查多边形计数
更高分辨率的模型意味着更多的内存使用和潜在的更长 GPU 时间。您的背景几何体需要五十万个多边形吗?考虑在您选择的 DCC 软件包中减少模型。从相机的视角删除不可见的多边形,并使用纹理和法线贴图来代替高密度网格的细节。

移除任何不可见的面以优化您的模型。
管理网格导入设置
就像纹理一样,网格也会消耗大量内存,因此请为它们选择最佳导入设置。通过以下方法减少网格的内存占用:
- 压缩网格:激进的压缩可以减少磁盘空间(但在运行时内存不受影响)。请注意,网格量化可能会导致不准确,因此请尝试不同的压缩级别,以查看哪些适合您的模型。
- 禁用读/写:启用此选项会在内存中复制网格,这会在系统内存中保留一个网格副本,而在GPU内存中保留另一个。在大多数情况下,您应该禁用它(在Unity 2019.2及更早版本中,此选项默认选中)。
- 禁用骨架和混合形状:如果您的网格不需要骨骼或混合形状动画,请尽可能禁用这些选项。
禁用法线和切线:如果您绝对确定网格材质不需要法线或切线,请取消选中这些选项以节省更多内存。

检查您的网格导入设置
查看更多网格优化
在播放器设置中提供额外的网格优化选项:
- 顶点压缩设置每个通道的顶点压缩。例如,您可以为除位置和光照贴图UV之外的所有内容启用压缩。这可以减少网格的运行时内存使用。
- 注意:每个网格的导入设置中的网格压缩设置会覆盖顶点压缩设置。在这种情况下,网格的运行时副本是未压缩的,可能会使用更多内存。
- 优化网格数据会移除网格中不需要的任何数据,这些数据是材质所需的(例如切线、法线、颜色和UV)。
审核您的素材资源
通过自动化审核过程,您可以避免意外更改资产设置。资产后处理器可以帮助您标准化导入设置或分析现有资产。它允许您在导入资产时运行脚本,并基本上提示您在导入模型、纹理、音频等之前和/或之后自定义设置。
调整异步纹理缓冲区
Unity使用环形缓冲区将纹理推送到GPU。您可以通过QualitySettings.asyncUploadBufferSize手动调整此异步纹理缓冲区。
如果上传速率过慢或主线程在同时加载多个纹理时停滞,请调整这些纹理缓冲区。您通常可以将值(以MB为单位)设置为场景中需要加载的最大纹理的大小。
请记住,更改默认值可能会导致高内存压力。此外,Unity分配后,您无法将环形缓冲区内存返回系统。如果GPU内存过载,GPU会卸载最近和最少使用的纹理,并强制CPU在下次进入相机视锥体时重新上传它。
流式传输 Mip Maps 和纹理
Mip Map流式传输系统让您控制哪些Mip Map级别应加载到内存中。通过转到Unity的质量设置(编辑 > 项目设置 > 质量)并检查纹理流式传输选项来启用它。您可以在纹理导入设置的高级下启用流式Mip Maps。
该系统减少了纹理所需的总内存量,因为它仅加载当前相机位置渲染所需的Mip Maps。否则,Unity默认加载所有纹理。
纹理流式传输以少量CPU资源换取潜在的大量GPU内存。它还会自动减少Mip Map级别,以保持在用户定义的内存预算内。
您可以使用Mip Map Streaming API进行进一步控制。

纹理流式传输设置
使用地址able
Addressable Asset System提供了一种简化的方式来管理您的内容。该统一系统通过“地址”或别名异步加载AssetBundles,来源于本地路径或远程内容交付网络(CDN)。
如果您将非代码资产(模型、纹理、预制件、音频,甚至整个场景)拆分为AssetBundle,您可以将它们作为可下载内容(DLC)分开。
然后,使用Addressables为您的移动应用程序创建一个更小的初始构建。Cloud Content Delivery允许您在玩家进行游戏时托管和交付游戏内容。
请参阅Unity Learn上的教程Get started with Addressables,快速了解Addressable Asset System如何在您的项目中工作。
点击这里查看Addressable Asset System如何简化资产管理。

使用地址可加载资产的地址可加载资产系统
Unity 6的更多提示
从Unity最佳实践中心找到更多适合高级Unity开发者和创作者的最佳实践和技巧。从超过30个指南中选择,这些指南由行业专家、Unity工程师和技术艺术家创建,将帮助您高效地使用Unity的工具集和系统。
