1. Mask遮罩的大小与形状依赖于Graphic,而RectMask2D只需要依赖RectTransform
2. Mask支持圆形或其他形状遮罩, 而RectMask2D只支持矩形
3. Mask会增加drawcall
4、mask的性质:
性质1:Mask会在首尾(首=Mask节点,尾=Mask节点下的孩子遍历完后)多出两个drawcall,多个Mask间如果符合合批条件这两个drawcall可以对应合批(mask1 的首 和 mask2 的首合;mask1 的尾 和 mask2 的尾合。首尾不能合)
性质2:计算depth的时候,当遍历到一个Mask的首,把它当做一个不可合批的UI节点看待,但注意可以作为其孩子UI节点的bottomUI。
性质3:Mask内的UI节点和非Mask外的UI节点不能合批,但多个Mask内的UI节点间如果符合合批条件,可以合批。
5、RectMask2D下并且在裁剪区域不能和外部ui合批,也很难和其他RectMask2D内部的ui合批(一般默认不能)
RectMask2D计算裁剪条件:
a、位置更改maskableTarget.canvasRenderer.hasMoved(如果发生了任何会使生成的几何图形的位置无效的更改)
b、是否在裁剪区域内(MaskableGraphic中Cull方法clipRect.Overlaps)
用哪个:
1、如果非矩形则只能使用mask
2、如果canvas下只有需要一个遮罩则使用RectMask2D
3、如果canvas下只有需要多个遮罩需要判断是否可以合批,可以使用FrameDebug工具确认
4、RectMask2d每帧计算裁剪区域,所以当item过多的时候,每个item计算对于耗时会有一定影响。item少的时候可用
使用场景:
1、滚动列表
2、Dropdown
3、界面滑动显示隐藏遮罩