声明Unity着色器数组的正确方法

问题描述 投票:0回答:1

希望一个简单的问题。这是一个简单的相机效果着色器。这有效。但是,将_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;
}
unity3d shader
1个回答
1
投票

真的很抱歉...在发布问题后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”为我做了诀窍。

© www.soinside.com 2019 - 2024. All rights reserved.