【Unity】エディターで再生の始まりの高速化(ビルド時間を大幅削減)

2024年3月11日

デフォルトでは、再生するときにスクリプトの初期化が行われますが、この手順を省略することで再生開始までの時間を短くすることができます
これにより、デバックの効率化と高速化が期待できます

エディターで再生モードに入ると、Unity はビルドと同じようにエディターでプロジェクトを開始するために 2 つの重要なアクションを実行します。

  • スクリプトの状態をリセットします。“Reload Domain ” (ドメインの再ロード) とも呼ばれます。
  • シーンを再ロードします。

これら 2 つのアクションの実行には時間がかかり、スクリプトやシーンが複雑になるほど時間がかかります。

ゲームやアプリケーションを開発するとき、すぐに再生モードに開始/終了できる機能は重要な要素です。再生モードの開始と終了をすばやくできるほど、変更とそのテストの実行を短時間でできます。

高速化変更

一部の設定を変更することで高速化モードとすることができます

Project Settings…(プロジェクトセッティング)

サンプルはMacですが、Windows版でも同じです
EditメニューからProject Settings…を選択します

Enter Play Mode SettingsのEnter Play Mode Options にチェックを入れ、Reload Domainのチェックを外します

Reload Sceneは再生の度にシーンのロードを行うかの設定です(Checkしておきます)

変更で影響を受けること

static変数を使っている場合、停止後の初期化がなされません

次のように対応することで初期化しておきます

static int count;

// 再生開始時に初期化
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void Setup()
{
    // static 変数の初期化(0に初期化したい場合)
    count = 0;
}

自作のスクリプト以外(インポートされたアセット)で対応していないものは使えません
Unity社では、アセット作者が対応することを推奨しています

この辺りの制約がありますが、うまく使って開発時短に結びつけましょう

Staticの初期化がなされない様子の確認

テスト用シーン構成

スクリプト

変数aは、static変数です
初期値に10が代入されているので、Startメソッドでは、11が表示されることになります

using UnityEngine;

public class Test : MonoBehaviour
{
    static int a = 10;

    void Start()
    {
        a++;
        Debug.Log(a);
    }
}

高速化しない場合

最初にUnityをインストールしたすぐの状態(デフォルト)の動作を見てみましょう

再生の様子

再生するたびにスクリプトの初期化が行われています

結果の表示

2回実行していますが、2回とも11と表示されます
つまり、起動ごとに初期化されているのがわかります

11

実行するたびにReloading Domainが実行されます

高速化設定後

次に高速化設定変更後の様子をみてみましょう

再生の様子

再生するたびのスクリプトの初期化は行われていませんね(初期化のWindowが表示されていません)

結果の表示

実行する度にコンソールの表示が1づつ増えています
初期値がなされていないことが確認できました

11
12
13
14

参考

Unity,便利機能

Posted by hidepon