【Simple Shader】UGUI自帶效果繼承

平時在ugui上添加上了材質(zhì)后,你再改變圖片的顏色就不會改變了,在自己的shader上改變顏色,所有使用這個shader的ui都改變顏色了,或者不再受mask的約束了。


mask無效

我們想要繼承iamge中的顏色控制,只需要在頂點函數(shù)中把頂點顏色傳遞給片元即可。

o.color=v.color;

然后再最后的顏色乘上傳遞過來的顏色值即可。這個即解決了繼承顏色,同時調(diào)整單個顏色也不會影響其他的物體。
當然我們平時使用代碼改變shader中的屬性的時候,不想要所有使用該shader的物體改變屬性,我們可以把這個物體上的材質(zhì)復(fù)制實例化一個新的材質(zhì),然后把新材質(zhì)賦值給物體然后改變shader屬性即可。具體做法:

var mat= GetComponent<Image>().material;
var newMat=(Material)Instantiate(mat); 
GetComponent<Image>().material=newMat;
newMat.SetColor("_Color",Color.white);

然后就是實現(xiàn)遮罩效果,現(xiàn)在屬性中加這些:

/* UI Mask*/
[PerRendererData]_StencilComp ("Stencil Comparison", Float) = 8
[PerRendererData]_Stencil ("Stencil ID", Float) = 0
[PerRendererData]_StencilOp ("Stencil Operation", Float) = 0
[PerRendererData]_StencilWriteMask ("Stencil Write Mask", Float) = 255
[PerRendererData]_StencilReadMask ("Stencil Read Mask", Float) = 255
[PerRendererData]_ColorMask("Color Mask", Float) = 15

然后再SubShader中加這些:

  /* UI Mask*/
    Stencil
    {
        Ref [_Stencil]
        Comp [_StencilComp]
        Pass [_StencilOp] 
        ReadMask [_StencilReadMask]
        WriteMask [_StencilWriteMask]
    }
ColorMask[_ColorMask]

嗯差不多就是這個樣子,具體的原理猜測顏色是根據(jù)材質(zhì)的前后來選擇渲染的吧,然后我們寫的shader最后渲染然后就可以獲得吧。代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容