Unity

【Unity】Shaderエラー「shader properties can't~」を解決した話

はじめに

UnityでShaderエラー「shader properties can't be added to this global property sheet.」を解決したお話です。

本記事は以下のバージョンで確認できている情報です。
Unityバージョン:2022.3.47f1
バージョンが異なる場合操作方法やUIに差異がある場合がありますのでご注意ください。

発生した問題

ゲームシーンを開始してエラーの発生条件を満たしてしまうと瞬く間にエラーログが「shader properties can't be added to this global property sheet.」で埋め尽くされ、その後もエラーが吐き出し続けられるという厄介者です。

ググってみると少なくない人が遭遇し困っていてかつこれという決め手の解決方法がないような雰囲気でした。

管理人が解決できた方法も環境固有の解決法でしかない可能性も多々ありますので特効薬ではなく、解決法の一つとして参考程度に考えていただけると幸いです。

解決法

シーンに描画されるシェーダーをすべて(文字通りすべて)URPまたはHDRPに対応したシェーダーに設定する。」で解決できました。

ChatGPT曰く「このエラーは、Unityでシェーダーのプロパティがグローバルプロパティシートに追加されようとして失敗したときに表示されます。通常、これはシェーダーやポストプロセスエフェクトで何らかの競合や設定ミスがある場合に発生します。」ということらしいです。

何言ってるのかわかりませんが、解決法と同じ症例の人々の情報を照らし合わせえると「URPまたはHDRPに対応していないシェーダーを設定してしまっているために発生するエラーである。」と管理人は理解しました。

ちなみにここで言っている「シーンに描画されるシェーダー」というのは、キャラクターや壁などの3Dオブジェクトだけではなく、UIなどにも使用されているシェーダーすべてを指しています。
※管理人はUIに設定されているたった一つのシェーダーのためにこのエラーが発生していました。

シェーダー変更方法

シェーダーを変更したいGameObjectのマテリアルに「Shader」の設定があるので、これをURP/HDRPの適応があるシェーダーに変更しましょう(※下図ではLilToonに設定しています)。

・URPなら Universal Render PipeLine > Lit に設定しておけば間違いないと思います。
・HDRPは使ったことがないのでわかりません。

変更の必要があるマテリアルが複数ある場合は、Edit > Rendering > Materials > Converted Built-in Materiarls to URP (※HDRPに同様の設定があるかは不明)で一気にシェーダーをUniversal Render PipeLine > Lit に変更できる場合もあります(できない場合もあります)。

本記事は以上となります。

-Unity