一.参考文章:
UnityShader实例09:Stencil Buffer&Stencil Test - lupeng的博客 - 博客频道 - CSDN.NET
二.主要方法:
应用shader中的模板测试方法(stencil)。首先将遮罩图片的模板缓冲值设置为1(unity默认为0),然后在被遮罩的物体或者粒子的shader中用模板检测方法检测当前缓冲值是否为1,如果为1的话显示像素,如果不为1则不显示。当然这里的1也可以是除0外的其他整数。
三.方法说明:
1.遮罩层shader中的方法:
Stencil
{
Ref 1 //要比较的缓冲值
Comp Always //比较方法:不管结果如何总是通过
Pass Replace //通过后的处理方法:将当前的值替换为比较的值
}
//总体解释:将当前的缓冲区的值与1做对比,然后不管对比结果为何,都将当前的值替换为1。
2.被遮罩物体shader中的方法:
Stencil {
Ref 1 //要比较的缓冲值
Comp equal //比较方法:相等
}
//总体解释:如果当前缓冲区的值等于1则通过显示像素,否则不显示
四.实例
其他具体的参数,参考文章里说明的已经很清楚了,感兴趣的可以仔细看看。我这里直接把例子代码拷贝过来,大家放到工程里就可以用。
MaskUI.shader //用来替换"UI/Default" shader ,用的时候要给Image加上Mask组件
MaskParticle.shader //用来替换"Particles/Additive" shader
下载链接:UGUI粒子遮罩