Unity2D 讓自定義UI shader支援UGUI 的mask
阿新 • • 發佈:2021-05-08
場景:在遮罩層下的ui物件使用material(shader)會導致本身不受mask的影響。如:
以上沒有任何配置錯誤!
解決辦法:
修改自定義shader,使它支援mask引數
Shader "....." {
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
Pass { ...}
}
FallBack "Transparent/VertexLit"
}
主要為這兩段程式碼:
//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
//MASK SUPPORT ADD
Stencil
{
Ref[_Stencil]
Comp[_StencilComp]
Pass[_StencilOp]
ReadMask[_StencilReadMask]
WriteMask[_StencilWriteMask]
}
ColorMask[_ColorMask]
//MASK SUPPORT END