Unity Android性能优化设置指南

前言

好的,我们来详细梳理一下在 Unity 中针对 Android 平台进行性能优化时,需要关注和调整的核心设置。这些设置覆盖了从渲染、脚本、内存到构建管线的方方面面。

对惹,这里有一 个游戏开发交流小组 ,希望大家可以点击进来一起交流一下开发经验呀!

一、核心质量设置 (Quality Settings)

这是性能调优的第一站,直接控制渲染保真度和开销。

路径:Edit > Project Settings... > Quality

  1. 等级 (Levels)
  • 为不同档位的 Android 设备(低、中、高)设置多个质量等级。

  • Build Settings 中可以为 Android 平台默认指定一个等级,也可以通过代码在运行时根据设备性能动态切换。

  • 渲染 (Rendering)

  • 抗锯齿 (Anti Aliasing)这是性能杀手 。在移动平台上优先选择 2x Multi Sampling4x Multi Sampling。如果性能吃紧,完全关闭并使用后处理中的快速近似抗锯齿 (FXAA) 代替(如果使用了 URP/HDRP)。

  • 像素光源数量 (Pixel Light Count)极力降低。像素光计算开销极大。建议设置为 0 或 1。主要依靠烘焙光照贴图和环境光遮蔽 (Ambient Occlusion) 来提供光照细节。

  • 纹理质量 (Texture Quality) :对于低端设备,可以设为 Half Resolution,能显著减少纹理带宽和内存占用。

  • 软粒子 (Soft Particles)实时反射探针 (Realtime Reflection Probes)除非绝对必要,否则关闭。它们会带来很大的计算开销。

  • 阴影 (Shadows)

    • 阴影距离 (Shadow Distance)降低,降低,再降低。这是最有效的阴影优化。只让靠近相机的物体投射阴影。
    • 阴影分辨率 (Shadow Resolution) :从 Low (1024) 或 Medium (2048) 开始。
    • 阴影级联 (Shadow Cascades) :设为 No CascadesTwo Cascades。级联越多,绘制次数越多。
  • 后处理 (Post Processing)

  • 屏幕空间环境光遮蔽 (SSAO)、屏幕空间反射 (SSR)、景深 (Depth of Field)、运动模糊 (Motion Blur) 等效果开销巨大。在移动平台上谨慎使用,或者使用移动端优化过的、更轻量的版本(如 URP 中的渲染器特性)。

二、玩家设置 (Player Settings)

这是针对 Android 平台的具体配置。

路径:Edit > Project Settings... > Player > Settings for Android

  1. 图标 (Icon) & 分辨率与呈现 (Resolution and Presentation)
  • 默认屏幕方向 (Default Orientation) :根据游戏类型设定,避免运行时进行耗时的屏幕旋转。

  • 允许横竖屏 (Allowed Orientations for Auto Rotation) :如果不需要,请取消勾选,同上。

  • 渲染模式 (Render Mode) :如果使用 Vulkan,选择 Vulkan;否则使用 OpenGLES3(或 GLES2 以获取最大兼容性,但会失去一些现代图形功能)。

  • 在启动时隐藏状态栏 (Hide Status Bar) & 沉浸模式 (Use immersive Mode) :建议启用,提供更好的全屏体验。

  • 其他设置 (Other Settings)

  • 渲染 (Rendering)

    • 颜色空间 (Color Space)使用 Linear(线性空间) 。它比 Gamma 提供更真实的光照效果,且在现代 GPU(支持 GLES3+)上性能开销很小。注意:需要所有纹理资源都支持 sRGB。

    • 自动图形 API (Auto Graphics API)建议取消勾选,手动配置 API 顺序。例如,如果你想优先使用 Vulkan,就把它放在列表顶部;如果想优先使用 OpenGL ES 3,就把它放上面。顺序决定了 Unity 尝试使用 API 的顺序。

      • Vulkan :能为多核 CPU 提供更好的并行渲染,减少 CPU 瓶颈,但在某些老旧的 Mali GPU 上可能存在驱动问题或性能下降。需要测试。
      • OpenGL ES 3:兼容性最好,稳定性高。
      • OpenGL ES 2:功能有限,不支持许多现代着色器特性,但可以在非常古老的设备上运行。
    • 多线程渲染 (Multithreaded Rendering)强烈建议启用 。它可以将渲染线程与主线程分离,充分利用多核CPU,显著提升性能。注意:如果项目代码不是线程安全的,可能会引发问题,但绝大多数现代项目都应启用它。

    • 图形作业 (Graphics Jobs) :在 Experimental 下,对于 Vulkan,可以尝试启用,可能进一步提升渲染线程效率。需要测试稳定性。

  • 识别 (Identification)

    • 最低API级别 (Min API Level) :设置得越高,可以使用的现代 Android 系统特性越多,但会排除旧设备。根据你的目标用户群决定。
    • 目标API级别 (Target API Level) :应该设置为你测试时使用的 Android 版本,以避免不必要的兼容性行为。
  • 配置 (Configuration)

    • 脚本后端 (Scripting Backend)使用 IL2CPP。它比 Mono 生成的代码执行效率更高,并且提供更好的安全性(防反编译)和64位支持。
    • API 兼容性级别 (Api Compatibility Level) :如果不需要使用 .NET 的庞大类库,使用 .NET Standard 2.0 或更小的 .NET Framework 子集,这有助于减少构建大小和运行时内存占用。
    • 堆分配优化 (Heap Allocation Optimization)Stable 模式可以减少 GC 分配,但可能略微增加堆大小。Performance 模式更积极,但需要充分测试稳定性。
  • 发布设置 (Publishing Settings)

  • 调试/开发构建 (Debug/Development Build)发布时务必取消勾选!开发构建包含大量的调试符号和代码,会严重拖慢运行速度。

  • 压缩方式 (Compression Method) :选择 LZ4HC 以获得更快的加载速度和不错的压缩率。LZ4 加载最快,但压缩率稍低。

三、项目特定设置与最佳实践

  1. 纹理优化 (Texture Import Settings)
  • 最大尺寸 (Max Size) :绝不使用超过所需分辨率的纹理。UI 元素用 1024x1024 或更小,游戏内模型贴图根据物体大小和与相机的距离使用 512x512 或 256x256。

  • 压缩格式 (Compression) :使用 ASTC 格式(如果目标设备支持)。它是目前移动平台最好的纹理压缩格式。根据质量需求选择块大小(e.g., ASTC 4x4 block 用于低质量,ASTC 12x12 block 用于高质量)。对于不支持 ASTC 的旧设备,可以回退到 ETC2(需要 GLES3)或 ETC(GLES2)。

  • 生成 Mip Maps (Generate Mip Maps) :为3D场景中的纹理启用,避免远处像素闪烁并提高缓存效率。UI 精灵纹理则应关闭。

  • 非2的幂次方 (Non Power of Two) :设为 To Nearest 以确保纹理被缩放到最近的2的幂次方,这是GPU高效处理所必需的。

  • 模型优化 (Model Import Settings)

  • 优化网格 (Optimize Mesh) :启用,让 Unity 重新排序网格的三角形顶点以提高 GPU 缓存命中率。

  • 读/写启用 (Read/Write Enabled)发布构建时关闭。除非你需要通过脚本动态修改网格,否则开启它会会在内存中保留一份不必要的网格数据副本。

  • 减少多边形数量:使用 LOD (Level of Detail) 系统,为远处的模型使用低模。

  • 音频优化 (Audio Import Settings)

  • 将长背景音乐设置为 Streaming,避免一次性加载到内存。

  • 将短音效(如枪声、点击声)的Load Type设为 Decompress On LoadCompressed In Memory,并根据情况设置合适的压缩格式(Vorbis)和质量。

  • 代码优化 (Scripting)

  • 避免在 Update() 中分配内存 :这是造成GC(垃圾回收)卡顿的罪魁祸首。避免使用 string.Format, foreach(在某些旧IL2CPP版本中),频繁实例化 new 对象。使用对象池来重用对象。

  • 使用性能敏感的物理调用 :例如,使用 RaycastNonAlloc 代替 RaycastAll,避免在每一帧进行大量的物理检测。

  • 使用 Profiler这是最重要的工具。在 Unity Profiler (Deep Profiling) 和 Android Profiler (如 Snapdragon Profiler) 中分析CPU、GPU、内存的使用情况,精确找到性能瓶颈。

总结清单(发布前检查)

  1. 质量设置:降低抗锯齿、阴影距离、像素光数量。
  2. 颜色空间:使用 Linear。
  3. 图形API :手动排序,优先 Vulkan 或 GLES3,并启用多线程渲染
  4. 脚本后端:使用 IL2CPP。
  5. 开发构建:发布时务必关闭。
  6. 纹理:使用 ASTC/ETC2 压缩,尺寸合理,关闭不必要的 Read/Write。
  7. 模型:启用 Optimize Mesh,关闭 Read/Write。
  8. 代码:分析并消除 GC 分配。
  9. 最终测试 :在目标真机设备(尤其是最低配置的设备)上进行全面性能分析 (Profiling)。

遵循这些设置和最佳实践,将能为你的 Unity Android 应用打下坚实的性能基础。记住,优化是一个迭代过程,需要不断地测量、分析、修改和再测试。

更多教学视

Unity3D​www.bycwedu.com/promotion_channels/2146264125

相关推荐
每一天,每一步1 小时前
React页面使用ant design Spin加载遮罩指示符自定义成进度条的形式
前端·react.js·前端框架
传奇开心果编程4 小时前
【传奇开心果系列】Flet框架实现的图形化界面的PDF转word转换器办公小工具自定义模板
前端·python·学习·ui·前端框架·pdf·word
evamango6 小时前
《Unity Shader入门精要》十一、让画面动起来
unity3d
程序员张36 小时前
Vue3+ElementPlus—高效存储和回显多选项的状态值
javascript·vue.js·前端框架
腾讯云云开发1 天前
AI编程能做什么?9个优秀案例,手把手图文教程,部分实战作品已开源
ai编程·游戏开发·小程序·云开发
黑客影儿1 天前
在Godot中为您的游戏添加并控制游戏角色的完整技术指南
开发语言·游戏·游戏引擎·godot·gdscript·游戏开发·3d游戏
li理1 天前
鸿蒙应用开发深度解析:从基础列表到瀑布流,全面掌握界面布局艺术
前端·前端框架·harmonyos
EndingCoder2 天前
React 19 与 Next.js:利用最新 React 功能
前端·javascript·后端·react.js·前端框架·全栈·next.js
页面仔Dony3 天前
Vue2 与 Vue3 深度对比
vue.js·前端框架