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

Nes*_*uro 4 shader unity-game-engine

希望问个简单的问题。这是一个简单的相机效果着色器。这有效。但是,将 _ColorSet01 数组放在frag 函数中意味着该数组会针对每个像素进行初始化 \xc2\xbf我错了吗?相信我已将其移到函数之外,位于 _MainTex 定义的正下方。通过这样做,在函数内部查询时,数组中的每个项目都会丢失其值并变为 float4(0,0,0,0)。

\n\n

我显然以错误的方式处理这个数组。任何帮助,将不胜感激。

\n\n

顺便说一句,如果有帮助的话,这是 Unity 2018.3.10。

\n\n

\r\n
\r\n
sampler2D _MainTex;\r\n\r\nfloat4 frag(v2f_img input) : COLOR {\r\n\tfloat4 base = tex2D(_MainTex, input.uv);\r\n\tfloat4 _ColorSet01[6] =\r\n\t{\r\n\t\tfloat4(1,0,0,1),\r\n\t\tfloat4(1,1,0,1),\r\n\t\tfloat4(1,0,0,1),\r\n\t\tfloat4(1,0,1,1),\r\n\t\tfloat4(1,1,0,1),\r\n\t\tfloat4(1,0,0,1)\r\n\t};\r\n\tif (base.a > 0)\r\n\t{\r\n\t\tbase.rgb = _ColorSet01[1].rgb;\r\n\t}\r\n\treturn base;\r\n}
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

Nes*_*uro 6

真的很抱歉\xe2\x80\xa6 在发布问题后仅 5 分钟就找到了答案。这是在函数外部声明数组并保留值的方法:

\n\n

\r\n
\r\n
static const float4 _ColorSet01[6] = {\r\nfloat4(1,0,0,1),\r\nfloat4(1,1,0,1),\r\nfloat4(1,0,0,1),\r\nfloat4(1,0,1,1),\r\nfloat4(1,1,0,1),\r\nfloat4(1,0,0,1)\r\n};
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

“static”和“const”对我来说很有效。

\n