Unity 2D:区域颜色反效果

时间:2019-02-18 01:33:54

标签: unity3d unityscript

我正在尝试创建一个GameObejct,如果激活,则将其背后的任何颜色反转。理想情况下,当该GameObject出现/变为活动状态时,将从其中心点扩展到一定大小的半径。

因此,请设想一个圆,其比例在1或2秒钟内从x = 0和y = 0逐渐增加到x = 5和y = 5,并反转后面的任何颜色。实际圆多长或多大无关紧要,仅是一个示例。我尝试只创建一个我在网上找到的带有遮罩和着色器的GameObect,但根本没有用,我什至不知道如何为扩展设置动画。

有人对我如何实现我的梦想效果有任何想法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

这里是一个着色器,除了反转颜色外什么也不做。

重要的部分是$ cat tst.awk match($0,/^(-*)([^-]+)(-+)([^-]+)/,a) { offset = length(a[1])/4 + 1 for (i=offset+1; i<=3; i++) { tags[i] = "" } tags[offset] = a[2] vals[tags[1]][tags[2]][tags[3]] = $0 } END { PROCINFO["sorted_in"] = "@ind_str_asc" for ( tag1 in vals ) { for ( tag2 in vals[tag1] ) { for ( tag3 in vals[tag1][tag2] ) { print vals[tag1][tag2][tag3] } } } } $ awk -f tst.awk file store:LA----------------400.68 ----copies--------------110.34 --------classmate-------110.34 ----pencil--------------90.00 --------HB--------------44.5 --------classmate-------45.5 ----pens----------------200.34 --------butterflow------90.00 --------reynolds--------110.34 --------trimex----------NA Alpha:Blend

Blend OneMinusDstColor Zero

您可以将其放在任何Sprite或3D对象上以获得此效果: enter image description here

至于动画,金的答案很简单。或者,您可以通过以下代码为比例尺设置动画:

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

此特定代码将使子画面“脉冲”。像这样:

Pulse

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

答案 1 :(得分:1)

选择您的GameObject-> Window-> Animation-> Animation-> Create-> Save-> Add Property-> Transform-> Scale。在0:00关键帧处,将x,y,z的比例设置为1。单击到1:00关键帧,并将x,y,z的比例设置为2。按播放,动画应从1的比例开始循环至2。