版本检查: 2017.3-难度: 高级
优化由UnityUI驱动的用户界面是一项技术。硬性和快速的规则很少见;相反,必须仔细评估每种情况,同时考虑系统的行为。优化任何UnityUI时的核心张力是平衡draw calls和批batching成本。虽然某些常识技术可以用于减少一种或另一种,但是复杂的UI必须进行权衡。
然而,正如其他地方的最佳实践一样,优化UnityUI的尝试应该从分析开始。在尝试优化UnityUI系统之前,首要任务是找到所观察到的性能问题的确切原因。UnityUI的用户遇到四类常见的问题:
- Excessive GPU fragment shader utilization (i.e. fill-rate overutilization) 过多的cpu资源被 shader 占用
- Excessive CPU time spent rebuilding a Canvas batch 过多的cpu时间用于重新生成画布批次
- Excessive numbers of rebuilds of Canvas batches (over-dirtying) Canvas批次的修复数量过多。
- Excessive CPU time spent generating vertices (usually from text) 过多的cpu时间用于生成顶点
原则上,可以创建一个UnityUI,其性能受到发送到GPU的draw calls数量的限制。然而,在实践中,任何项目重载GPU的draw calls更有可能受到填充率的过度使用。
本指南将讨论UnityUI的基本概念、算法和代码,并讨论常见的问题和解决方案。它分为五章:
- The Fundamentals of Unity UI 定义了UnityUI特有的术语,并讨论了为呈现UI而执行的许多基本过程的细节,包括构建批处理几何图形。强烈建议读者从本章开始。
- The Unity UI profiling tools 一章讨论使用开发人员可用的各种工具收集分析数据。
- The Fill-rate, Canvases and input 本章讨论了如何提高UnityUI的画布和输入组件的性能。
- The UI controls 一章讨论UI文本、滚动视图和其他特定于组件的优化,以及一些不适合其他地方的技术。
- The Other techniques and tips 一章讨论了一些不适合其他地方的问题,包括UI系统中的一些基本技巧和解决“棘手问题”的方法。
UI Source Code
请始终记住,UnityUI的图形和布局组件完全是开源的。它们的源代码可以在 Unity’s Bitbucket repository, under UI.