1:对象池中对象用scale=0或者alphaGroup=0来控制更佳, 当UGUI控件 scale=0时顶点数也会变为0
2:如果出现了WaitingForJob或PutGeometryJobFence,则说明合并网格开销很大。
3:Z一定要调为0,除非有3DUI穿插。
4:Image为null或者alpha为0不能降低开销,Image为null还会不能合并。
5:Item类型,如果当前图标和相邻图标(非当下图标)有重叠,那么则不会合并为2个drawcall。
6:当某一个item类型处于选中,播放动画等状态,并且所处canvas下内容比较多的情况下,可以单独把item放到预先建好的动态canvas里,取消选中时再放回去。
7:动态文字尽量不用UI/Effect/shadow和UI/Effect/Outline。(会使得文本的Mesh增加4倍)
8:两个功能UI有一个需要隐藏的,例如新打开的界面完全遮挡住了之前的界面,可以在摄像机上设置一个层级不渲染,通过修改面板的layer来控制是否可见。
9:如果修改的是Image组件上的Color属性,其原理是修改顶点色,因此是会引起网格的Rebuild的(即Canvas.BuildBatch操作,同时也会有Canvas.SendWillRenderCanvases的开销)。而通过修改顶点色来实现UI元素变色的好处在于,修改顶点色可以保证其材质不变,因此不会产生额外的Draw Call。
10:在UI的默认Shader中存在一个Tint Color的变量,正常情况下,该值为常数(1,1,1),且并不会被修改。如果是用脚本访问Image的Material,并修改其上的Tint Color属性时,对UI元素产生的网格信息并没有影响,因此就不会引起网格的Rebuild。但这样做因为修改了材质,所以会增加一个Draw Call。
11:CanvasGroup的经典使用
-在窗口的GameObject上添加一个CanvasGroup,通过控制它的Alpha值来淡入或淡出整个窗口。
-通过给父级GameObject添加一个CanvasGroup并设置它的Interactable值为false来制作一整套没有交互(灰色)的控制。