【Unity】気づかない間に… EditorLoopの負荷問題
Unityでゲームを作ってるとき、突然処理が遅くなって「あれ?なんで?」ってなること、ありませんか?今回は私が実際に体験した「EditorLoopの負荷が高すぎた原因」と、その対策についてお話しします。些細なミスや見落としが原因で、予想外の負荷がかかっていたことに気づいたエピソードをご紹介します。
プロファイラーでの調査中に発生した問題
ある日、Unityで新しいゲームを開発していたとき、処理が気になる箇所が出てきたので、プロファイラーを使って分析していました。すると、ものすごい処理落ちが発生し、テストプレイがほぼ不可能な状態に。あっ!やってんなぁと思わず自分で苦笑いをしてしまいました。私がやってた間抜けなミスを恥ずかしながらご紹介します。
プロファイラーの驚愕の結果
プロファイラーで調べてみると、「EditorLoop」の負荷が異常に高いことが判明しました。EditorLoopはUnityエディタ全体の動作を管理している部分です。具体的には、エディタ上でのインタラクションやエディタ拡張の処理、アセットのインポート・エクスポートなど、エディタ内で行われる全ての処理をループで管理しています。
ゲームのプレイモードと編集モードの間を切り替える際や、シーンビューでの操作、スクリプトのコンパイルなど、さまざまなタスクがこのEditorLoopによって制御されています。そのため、EditorLoopの負荷が高くなると、エディタ全体のパフォーマンスが低下し、開発効率が悪化してしまいます。
原因はシンプルだった:プロファイラーとエディタの同時使用
さらに調べてみたら、なんと原因はすごくシンプルなところにありました。私の開発環境では、Unityエディタと一緒にプロファイラーを開きっぱなしで、しかも頻繁にコンパイルしていたんです。これがEditorLoopにめちゃくちゃ負荷をかけてたんですね。
よく考えてみれば当たり前の話なんですが、「ゲーム」画面以外のウインドウも全部処理負荷がかかってるんです。これって意外と忘れがちなんですよね。特にハイスペックPCじゃない環境でゲーム制作してると、テストプレイ中にEditorLoopの負荷がえげつないことになります。
負荷の高いエディタウインドウ
プロファイラーやコンパイラー以外にも、Unityのエディタには負荷の高いウインドウがいくつかあります。これらのウインドウもテストプレイ中はできる限り最小化することをおすすめします。
Sceneビュー: ゲームのシーンをリアルタイムで表示するため、複雑なシーンでは処理負荷が高くなります。シーンビューの最小化や、必要に応じてワイヤーフレーム表示に切り替えると負荷を軽減できます。
Animatorウインドウ: キャラクターのアニメーションを管理するウインドウも、複数のアニメーションがあると負荷が高くなります。特にアニメーショントランジションが多い場合は注意が必要です。
Inspectorウインドウ: 多くのコンポーネントやプロパティを持つオブジェクトを選択すると、Inspectorウインドウの負荷が増します。テストプレイ中はシンプルなオブジェクトを選択するようにしましょう。
Hierarchyウインドウ: 大規模なシーンでは、Hierarchyウインドウの更新が遅くなることがあります。必要に応じてフィルタリングやグループ化を行い、負荷を軽減するようにしましょう。
Projectウインドウ: 多数のアセットを管理している場合、Projectウインドウも負荷が高くなることがあります。使用頻度の低いアセットはフォルダを閉じて表示を減らすことで、負荷を軽減できます。
対策と学んだこと
この問題を解決するために、いくつかの対策を講じました。
エディタウインドウの最小化: テストプレイ中は、エディタ系のウインドウをできる限り最小化して、処理負荷を軽減することが大切です。特にプロファイラーはバックグラウンドでも処理のレコードを残せるので、プレイ後にどこが負荷が重いのかを調べるとよいでしょう。
コンパイルの頻度を減らす: 必要な時だけコンパイルするようにして、無駄なコンパイルを避けることにしました。大幅なコード変更があったときだけコンパイルする設定に変更しました。
シーンの最適化: シーン内のオブジェクトを整理し、不要なオブジェクトやコンポーネントを削除しました。また、使用するアセットのサイズや数を見直し、全体的な負荷を軽減しました。
エディタ拡張の見直し: 不要なエディタ拡張やプラグインを無効化し、必要最低限の拡張のみを使用するようにしました。これにより、エディタの動作が軽くなりました。
ビジュアルスクリプティングと負荷の問題
最近では視覚的なノードエディタが増えていますよね。例えば、ビジュアルスクリプティング(旧Bolt)やArbor3などが人気です。特に私はArbor3信者なので、ライブでテストできるその便利さには惹かれます。しかし、それらはすべて高負荷です。開発環境が脆弱な場合、結構きつい場面がありますよね。
家にいるときはデスクトップのパソコンでそれなりのパフォーマンス環境で制作していますが、出先でノートパソコンで制作しているときにはスペックが落ちてしまい十分な環境とは言えないのです
高機能なツールを使いこなすためには、開発環境のパフォーマンスも重要だと痛感しています。
まとめ
Unityでゲームを開発する際、EditorLoopの負荷が高くなる原因はいろいろあります。でも、プロファイラーとエディタの同時使用が原因ってことは意外と知られていないんですよね。この経験を通じて、開発環境の見直しや最適化の重要性を改めて感じました。
もし、同じような問題に直面したら、まずはプロファイラーで原因を特定して、適切な対策を講じてみてください。快適な開発環境を維持して、素晴らしいゲームを作り上げましょう!