『コーラを飲むと骨が溶ける』って誰かが言ってた
社会人になって最初のころ、右も左も分からない私を根気よく指導してくれて信頼を寄せていた会社の先輩に「重要な話がある」と呼び出されたので行ってみると、ダイヤモンドのセールスマンを紹介されて危うく15年ローンを組まされそうになって以来、他人の話を安易に信じない、例えば『炭酸水を飲むとお腹が空く』みたいな似非科学話に対して「言われてみると、そんな気がしないでもない・・・」とかアホみたいに受け入れるのは止めようと自分を戒めるようになったのですが、やっぱり人間切羽詰ってくると藁にもすがると言うか、すがれるものなら何でもすがりたくなる様で、今回の記事はエラー原因がちっとも分からないけれどネットでそれっぽい話があったので試してみたら案外上手くいったよ、って話。
前回の続きから
前回の記事で、Unity2018.2からUnity2018.3へバージョンを上げたらコンソールにエラーが出たという話を書いたのですが、
そのエラーをアレコレで改修した後、Andorid機でテストしようとビルドしてみると・・・
「Building scene 4: Credit」の表示とともにビルドのプログレスバーが全く進まない。
最初は「バージョンアップした一発目のビルドだから時間が掛かるのかな?」とか根拠のない楽観論でビルドが終了するのを待っていたのですが、
一時間経過・・・
二時間経過・・・
三・・・
もうだめだ!待てない!⇒ビルドキャンセル
といわけで対処法を探りました。
止まっているわけではないらしい
例によって例のごとくGoogle先生に尋ねてみるとそれっぽい記事を紹介されました。
で、上記の記事によると「GI(Global Illumination)というのが異常に時間がかかり・・(中略)・・ビルドが止まっているのかと思うほど全然進まなくなります。」と書かれている。
GI(Global Illumination)とはライティングの機能で、シーン内のオブジェクトに対して光源からの反射光を考慮した光の様子を再現するという機能です。
例えば青い立方体に白い光を当てたらその反射光で周りが少し青くなる、みたいな状態を表現する時に使用されます。
この説明だけを聞くと、ビルドが止まったかのように進まない(進んでいるけどすごく遅い)のも分かるのですが、ここで疑問となるのは、止まってている(ように見える)scene 4: Creditには3Dオブジェクトが存在しない、という事です。
ええ、シーン名が「Credit」となっていることから分かると思いますが、当該のシーンはTextを表示するのみで光の影響を受けるような3Dオブジェクトは一つもありません。
こんな感じの画面。黒バックに白い文字が表示されるだけの画面です。
ないからこそ逆に・・・
このGI(Global Illumination)の設定はデフォルトでONとなっているので何もしていない場合は必ず適用されます。
GIが適用されるとビルド時に光の影響を計算してテクスチャに書き込む処理が動くのですが、3Dオブジェクトが何もない空間でライトだけ設定されている場合、光の影響範囲が無限に大きくなって計算に時間が掛かるのではないか?・・・と上記の記事を読んで全く根拠のない推測を立てる私。
90%ぐらいは"(原因が)そうであってくれ"という願望が占めているのですが、何はともあれ、藁にもすがる思いでGIの設定をOFFに変えました。
OFFにするにはMenu からWindow->Lighting を選ぶとLighting Window が開くので、
ここのRealtime LightingとMixed LightingのBaked Global Illuminationチェックを外します。
Unityのマニュアルを参考にするとMixed Lightingの設定をOFFにすれば良いだけの様な気もしますが、今回のシーンではそもそも光の影響は受けないのでどちらもチェックを外しました。
で、この状態でビルドを再実行すると・・・
ビルドが数分完了!!あ~、よかった。。。
一応解消された
上記の対応でビルドが進まない、という現象は解消されたましたが、そもそもUnity2018.2では同じ設定でもビルドは進んでいたので、これはUnity2018.3独特の現象なのかもしれません。
また、3DオブジェクトがないからGIに時間が掛かる、というのも私の勝手な推測なので正しいかどうか分かりません。
ただ、GIをONにするとビルドに時間が掛かるだけでなく、アプリサイズも大きくなるそうなので、見栄えが少し変わることに問題がなければ通常のシーンでも切ったほうがよいと思います。
といわけで、次回からはいよいよリリース間近の「Dull Things No Life」の紹介をしたいと思います。