"Missing Default Layout"
昨日、プロジェクトに皆さんのブランチを集積してアップデートしたあと、unityを起動しようとしたら、以下のようなエラーが出た。
"No valid user created or default window layout found." だあ?
何いっとんじゃと思いつつ、素直なワタクシは「はあ、わかりました」と "Revert Factory Settings" を押したのだけど、うんともすんとも動かず、Quitをするしかない。そしてQuitするとunityが終了する。要は unity起動不可能案件 だ。
ふざけんなよ、この野郎と調べたところ、今のところ対処方法は以下の2つに大別されることがわかった(面倒くさいのでURLは紹介しないが、このエラー名で検索するとunity forumなどがフツーに出てくる)。
- Libraryフォルダを削除する
- Libraryフォルダ内のArtifactDBを削除する
他の方法もあるのだけど、これより面倒なので、紹介しない。
そして一見すると、ArtifactDBを削除する方が楽そうなのでやってみたところ、これを削除するとunityがほぼ Libraryを再生成するのと同じ挙動 をするらしく、ド偉く時間がかかるうえに、Libraryフォルダのサイズが小さくならないので、再生成も兼ねてLibraryフォルダを捨てることを、これにブチ当たったみなさんにはお勧めしたい。
ちなみにウチのプロジェクトのワタクシのマシンでは300ギガバイトもあったLibraryフォルダがなんと100ギガ以下になったので、どう見たってLibrary捨てるのがお勧めだ。
同じエラー in Jenkins
で、unityも再起動できるようになったので、まあついでに、テストしなければならないブランチがあるので、Jenkinsも回すかあ、と Jenkinsを叩いたところいきなりエラーが出る。
時間がブラック企業なのは笑って許していただきたいが、ともかく「????」となって、エラーログを見たところ、なんとnullを吐いてunityが落ちている。以下は、unityが吐いたログの該当部分である。
2024-02-16 23:52:32 ProgressiveSceneManager::Cancel()
2024-02-16 23:52:32 NullReferenceException: Object reference not set to an instance of an object
2024-02-16 23:52:32 at UnityEngine.GUI.DoSetSkin (UnityEngine.GUISkin newSkin) [0x0001b] in <aa75c951dea44e839ed36863e532f0e2>:0
2024-02-16 23:52:32 at UnityEngine.GUIUtility.SetSkin (System.Int32 skinMode) [0x00007] in <aa75c951dea44e839ed36863e532f0e2>:0
unity内部のGUIのセットアップでコケてやがるので 「なんじゃこりゃあ」 となっていたところに、unityについてやたら詳しいチームメートが 「これ、同じエラーでLibrary消したら通るんじゃね?」 と、言ってきた(なお、時間がブラック企業じゃないかという話は聞かないw)。
まさかと思いつつも、やってみたらなんと通った!
というわけで、以下、結論
- unityはバッチモードであろうと内部的にはGUIは起動されている
- そして、GUIが起動されるがゆえに "Missing Default Layout"バグは同じように起こる
- これが起きたかはログで確認可能で、UnityEngine.GUI.DoSetSkin あたりでnullで落ちているログがあればソレである
いやはや、ひどい目にあったもので、こうして共有しておく次第である。