unity 讓自定義 ui shader 支持 UGUI 的 Mask 功能

unity論壇原文:
http://answers.unity3d.com/questions/980924/ui-mask-with-shader.html

關鍵的支持代碼:

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

......
}

在你的 shader 中加入這2段代碼,剩下的部分照舊。這時我們再把這個 shader 賦給 ugui 組件的時候,就發現 mask 組件可以正確的剔除被我們更換過材質球的組件了。

PS:其實mask的主要功能,計算都在ui組件上了,加上這2段以後,我們就可以正確的接受外部傳入進來的mask相關參數了,剩下的就是把它們剔除掉就好了。

補充一下:在支持mask之後,在Mask組件下的Image等組件的Material只有第一次賦值有效,如果想要能動態修改的話,就要新建一個腳本繼承Image並重寫GetModifiedMaterial方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章