希望一个简单的问题。这是一个简单的相机效果着色器。这有效。但是,将_ColorSet01数组放在内部的frag函数意味着每个像素都会初始化数组¿我错了吗?相信我已经将它移到了函数外面,就在_MainTex定义的正下方。通过执行此操作,数组中的每个项都丢失了它们的值,并在函数内部查询时变为float4(0,0,0,0)。
我显然是以错误的方式处理这个数组。任何帮助,将不胜感激。
顺便说一句,这是Unity 2018.3.10,如果有帮助的话。
sampler2D _MainTex;
float4 frag(v2f_img input) : COLOR {
float4 base = tex2D(_MainTex, input.uv);
float4 _ColorSet01[6] =
{
float4(1,0,0,1),
float4(1,1,0,1),
float4(1,0,0,1),
float4(1,0,1,1),
float4(1,1,0,1),
float4(1,0,0,1)
};
if (base.a > 0)
{
base.rgb = _ColorSet01[1].rgb;
}
return base;
}
真的很抱歉...在发布问题后5分钟找到答案。这是在函数外声明数组并保留值的方法:
static const float4 _ColorSet01[6] = {
float4(1,0,0,1),
float4(1,1,0,1),
float4(1,0,0,1),
float4(1,0,1,1),
float4(1,1,0,1),
float4(1,0,0,1)
};
“static”和“const”为我做了诀窍。