UnityのWebGLビルドをしてテストプレイしたら、EdgeでのみCPU使用率が100%になる問題に直面しました。ChromeやFirefoxでは正常に動作していたため、原因がわからず困っていました。
結論として、ビルドターゲットの再設定が効果的でした。
この問題は特定の条件下(バージョン変更)でのみ起こるようなので、通常の開発で気にする必要は無さそうです。ここまで長かったので試行錯誤を記録しておきます……。
経緯
2023年8月に制作したゲーム『ラーメンライスは大罪』の軽微なバグを直した時の話です。
Unityエディタが重かったのを解消するため、試しにUnityのエディターのバージョンを変更してみました。その後原因が分かり、GPUドライバを更新することで解決しました。
修正自体はすぐ終わったのですが、アップデート後のゲームページを開いたところ、PCが唸り始めました。
EdgeでだけCPU利用率100%
タスクマネージャーを見たらCPU使用率が100%でした。未知の現象でした。
あわててChromeやFireFox、Operaなど複数のブラウザでテストしたところ、Edgeでだけ重くなることが分かりました。ビルドして実行(Edge)でも重かったので、投稿サイト側の問題ではなく、UnityとEdgeの問題のようです。
タイトルからゲーム全体がずっと重い状態でした。アップデート前はこのようなことは全くありませんでした。取り急ぎフレームレートを指定しても改善せず……。
前回からの変更点は軽微なバグ修正と、Unityのバージョン変更だけでした。
今のエディター(Unity2022)での更新は諦めて、試しにUnityの最新バージョン(6000.0.25f1)を使ってみたものの、結果は改善せず……。問題が悪化している気さえしました。
解凍フォールバックをオフ
ビルドの圧縮方法を変えるなど色々試してみました。結果、解凍フォールバックを無効にしたら改善しました。
初めてPLiCyにゲームを投稿した際、この解凍フォールバックをオンにしないとビルドされたゲームに黄色いエラーが表示されました。遊ぶことに支障はありませんでしたが、警告回避のためオンにしていました。
しかし今回はオフにしてもエラーは出なくなっていたし、他のゲームでは問題は確認できませんでした。つまり、問題はこのプロジェクトの解凍フォールバックとEdgeの組み合わせ特有の現象であることが分かりました。
その後しばらくビルド設定をいじって再現性があるか試したところ、解凍フォールバックをオンにしても問題は出ませんでした。直接的な問題は別だったようです。
直接的な原因
プロジェクト設定に不備があったようです。
Gitで確認したところ、ProjectSettingsが3か所、特にm_BuildTargetBatchingが変更されていました。
自分で変更した覚えはなかったため、ビルドターゲットの再設定が有効だったのだと思います。ふとした何かでビルドターゲットがWindows向けに切り替わってしまっていました。それを再びWebGL向けに変更したことで、なんらかの問題が解決したようです。
以前はバッチングについての項目が空だったのに、再設定後はちゃんとビルドターゲットと静的・動的バッチングの有無が記載されています。
バージョン変更によるプロジェクト設定の不整合が問題だったようです。これが最終的な原因だと思いました。解決!
念のためLibraryフォルダも削除しておくと安心です。
解凍フォールバックは?
今はエラーが出ないようなので、わざわざ解凍フォールバックをオンにする理由は無さそうです。
Edgeユーザーは全体の1割程度のようですが、対応するに越したことはありませんよね!
まとめ
結論としては、Unityプロジェクトのバージョン変更によりビルド関連データに不整合が生じ、それが解凍フォールバックを通じてEdgeでのみ問題を引き起こしたようです。
そして解決策としてはビルドターゲットの再設定が一番有効なのでは、という感じです。
終わってみればよく聞くタイプの解決策に落ち着きました。先人は偉大です。今後ブラウザごとに挙動が異なる問題があったら、ビルドターゲットの再設定をまず試したいと思います。
軽率にバージョン変更しないほうがいい、というのも今回の学びです。いろいろな反省と成長……。