mask和RectMask2D区别

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、界面滑动显示隐藏遮罩

 

 

 

 

 

 

参考网址:

https://www.cnblogs.com/iwiniwin/p/15191362.html

http://www.codebaoku.com/it-csharp/it-csharp-215989.html

posted @ 2022-09-23 10:29  酉乐  阅读(410)  评论(0编辑  收藏  举报