普段シェーダーを記述することは少ない私が、今回の問題に直面し、解決した方法について紹介します。必ず本記事の方法で解決できる訳ではなく、一部の参考資料としてご利用ください。
対象環境
- Unity 2022以上
- URP
- ShaderLabで記述
現象
ShaderLabで記述したシェーダーが、エディタ上では理想通りに表示されるが、ビルドをするとマテリアルエラー(ピンク)になる。
原因
Tags { "RenderPipeline" = "UniversalRenderPipeline" }
上記のようにタグを記述していた場合、次のように書くと直ります。
Tags { "RenderPipeline" = "UniversalPipeline" }
解説
実は、元々UniversalRenderPipeline
と記述すること自体間違っており、Unity2021以前はこのように書いても読み込めてしまうというバグがあったそうです。そしてUnity2022以降でこのバグが修正され、正しい表記「UniversalPipeline
」でないと読み込めないようになりました。
Unityのサンプルコードや様々な記事で間違った書き方がされていたため、それらを学習した生成AIでも間違ったコードが出力されることがあります。