UI mask with shader

Shader "xxxxxx"
{
Properties
{
......

//MASK SUPPORT ADD
_StencilComp ("Stencil Comparison", Float) = 8
_Stencil ("Stencil ID", Float) = 0
_StencilOp ("Stencil Operation", Float) = 0
_StencilWriteMask ("Stencil Write Mask", Float) = 255
_StencilReadMask ("Stencil Read Mask", Float) = 255
_ColorMask ("Color Mask", Float) = 15
//MASK SUPPORT END

}

SubShader
{
Tags {...}

//MASK SUPPORT ADD
Stencil
{
    Ref [_Stencil]
    Comp [_StencilComp]
    Pass [_StencilOp] 
    ReadMask [_StencilReadMask]
    WriteMask [_StencilWriteMask]
}
ColorMask [_ColorMask]
//MASK SUPPORT END

......
}
View Code

在你的 shader 中加入这2段代码,剩下的部分照旧。这时我们再把这个 shader 赋给 ugui 组件的时候,就发现 mask 组件可以正确的剔除被我们更换过材质球的组件了。

其实mask的主要功能,计算都在ui组件上了,加上这2段以后,我们就可以正确的接受外部传入进来的mask相关参数了,剩下的就是把它们剔除掉就好了。

在支持mask之后,在Mask组件下的Image等组件的Material只有第一次赋值有效,如果想要能动态修改的话,就要新建一个脚本继承Image并重写GetModifiedMaterial方法。

原文链接:https://blog.csdn.net/wpapa/java/article/details/71242812

原文地址:https://www.cnblogs.com/Joke-crazy/p/12858987.html