渋谷ほととぎす通信

エンジニア社長によるUnityとAIのブログ & エンジニアの生存戦略

死ぬほど重いUnityエディタを高速化する3つの方法

死ぬほど重いUnityエディタを高速化する3つの方法

こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Unityが遅くて我慢できない
  • Unityを早くする方法はない?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unity開発初期は快適だったけど、開発中盤からだんだんUnityエディタの操作が重くなってきますよね。

    なぜなら開発が進むにつれてUnityプロジェクトには 大量のアセットが追加されていくため です。アセットとはC#スクリプトやテクスチャといったゲームに必要なオブジェクト全般を指します。ゲームを完成させるためにはアセットの追加は必須ですし、追加を止めることはできません。

    つまりどんどんUnityの動作は重くなっていくわけです。

    そこで本記事ではUnity動作の低下を限りなく抑えるためのテクニックを3個紹介していきます。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    1.Unityの再生モードを爆速化するEnter Play Mode Settings

    最初にお届けするのはUnity高速化の定番中の定番 「Enter Play Mode Settings」 です。今回紹介するTipsの中でも最も高い効果を発揮する設定です。

    読むより見た方が早いので、次のオオバのポスト内の動画を見てみてください。

    Unityエディタ再生ボタンを押してから計測したゲーム実行までの時間です。通常8秒かかっていたところ、Enter Play Mode SettingsをONにしたことで2秒へ 75%高速化!!

    もちろんUnityプロジェクト内の状況、使用するパソコンによって結果は変わってきますが、Unityエディタの実行までの時間が 圧倒的に高速化 します。

    詳しくはこちらの記事で解説していますので、ぜひ確認してみてください。全Unityエンジニアに届けたい設定です。

    2.Assemly Definitionの設定

    次に紹介するのは Assembly Definitionの設定 です。Assembly Definitionとはあなたが書いたC#スクリプトがビルド時にまとまるファイルの単位です。通常ランタイムで使用するC#スクリプトは「Assembly-CSharp」というアセンブリファイルに固められます。

    しかしAssembly Definitionを設定することでアセンブリファイルを分けることができるのです。

    お悩みさん
    お悩みさん
    なぜアセンブリを分けることがUnity高速化につながるの?

    アセンブリを分けることでコンパイルの高速化につながります。なぜなら差分のないアセンブリはコンパイルが起きないためです。つまりアセンブリを分割することでコンパイルするC#のコード量が減りコンパイル時間が短縮されるというロジックです。

    Assembly Definitionは高速化だけではなくコードの依存関係構築にも利用される技術です。こちらの記事で詳しく解説しているのでぜひ読んでみてください。

    3.Unityエディタにホットリロードの導入

    Unityでゲーム開発する際はC#スクリプトを記述して機能を実装しますよね。C#のコードを少しでも修正したらUnityエディタではコンパイルが走り待機時間が生まれます。

    しかもこの待機時間は開発フェーズが後になればなるほど長くなるため、非常に困ります。

    実はスクリプト変更によるコンパイル時間をゼロにする裏技があります。それが 「ホットリロード」 です。

    ホットリロードとはUnityエディタでは再生モードのまま変更したC#コードが反映される仕組みです。つまりコンパイルするためにエディットモードに戻ることなく開発を継続することができるのです。

    導入方法は簡単で「Hot Reload」をAsset Storeからインポートするだけ。

    Hot Reload
    Hot Reloadを導入すると次のようなウィンドウが表示されます。

    死ぬほど重いUnityエディタを高速化する3つの方法_0
    「Start」ボタンを押すだけでホットリロードの準備は完了。

    死ぬほど重いUnityエディタを高速化する3つの方法_1
    上記のような画面になったらホットリロード状態が開始します。「Timeline」にはホットリロードでおきた処理が並ぶため、何が起きたのかを確認できます。

    ホットリロード状態になると、本当にC#コードを変更してもコンパイルが発生しなくなります。最初オオバも 「嘘だろ?」 って思いましたが本当でした。

    Hot Reloadの注意点

    超絶便利なHot Reloadにも注意点があります。

    それは 大幅なコード変更にコンパイルが必要 だということです。大幅なコードとあいまいな表現になってしまいますが、ある程度コードを書き換えたらコンパイルが必要だということを確認しています。

    この辺りのコード量は実際に使ってみないと感覚が掴めないかもしれません。

    Hot Reloadはクオリティアップに必須級のアセット

    とはいえHot Reloadはパラメーターをネチネチ調整してブラッシュアップするタイミングでは **絶大な効果を発揮** します。ゲーム開発はネチネチ調整したブラッシュアップの積み重ねでクオリティが大きく変わります。

    Hot Reloadの導入をするだけでブラッシュアップ時のコンパイル待機時間ストレスから解放されるなら積極的に入れたいアセットです。ちなみにオオバは個人開発のときHot Reloadを必ず導入しているアセットです。

    コンパイル時間に困っている方はぜひ検討してみてください。

    Hot Reload
    Hot Reload を使用すると、コンパイルせずにコードの変更を即座に適用できます。再生モード、編集モード、デバイス上で動作します。個人インディー開発者から大規模スタジオまで同様...
    詳しくはこちら
    Hot Reload

    ちなみにオオバはSRDebuggerという最強のデバッグアセットも必ず最初に導入します。

    SRDebuggerの教科書
    Unity最強のデバッグアセットSRDebuggerをイチから体系的に学べるコンテンツです。購入者はアフィリエイトできます。
    詳しくはこちら
    SRDebuggerの教科書

    【おまけ】運用で少しでもUnity作業の待機時間を短縮する方法

    ここからはUnityエディタの使い方を工夫して作業時間を確保する方法を紹介していきます。

    そもそもUnityエディタの起動が重いときってありませんか?例えば次のようなタイミングは重くなりがちです。

    • 新しいソースコードを取り込んだ時
    • 新しいアセットを取り込んだ時
    • Switch Platformした時

    つまり新規のアセットのインポートに時間は消費していきます。このインポート時間を少しでも回避するための方法を紹介していきます。

    なぜインポートに時間が取られるのか?

    アセットインポートで時間がかかるのは大きく3つ。

    アセットの種類処理内容特に時間がかかる原因
    画像(Texture, Sprite)フォーマット変換・圧縮・MipMap 生成解像度が高い、サイズが大きいと処理が激重
    3Dモデル(FBX, OBJ)リグ、アニメーション、マテリアルの処理ポリゴン数が多い、アニメーションが長いと時間がかかる
    オーディオ(WAV, MP3, OGG)圧縮(Vorbis, AAC)・サンプルレート変換長時間の音声データは特に時間がかかる

    これらのファイルが増えれば増えるほどアセットインポートの時間は伸びていきストレスが膨らんでいくのです。

    アセットが各プラットフォームに変換される仕組み

    Unityはアセットを各プラットフォーム毎に変換します。例えばテクスチャは次の図のように変換します。

    死ぬほど重いUnityエディタを高速化する3つの方法_2

    • iOSの場合 : ASTCへ
    • Androidの場合 : ASTC(またはETC2)へ
    • PC版の場合 : DX5へ

    このように各プラットフォームごとにファイル形式は異なります。この変換処理に時間がかかるのです。一度変換が終われば Unity内部で保持(キャッシュ)される ため2度目以降に待たされることはありません。

    しかしプラットフォームを切り替えると、再び画像変換処理が始ってしまうわけです。特にゲーム開発では大量の画像を扱うため、「画像の枚数」によってUnityエディタの起動を重くする原因となってしまいます。

    こちらの記事ではプラットフォーム切り替え(Switch Platform)をいかに短縮化するかについて考察しています。複数のプラットフォームに対して同時開発している方はぜひ読んで効率化してみてください。

    まとめ

    本記事では死ぬほど重くなるUnity作業を少しでも高速化させるための方法を紹介してきました。

    記事の内容を簡単にまとめます。

    死ぬほど重いUnity作業を軽くする方法まとめ

    ①Enter Play Mode Settingの有効化

    ②Assembly Definitionの設定

    ③ホットリロードの導入

    ④Switch Platformの短縮化

    以上のテクニックを使って作業時間の捻出を試みてみました。

    重いUnityで作業するのってすごくストレスですよね。せっかく良いところまでゲームを作れたのにUnityが重いせいでやる気が無くなってしまってはもったいないです。

    Unityエディタの環境を整備して少しでも快適にゲーム開発できるように本記事を参考にしてみてください。

    この記事があなたのゲーム開発に役立ったら嬉しいです。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいUnityライフをお過ごしください。

    オススメ記事
    検証環境
    • Unity6000.0.32f1