【Simple Shader】UGUI自带效果继承

作者: 黒可乐 | 来源:发表于2018-03-09 17:49 被阅读74次

    平时在ugui上添加上了材质后,你再改变图片的颜色就不会改变了,在自己的shader上改变颜色,所有使用这个shader的ui都改变颜色了,或者不再受mask的约束了。


    mask无效

    我们想要继承iamge中的颜色控制,只需要在顶点函数中把顶点颜色传递给片元即可。

    o.color=v.color;
    

    然后再最后的颜色乘上传递过来的颜色值即可。这个即解决了继承颜色,同时调整单个颜色也不会影响其他的物体。
    当然我们平时使用代码改变shader中的属性的时候,不想要所有使用该shader的物体改变属性,我们可以把这个物体上的材质复制实例化一个新的材质,然后把新材质赋值给物体然后改变shader属性即可。具体做法:

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

    然后就是实现遮罩效果,现在属性中加这些:

    /* 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]
    

    嗯差不多就是这个样子,具体的原理猜测颜色是根据材质的前后来选择渲染的吧,然后我们写的shader最后渲染然后就可以获得吧。代码

    相关文章

      网友评论

        本文标题:【Simple Shader】UGUI自带效果继承

        本文链接:https://www.haomeiwen.com/subject/vmcmfftx.html