着色器中的“行中数字类型构造函数的参数数量不正确”错误,Unity

Duc*_*tor 0 c# shader hlsl unity-game-engine

在 github 上找到了一个带有着色器的 Unity 软体资源。由于对Unity着色器的了解有限,我不知道上述错误是什么意思。

代码(第22行是发生错误的地方,我已经标记了。):

Shader "Custom/Circle" {
    Properties {
        _Color ("Color", Color) = (1, 1, 1, 1)
    }

    SubShader {
        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
        ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha

        Pass {
            CGPROGRAM
            #include "UnityCG.cginc"

            #pragma vertex vert_img
            #pragma fragment frag
            #pragma target 3.0

            float4 _Color;

            float4 frag(v2f_img i): COLOR {

                fixed4 transparent = float4(float3(_Color),0); // << ERROR IS HERE >>
                float distance = length(i.uv - float2(0.5, 0.5));
                float delta = fwidth(distance);
                float alpha = smoothstep(0.5, 0.5 - delta, distance);
                return lerp(transparent, _Color, alpha);
            }
            ENDCG
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 5

您的代码中有两处错误:

1 .您正在将一个参数传递给float3with float3(_Color)

2 .您将两个参数传递给float4with float4(float3(_Color),0)

float3需要 3 个参数,而float4fixed4需要 4 个参数。我认为名字已经说明了这一点。

您必须将每个单独的颜色分量(_Color.r_Color.g_Color.b)传递给然后用它来float3创建float4

该行代码应该是:

fixed4 transparent = float4(float3(_Color.r, _Color.g, _Color.b),0);
Run Code Online (Sandbox Code Playgroud)

请注意,_Color.a缺少 (alpha)。这就是使它透明的原因,因为 alpha 设置为0


我真的不认为float3这里需要这样做,所以这也应该有效:

fixed4 transparent = float4(_Color.r, _Color.g, _Color.b, 0);
Run Code Online (Sandbox Code Playgroud)

如果您需要它不透明,那么也提供 alpha 分量或将其替换01.

fixed4 transparent = float4(_Color.r, _Color.g, _Color.b, _Color.a);
Run Code Online (Sandbox Code Playgroud)

免责声明

我不是着色器程序员,但这应该可以解决您的问题。