原因:excluded shader…because it uses unsized arrays

Unityのロゴ。

Unity でシェーダを実装するとき、次のようなコードが出力されることがあります。 ※ DirectX やハードウェアのバージョンアップに伴ってエラーメッセージも更新されるため、実際にはわずかに異なることもあると思います。

// Upgrade NOTE: excluded shader from DX11, Xbox360, OpenGL ES 2.0 because it uses unsized arrays
#pragma exclude_renderers d3d11 xbox360 gles

このメッセージが挿入される原因

執筆時時点での HLSL / Cg / GLSL(OpenGL ES 2.0 に準拠するもの) では、固定サイズでない配列を利用することができません。 今後のバージョンアップによってはそれぞれの環境で動的にサイズが変更される配列を利用することができる可能性があります。

関数内や関数の外に変数として定義する配列、あるいは関数の引数として配列を定義するとき、ここで紹介するような問題が起こります。

// 引数で失敗する例
SomeFunction(sampler2D image, float4[] colors, int colorsLength)

引数にせずに、固定長配列の変数として用意して、関数内部から参照するなどして対応します。 あるいは次のようにして固定長の配列にします。

SomeFunction(sampler2D image, float4 colors[256], int colorsLength)

配列の初期化に注意する

合わせて次の情報も参照していただく方が良いかもしれません。