先日作成したゲームをビルドしてexeを出力して起動してみたところ、何やらオブジェクトの様子がおかしい。
Untiyエディタ上でデバッグした際には問題無かったので意味不明だったが、ググってみたところ何やらUnityのバグ臭い…
下記URLはUnity公式コミュニティの関連スレッド
https://forum.unity.com/threads/standard-cutout-shader-working-in-editor-not-in-build.1223088/
どういった問題が起きた?
板ポリ(Panel)に木の画像を張り付けたオブジェクトを作成した。
マテリアルの設定としては、不要部分を透過処理したかったのでレンダリングモードをCutoutに設定した程度。
エディタ上で実行する分には、上記画像のようにSceneウィンドウと同じく透過された状態で、問題無く表示される。
が、ビルドして出力したexeを起動すると、イメージとしては下記の画像のような、レンダリングモードをOpaqueにした状態と同じような感じで表示されてしまう。
解決策は?
コミュニティのスレッドを最後まで見た感じ、バージョンを2021.3.19f1にすることで解決できるらしい。
というより、下記の公式ページで本件が修正済みとなっているUnityのバージョンが確認できるので、そのバージョンに更新することが根本解決になるのかな?
https://issuetracker.unity3d.com/issues/standard-shader-with-cutout-mode-doesnt-work-in-the-player-when-shader-graph-is-installed-with-built-in-render-pipeline
(私が使用しているバージョンは2022.1.22f1なので、運が悪かったっぽい)
回避策は?
バージョン変更とかいろいろ問題や懸念があってできねぇよって場合の回避策として、レンダリングモードをCutoutではなくFadeを使うようにするという提案も出ていたし、私はそちらの方法で回避した。
小さいゲームならそれで問題無いけど、大規模なゲームだとFadeはCutoutよりは重い処理だそうなので、パフォーマンスへの影響を考えた方が良いかもしれない。(誤差の範囲かもしれないが)
シェーダーグラフが何か悪さをしているらしく、「シェーダーグラフを削除したら問題が解決した」という投稿もあるので、プロジェクトを破壊する覚悟がある人はシェーダーグラフを削除するのもありかもしれない。
まあそれはどうなろうとも自己責任で、ね…。