質問: mul(_Object2World, vertex).xyz; ``` エラーメッセージは、 > > 'LightingLambert': cannot implicitly convert from 'half3' to 'struct UnityGI'Compiling Vertex program with DIRECTIONAL LIGHTMAP_OFF DIRLIGHTMAP_OFF DYNAMICLIGHTMAP_OFF > > Platform defines: > > UNITY_ENABLE_REFLECTION_BUFFERS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING > > > というものです。 修正方法を教授くださいますようお願いいたします。
回答: > > エラーの起きてる場所は、[Assets] → [Horse] → [SoftAlpha] というファイルの97行目のコードです。 > > > いえ、どうやらエラーの発生行数は正しく表示されていないようで、実際にエラーが発生している個所はエラーメッセージにもあるように`LightingLambert()`関数にて発生しています。 このシェーダーでは2個所使用しているところがあると思います。 エラーに理由として`LightingLambert()`はUnity4とUnity5で引数の形が違っています。 *Unity4* ``` // s 出力 // lightDir ライト方向 // atten 減衰値 fixed4 LightingLambert (SurfaceOutput s, fixed3 lightDir, fixed atten) ``` *Unity5* ``` // s 出力 // gi グローバルイルミネーション fixed4 LightingLambert (SurfaceOutput s, UnityGI gi) ``` `LightingLambert()`を使用している個所をコメントアウトすることでビルドは通るようになりますが、本来のマテリアルの表示と違ってしまう可能性が高いです。 とはいえ、このシェーダーの`LightingLambert()`の部分を正しい形に変えるのも結構大変な作業になると思います。 いっそ別のシェーダーに切り替えるということも考えられるのではないでしょうか。 旧シェーダーではありますが、LegacyShaders/Transparent/Cutout/Diffuse なら代替になるかもしれません。