Unity 优化小技巧 50 连发
集合 CPU、GPU、内存、包体、加载五大维度的高性价比优化点,帮助项目快速提帧、降包、减内存。
适用版本:Unity 2021 LTS–2023,覆盖 URP / Built‑in。
旨在“低成本、快收益”的落地技巧,每条独立可用,按需取舍。
一、CPU 优化(12 条)
# | 技巧 | 关键点 |
---|---|---|
1 | 把逻辑放到 LateUpdate 而非 Update ,避免与物理同帧竞争 |
主线程排队更短 |
2 | 用 Physics.Simulate 离线跑战斗回放 |
主线程空窗期计算 |
3 | 大量定时器改用 Time.realtimeSinceStartup 轮询 |
减少 InvokeRepeating GC |
4 | AI 感知帧拆分:index % n |
把 1 帧 1000 次 → 10 帧分批 |
5 | 短生命周期对象进 ArrayPool<T> |
复用数组,避免装箱 |
6 | 关闭 GameObject 时改用 SetActive(false) 而非销毁 |
GC 零分配 |
7 | 启用 Burst + JobSystem 批处理数学 | NEON/AVX2 向量化 |
8 | UI 高频刷新改用 CanvasGroup.alpha |
避免重建 & 事件丢失 |
9 | 龙骨动画只播放在镜头内的实例 | OnBecameVisible 控制 |
10 | 物理层级分组,减半碰撞矩阵 | Physics.IgnoreLayerCollision |
11 | 使用 Static Batching 锁定静态场景物体 | 减少 DrawCall |
12 | 定点数学代替浮点(2D 问答游戏) | ARM VFP 开销大幅减 |
二、GPU 优化(10 条)
# | 技巧 | 效果 |
---|---|---|
1 | TextureAtlas + SpriteAtlas 合并小图 | 减材质切换 |
2 | URP 关闭 HDR & MSAA 在中低端机 | 帧率 +20% |
3 | 移动端使用 Half‑Float 法线贴图 | 内存‑50% |
4 | 把天空盒烘焙成 128×128 Panorama | VRAM‑80% |
5 | Shader 中少用 if ,改 step/smoothstep |
流水线不中断 |
6 | FrameDebugger 检查 Overdraw,UI 改纯色 Cutout |
透明叠加减 |
7 | 使用 SRP Batcher (URP/HDRP) | SetPass‑65% |
8 | VFX Graph 改成 GPU Instancing | CPU→GPU |
9 | 将 QualitySettings.shadowDistance 按分辨率自适应 |
近景清晰,远景关闭 |
10 | 堆叠相机改单相机后处理 | 减少 RenderTarget Switch |
三、内存优化(10 条)
技巧 | 说明 |
---|---|
Addressables 分组 → packSeparately |
热更资源分离 |
Mip Map Stripping 在低端机关闭高阶 Mip | 缓存节省 30% |
异步释放场景:Resources.UnloadUnusedAssets + 延迟 GC |
避免卡顿 |
使用 SpriteAtlas Variant 做多分辨率 | 保品质减体积 |
在 TextureImporter 勾选 Crunch Compression |
PNG8 场景图 |
日志文件每天清理,避免日志爆炸 | iOS 旧设备闪退 |
贴图 Read/Write 关闭 | 节省一倍内存 |
StringBuilderCache 复用 UI 拼字符串 | 减 GC |
关闭 Reflection Probes 自动更新 |
静态场景 |
动态 Mesh 用 DynamicMeshBatcher |
减分配 |
四、包体优化(8 条)
Player Settings → Stripping Level: High
- 仅勾选使用到的 Localization Tables
- 纹理压缩 Android: ASTC 6×6 / ETC2 8‑bit
IL2CPP
+ Master Stripping 去除未引用代码- 音频转 ADPCM / Vorbis 并流式播放
StreamingAssets
拆分首包与 CDN 资源- 删除无用 Shader Variant (
ShaderVariantCollection
) - 启用 Gradle Minify (ProGuard) 剔除库代码
五、加载与 IO 优化(10 条)
# | 技巧 | 效果 |
---|---|---|
1 | Addressables Group Catalog 拆分 | 只拉需要的 Hash |
2 | CDN 分区:静态、热更、日志 | 请求更快 |
3 | 开机异步预热 Shader:WarmupAllShaders |
避免首帧卡 |
4 | 使用 LZ4HC 压缩 AssetBundle | 解压快、包体小 |
5 | 拆分场景 Additive + Stream | 避免主线程卡 |
6 | AsyncGPUReadback 替换 ReadPixels |
无阻塞 |
7 | WebGL 勾选 Data Caching | 二次进入秒开 |
8 | iOS 设置 On-Demand Resources | 减首包 |
9 | 预加载音频到 AudioPreloadData |
减延迟 |
10 | Resources.LoadAsync + 进度条 |
友好 UX |
结语
这些技巧覆盖项目从原型到上线的常见性能痛点。无需一次性全部采纳——定位瓶颈 → 精选技巧 → 验证数据 才是正道。祝开发顺利、帧率飞起!
附件
OptimizationChecklist.xlsx
— 自查清单模板SRPBatcherGuide.pdf
— 官方指南译本
需要表格或脚本示例?留言即可发送。
Last modified on 2025-06-09