本文恶搞自A guide to optimizing Unity UI.
优化UGUI很费劲,因为没有强而有效规则。每种解决翻案,都必须站在整个系统行为的基础上去综合考量。优化UGUI最重要的矛盾是,控制Draw Call和批处理开销的平衡。一些通用意义上的技术,可以用来减少某一项或几项的开销,但是在处理复杂UI的时候必须进行折中。
有一个放之四海而皆准的最佳实践,优化UGUI需要从分析开始。优化UI系统前的首要任务是,定位到产生问题的准确原因。下面有UGUI用户遇到过的四类常见问题:
- Fragment Shader使用带来的GPU过度消耗(如填充率过高)
- 重建一个Canvas导致CPU耗时过高
- Canvas重建的数量过高
- 生成顶点消耗大量CPU时间(通常是Text产生的)
原理上讲,可以创建一个UGUI界面,它的性能完全受限于传送的GPU的Draw Call数量。然而,现实是,任何过载使用GPU的Draw Call,都更可能因填充率过高而限制性能(填充率的影响超过Draw Call)。
这篇指南会讨论一些基于UGUI的基本概念、算法和代码,也会讲述常见问题和解决方案。具体内容分为5个章节:
- Fundamentals of Unity UI 给出UGUI一些术语的定义,也会讨论需要UI渲染过程的细节,包括几何批处理的建立。强烈建议读者从这篇文章开始看起。
- Unity UI profiling tools 讨论如何借助多种可用的工具,去收集性能数据。
- Fill-rate, Canvases and input 讨论优化Canvas和Input组件的方法。
- UI controls 讨论Text、Scroll Views和其他组件的优化,其中一些技术不具备普适性。
- Other UI Optimization Techniques and Tips 介绍几个没有普适性的事项,包括一些基本技巧,和绕“坑”方案。
UGUI仅开源了Graphic和Layout组件的代码,可以在这里找到 Unity’s Bitbucket repository - UI