【问题标题】:Unity 2D: Area Color Inverse EffectUnity 2D:区域颜色反转效果
【发布时间】:2021-10-25 23:05:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

    重要的部分是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"
    }
    

    您可以将其放在任何精灵或 3D 对象上以获得此效果:

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

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

    此特定代码将使精灵“脉冲”。像这样:

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

    【讨论】:

    • 我使用 King 的方式为最终版本的效果制作动画,您的透明着色器完美无瑕。谢谢!不过我还有一个问题。是否有可能有一个以相同方式工作但将后面的 HUE 转换 180 度而不是反转颜色的着色器?我相信这对我来说会更好,但我没有先在 Photoshop 中进行足够的测试。
    • 我确定有办法。您介意发布一个不同的问题(如果还没有)并链接回这个问题以供参考吗?
    • 另外请把问题的链接放在这里:)
    • 这里是新问题的链接:stackoverflow.com/questions/54807069/…
    • 再次,如果您能提供帮助,我们将不胜感激。如果不是,那么,我仍然非常感谢所花费的时间。
    【解决方案2】:

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

    【讨论】:

    • 谢谢!很简单,我实际上更了解了 Animator 的工作原理。到目前为止,我只使用预先绘制的动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2016-07-08
    • 2020-11-18
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多