在着色器附带的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
}
}
}
答案 0 :(得分:3)
您的代码有两个错误:
1 。您正在使用float3
将一个参数传递给float3(_Color)
。
2 。您使用float4
将两个参数传递给float4(float3(_Color),0)
。
float3
需要3个参数,而float4
和fixed4
需要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。