前言
今天给大家分享Unity UI开发相关的一些编码和规范,有了这些指导规范,帮助你的项目获得更好的性能,少走弯路。Unity GUI(也被称为UGUI)经常是项目性能问题的来源。
对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习unity的零基础小白,也有一些正在从事unity开发的技术大佬,欢迎你来交流学习。
考虑使用多分辨率和宽高比
大部分情况下,我们一套UI,能基本全部适配好,Unity UI让建立一个可以适应不同分辨率和宽高比屏幕调整位置和缩放UI很简单。然而,一种设计不总适合所有平台,所以创建多种版本的UI(或者说部分UI)来让每个设备上都有最佳的体验。务必要在各种支持的设备上测试你的UI以确保用户体验是最佳且一致的。
配置一个Unity UI Canvas
避免使用少量的Canvas
注意Layout Group
Layout Group是另一个常见的性能问题源,尤其是嵌套使用它们的时候。当在Layout Group中的UI Graphics组件改变了的时候,例如说当ScrollRect移动的时候,UGUI会递归向上查找场景的层级直到找到一个没有组件父母节点。该layout和里面的所有东西随后都会被重建。
尽量避免使用Layout Groups,尤其是当你的内容并非动态的时候。为避免Layout Group仅仅用来初始化随后不会改变的布局内容,考虑添加一些自定义代码来在内容初始化之后禁用那些Layout Group组件。
List和Grid视图可能会很昂贵
避免大量重叠的元素
由多层重叠的元素构成的UI并不少见。一个合适的例子可能是卡牌游戏中的一个卡片Prefab。尽管这种方式可以允许许多设计上的自由度,大量的像素overdraw可能会极大的影响性能。它甚至可能导致更多次数的绘制分批。请研判你是否能将多个层级元素合成为更少(乃至一个)的元素。
思考你如何使用Mask和RectMask2D组件
组合你的UI贴图以改善合批
确保将UI贴图尽可能地合成成一张大贴图以改善合批。将逻辑上属同一类的贴图合成一张大贴图合情合理,但也要小心大贴图不要过大以及/或者过于稀疏地填充。这是一个常见的内存浪费来源。
当你添加一个新的UI窗口或屏幕时请小心
当添加一个新的UI窗口或是屏幕时经常会引发项目中的问题。这有许多潜在的原因(例如,因为根据需求加载资源以及实例化一个有大量UI组件复杂结构的纯粹开销)。
也尝试减少UI的复杂程度,考虑缓存相对来讲经常使用的UI组件。禁用并启用它然而不是每次都摧毁并重实例化它。
当不需要时禁用Raycast Target
对不需要输入事件的元素禁用Raycast Target
好,今天总结了UI开发中常见的一些规范与优化技巧,关于UGUI的DrawCall优化,我这边有一个教程《Unity UGUI的Drawcall优化》