"数字类型构造函数在第&#34行的参数数量不正确; Unity中的错误,Unity

时间:2017-06-28 22:22:57

标签: c# unity3d shader hlsl

在着色器附带的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
        }
    }
}

3 个答案:

答案 0 :(得分:3)

您的代码有两个错误:

1 。您正在使用float3将一个参数传递给float3(_Color)

2 。您使用float4将两个参数传递给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);

请注意,_Color.a(alpha)缺失。这是什么使它透明,因为alpha设置为0

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

fixed4 transparent = float4(_Color.r, _Color.g, _Color.b, 0);

如果您需要它是不透明的,那么也提供alpha组件或将0替换为1

fixed4 transparent = float4(_Color.r, _Color.g, _Color.b, _Color.a);

声明

我不是一名着色程序员,但这可以解决你的问题。

答案 1 :(得分:1)

问题可能出在 float3(_Color) ,因为引用说它需要2个参数,而你只给出一个 _Color < / EM>

我没有与着色器有很多关系,所以请考虑将其作为可以帮助解决此问题的方法,但不一定要:

float3 variable = float3(_Color,0);

float4(变量,0);

尝试在float3或float4构造函数中的逗号后添加额外的0,它可能是3维的,因此它需要x,y和z

答案 2 :(得分:1)

_Color有4个通道,但它在float3中,它给你错误。所以 尝试:

fixed4 transparent = float4(float3(_Color.rgb), 0);

或更好:

fixed4 transparent = float4(_Color.rgb, 0);

因为你不必将float3作为float3。