Unity 2D:区域颜色反转效果

The*_*bie 1 unity-game-engine

我正在尝试创建一个 GameObejct,如果处于活动状态,它会反转它后面任何东西的颜色。理想情况下,当这个游戏对象出现/变得活跃时,它会从它的中心点扩展到一定大小的半径。

所以想象一个圆圈,它的比例在 1 或 2 秒内从 x=0 和 y=0 逐渐增加到 x=5 和 y=5,并反转后面任何东西的颜色。实际圆圈有多长或多大并不重要,只是这个想法的一个例子。我尝试使用我在网上找到的蒙版和着色器创建一个 GameObect,但根本不起作用,我仍然不确定如何为扩展设置动画。

有没有人知道我如何使我的这个梦想效果成为现实?

谢谢!

Rea*_*ria 5

这是一个除了反转颜色之外什么都不做的着色器。

重要的部分是Alpha:BlendBlend OneMinusDstColor Zero

Shader "Custom/Invert" 
{
    Properties 
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader 
    {
        Tags { "RenderType"="Transparent" "Queue"="Transparent" }
        LOD 200
        Blend OneMinusDstColor Zero

        PASS
        {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
            #pragma target 3.0 Alpha:Blend

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            fixed4 _Color;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = float2(0,0);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                return _Color;
            }

            ENDCG
        }
    }
    FallBack "Diffuse"
}
Run Code Online (Sandbox Code Playgroud)

你可以把它放在任何精灵或 3D 对象上以获得这种效果: 在此处输入图片说明

至于动画,King 的回答很好很简单。或者,您可以通过代码为比例设置动画:

public class Scale : MonoBehaviour 
{
    void Update ()
    {
        var scale = Mathf.Sin(Time.timeSinceLevelLoad / 4f) * 20;
        this.transform.localScale = new Vector3(scale, scale, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个特殊的代码将使精灵“脉冲”。像这样:

脉冲

我认为您应该能够从这个示例中制作自己的缩放脚本。