おま環かもしれませんが一応メモ。
症状
- Windows版Unity2018.4.26f1でコマンドラインからWebGLビルドを行おうとしたが、ビルドが終わった後にUnityを閉じようとすると正常終了せずにハングする。
- ログを確認すると
Cleanup mono
を最後にフリーズ。 - なお、2018.4.26f1以外で5.6.7、2017.4.40、2019.4.9、2020.1.2でも同じプロジェクトをビルドしたがそちらは問題なし。
- また、WebGL以外にもStandaloneWindows、StandaloneWindows64、WSAPlayer、AndroidのMono/IL2CPPビルドをまとめて行っているが、WebGLのみ一旦削除してビルドしてみたら正常終了した。
- 普通にUnityを起動し、メニュー経由でビルドメソッド呼び出しても、ビルド終わった後にUnity閉じようとしても正常終了しない。
- ログを確認すると
- Jenkinsなどで自動化していると終了して戻ってこないので永遠に終わらず、タスクマネージャーから強制終了する必要がある。
(たとえビルドそのものが成功していても強制終了するとJenkins上では失敗扱いになってしまう)
という症状。
コマンド呼び出し
コマンドは以下のような感じで呼び出し。
"Unity2018.4.26f1のexeのパス" -batchmode -quit -stackTraceLogType None -username "ユーザー名" -password "パスワード" -projectPath "プロジェクトパス" -executeMethod バッチビルドで呼び出すメソッド名 -logFile "出力するログのパス"
症状にも書いた通りUnityのメニューから呼び出してもUnityが正常終了しなかったのでコマンドラインからの実行は関係なく、WebGLビルドがトリガーになっていると考えられる。
Issues
IssuesにもUnity5.4の頃に似たような要件で登録されている。
https://issuetracker.unity3d.com/issues/editor-freeze-on-cleanup-mono-while-closing
しかし理由の説明なしにWon’t Fixにされて長年放置されている模様。
(コメント見ても最近のUnityでも発生していることは明らかだがWon’t Fix。しかもWon’t Fixの場合は投票もできない)
Answers
Unity Answersにも同様の書き込みがある。
https://answers.unity.com/questions/947123/why-does-unity-keep-hanging-when-run-through-the-c.html
終了前にAssetDatabase.Refresh()
を呼び出したら直った書き込みもあるがこちらでは効果なし。
回避策
回避策というほどのものではないが、Macも所有しておりMac/iOS向けビルドはそちらで行うようにしているので、WebGLビルドもMacで行うようにしてひとまず回避した。
Unityのアセット販売中!
ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。
RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。