疑惑
在最开始用shader做UI特效的时候,或多或少会遇到这样的问题,就是用RawImage能得到预期效果,而用Image很有可能就得不到预期效果,关键原因还是UV的差异引起的.
简单说下RawImage和Image的差异:
他们是从MaskableGraphic派生出来的两个不同的分支,他俩并没有继承关系.
游戏中应该跟多的会使用到Image,因为他是用的图集思想,可以达到自动合批的效果,性能是优于RawImage的,而能达到自动合批,那么他得有相同的材质球,比如两个Image分别显示同一个图集中的不同Sprite,那么他们的材质球中的贴图则就是整张图集(在FrameDebugger中可查看),而达到显示不同的Sprite则是通过Image网格中顶点的UV值来指定的,而RawImage则不是图集思想,就是单张纹理直接显示,他的网格顶点中的UV值就是正常的[0~1].
通常情况下做UI特效,内部算法要么直接对颜色值进行处理,要么就是用UV值做变化因子进行一些操作.而用UV值参与计算的shader就很有可能在Image上使用效果达不到预期的问题,因为内部的算法基本上都是视为UV的区间是0~1,那么处理的结果就可以想象是对整张图集进行处理,而当前这个Image就仅仅是取其中一小块,当然效果就很难达到预期.
PS:如果内部想用模型坐标来计算,那么更不靠谱,因为对合批的网格去取他的模型坐标本身就是离大谱的事儿.
解决办法
Image的网格里的UV值不是不在