Unity中UGUI在Mask剪裁粒子特效的实现

在Unity使用Mask是剪裁不了粒子特效的,之前有想过RenderTexture来实现,不过使用RenderTexture不适合用于很多个特效,因为RenderTexture依赖Camera的照射,如果在背包中每种道具都有不同的特效,那使用RenderTexture则需要不同特效都用一个Camera。明显是不合适的。

先看下剪裁不了的显示。

解决办法在粒子特效的shader中添加剪裁的代码。可以参考官网的说明:https://docs.unity3d.com/cn/2019.4/Manual/SL-Stencil.html

添加下列代码:

Shader "UI/Default"
{
    Properties
    {

        _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
    }

    SubShader
    {
        // ...
        Stencil
        {
            Ref [_Stencil]
            Comp [_StencilComp]
            Pass [_StencilOp]
            ReadMask [_StencilReadMask]
            WriteMask [_StencilWriteMask]
        }
        // ...
    }
}

展示一下剪裁后效果:

你可能感兴趣的:(Unity3d,Unity,Shader,unity,游戏引擎)