Unity 几种优化建议

ABSTRACT

2016 年 CSDN 长文汇编,汇集 Unity 4/5 时代移动端优化的官方文档摘译与民间经验:顶点/DrawCall 预算、动静态批处理原理与限制、贴图压缩与 Mipmap、LOD/遮挡剔除、光照烘焙、Shader 精度与禁用复杂运算、帧率与物理步长控制,以及角色/地形/粒子/音频/相机的数值规范清单。

核心要点

  • 预算基线:PC 场景顶点 200K~3M、移动端 <10 万;DrawCall PC 几千内、移动端几百内(iOS 有文章建议 ≤100 甚至 ≤20);具体取决于目标机型。
  • Draw Call Batching 原理:可见性测试后按材质分组组合成单物体一次提交;内建批处理优于建模期合并(后者妨碍逐物体裁剪);Dynamic Batching 限 900 顶点属性(约 300 顶点),Static Batching 任意大小但吃内存。
  • 批处理破坏项清单:不同材质实例、非统一缩放混用、lightmap 偏移不同、multi-pass shader;脚本改材质要用 sharedMaterial,改 Renderer.material 会复制实例打断合批。
  • 贴图:Android 用 ETC、iOS 用 PVRTC;透明贴图只能 RGBA16/32;Mipmap 以 33% 内存换带宽;远距离物体用天空盒「褪去」;alpha 全 1 的贴图改 RGB24。
  • 光照:移动端尽量零真光、全烘焙 Lightmap;动态物体用 Light Probes;Important 光建议 1 个、Pixel Light 1~2 个;性能消耗聚光灯 > 点光源 > 平行光。
  • Shader:优先 Mobile/Unlit 内置 shader;避免 pow/sin/cos/log 与 alpha test;精度 float/half/fixed 按用途降档;复杂 per-pixel shader 只给小物体用;overdraw 主要来自半透明叠层。
  • 帧率与物理:关 VSync 后用 Application.targetFrameRate 限帧省电控温;随之调大 Fixed Timestep 减物理次数;少用 Update/LateUpdate/FixedUpdate,改用事件驱动;待机时 FPS 降到 1。
  • 粒子陷阱:视野外粒子仍 Update——用 OnBecameVisible/OnBecameInvisible 配合一个缩小 MeshRenderer 容器控制整组激活;屏幕粒子 <200、单发射器 <50、不开粒子碰撞。
  • 资源规范数值:角色材质 2-3 个、骨骼 <30、面数 3001500(PC 15004000);地形分辨率 <257、混合纹理 ≤4;纹理 ≤1024;静态物体打 Static 且去掉 Animation 组件;少用 MeshCollider。
  • 排查方法论:先 Profiler 定位瓶颈再动手,优化后复测验证;Scene View 卡顿与否可区分图形瓶颈与脚本/物理瓶颈;Play 模式下逐个禁用物体定位元凶。

关键实体与概念

DrawCall、Dynamic/Static Batching、sharedMaterial、ETC/PVRTC、Mipmap、Lightmap、Light Probes、Occlusion Culling、LOD、VSync、targetFrameRate、Fixed Timestep、OnBecameVisible、float/half/fixed

关联概念

来源回溯

  • 原始文件:raw/gamedev/unity几种优化建议.md(evernote/FW-游戏3研发技术 导入)

时效性评估

  • 仍有效:合批原理与破坏项、烘焙代实光、Mipmap 内存换带宽、限帧控温、事件驱动代 Update 等方向性经验至今成立。
  • 已过时:具体数值预算对应 2012~2016 年机型;Static Batching 收费、Web Player、iOS Advanced 授权等背景已消失;现代合批由 SRP Batcher/GPU Instancing 接管,纹理压缩首选 ASTC(详见 Unity 性能优化体系 的现代映射)。