写在最前:
1.工程环境:Unity 2017。
2.UI插件:UGUI。
3.本文章是个人的学习记录贴,如果有幸被翻阅,请不要吐槽排版。
先摘录一下 UI/Default 的相关关键代码,以下描述会用到(本人自己创建了一个Shader,并复制了UI/Default源码,所以可以更改!)
#pragma multi_compile __ UNITY_UI_CLIP_RECT //------------------------------------- a
#pragma multi_compile __ UNITY_UI_ALPHACLIP //------------------------------------- b
#ifdef UNITY_UI_CLIP_RECT
color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); //----------------c
#endif
#ifdef UNITY_UI_ALPHACLIP
clip(color.a - 0.001); //------------------d
#endif
正文:
1.Mask:
①.Mask原理是使用的模板缓冲区,来实现遮罩的功能。在绘制Mask下子物体时,与模板缓冲区的值进行比对来实现的裁剪效果,所以这种裁剪效果可以针对3D物体的。
②.实测表明 Mask与Image必须挂在同一GameObject下,否则Mask将失效。个人推测是如果没有Image组件,Mask将无法正确