在lwrp下如果我们用了UnityEngine.Rendering.GraphicsSettings.useScriptableRenderPipelineBatching = true;
那么我们的元素在同材质下并且同样的变体下就会合批。以节省drawcall。
但是这个用在fgui的list下就会出问题了。因为fgui下的元素用的材质比较多的是image材质和text材质。然而我们合批是因为材质一样就合批的。
在这种情况下,会有个问题,就是如果有两个list,一个list在另一个list上面,然后下面的list移动的位置小于另一个list。
由图上可以看到我有两个list,然后第二个list看不到。
这是因为,list下的元素会做裁剪,他的裁剪原理是用了Fgui-Image或Fgui-text下的CLIPPED变体,然后shader来做裁剪。
然后因为两个list在同一个批次(材质一样)
给到gpu的shader只能有一个进入,那么就哪个list的shader先进入就按照谁的shader来执行(按照先后顺序,也就是比较先进入的先执行)。
这样裁剪的范围就不正确了。
解决办法:
1.简单点就是有列表时不合批就。UnityEngine.Rendering.GraphicsSettings.useScriptableRenderPipelineBatching = false;
2.每个list下的image及text,用材质不同的参数就可以了,这样他们每个list就不合批,这样大家就可以用自己的CLIPPED的裁剪范围来裁剪了。就不会出现这个问题了。
比如我改材质的op,让他每个list都更改一个值
结果展示
各自裁剪各自的区域了
两个不通的批次