UnityのBuild SettingsをいじるとGameViewのLoadSceneがバグる

開発中のプロジェクトが複雑になってきたので、問題を切り分けてデバッグを効率化するためシーンを複数に分けた。いろいろいじっているうちに、後からシーン名を変えたり、Build Settingsでシーンの並び順を変えたりすると、Game ViewでLoadScene()がうまく動かない現象に気づいた。

スポンサードリンク

引数はシーン番号と名称のどちらがよいか

シーン遷移に使うSceneManager.LoadScene()の使い方としては、遷移先のシーンをインデックス番号で与えるのと、シーン名称で指定する2通りがある。

Build Settingsでシーンの並び順を変更したら、引数のインデックス番号も変える必要がある。シーン名を変更しても同様なので、開発効率からすると、どちらがベターとはいえない。一度付けたシーン名を変える可能性が低いなら、引数を名称文字列で与えた方が、スクリプトの可読性は高まりそうだ。

Game Viewで変なシーンに飛ぶ現象

今回、数が増えて来たシーンの並び順を整理しようと、Build Settings内で順序を変えたら、Game View上で正しくシーン遷移できない問題が出た。プレビュー操作中に、以下のようなエラーが出て、訳の分からないシーンに飛ばされてしまう。

Scene ‘Test’ couldn’t be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.

何度も確認して、シーン名は間違っていないし、Build Settingにも正しく登録されている。シーン名称でなくインデックス番号で指定しても、同じエラーが出た。また、さらに理解不能なことに、上記エラーを吐かずに指定したのと別のシーンに遷移してしまうこともある。

Build Settings上の操作が地雷

一方、プロジェクトをビルドしてから実行するとこの問題は出ない。最終的なプロダクトに影響が出なければそれでいいと思いつつも、原因不明のエラーを抱えているのはどうにも気持ち悪い。さらに、そこそこ大きなプロジェクトなので、開発中にプレビューするため毎回ビルドをかけるのは時間の無駄である。

試行錯誤して検証した結果、シーン遷移がうまくいかない原因は、Build Settings内でシーンの順番を入れ替えたことだとわかった。Unityのダイアログ画面上で、シーンをドラッグドロップすると順序を変えられるのだが、この操作はビルド前のプロジェクトには正しく反映されないらしい。

まさかここが原因だとは思わなかったので、ダミーのシーンを用意したり、LoadScene ()の引数をいろいろ工夫したり、1時間くらいはまってしまった。シーンを再登録せずに、ビルドセッティング画面上のマウス操作でいじれるのは便利だと思ったが、思わぬ罠にはまってしまった。

試しにビルドセッティングからDeleteキーでいったんシーンを全部削除して、一つずつシーンを開きながらAdd Open Scenesで1つずつ登録し直したら、うまく動いた。Game Viewでの挙動も問題ない。

Deletedとグレーアウトされた空欄チェックボックスがある行も、マウス操作で上下に移動できるのが不気味なUIだ。このあたりも地雷かもしれないので、うかつに触れない方がいいだろう。

Unityを再起動しても直る

さらに、現在のプロジェクトを保存してUnity自体を再起動しても直ることがわかった。その後、またBuild Settings上でシーンを入れ替えても、今度はGame View側にも正しく反映される。この問題自体、特定の操作で必ず起こるという現象でもないらしく、わざわざ解決法を模索したのが馬鹿らしく思われてきた。

ネットで調べても同様のトラブル報告は見当たらなかったので、Unityによくあるイレギュラーな挙動だったのかもしれない。インスペクター上で行った変更がうまく反映されないとか、たびたびソフトのバグっぽい状況に見舞われることがある。

たいていはUnityを再起動すれば元に戻るので、何か不具合の兆しが出たら、素直に画面を閉じて頭を冷やすとよさそうだ。まるで昔のWindowsのようだが、「困ったらひとまず再起動」という経験則はUnityにも有効らしい。ソフト側に起因する原因不明なエラーを苦労して解決するのは時間の無駄だし、再起動で直れば余計な労力を費やす必要がない。

スポンサードリンク