【Unity】 Enter Play Mode Settings について

とある日にPlayerSettingsのEditorの中をみると Enter Play Mode Settings という項目があった

f:id:toshizabeth:20201030213954p:plain

(現環境は Unity2020 1.11f1 )


公式

docs.unity3d.com

設定できる項目は

Enter Play Mode Options: 有効無効きりかえ
- Reload Domain : スクリプトの状態をリロードするか
- Reload Scene : シーンの状態をリロードするか

そもそも Enter Play Mode とは、Unityの再生ボタンを押したときのこと。
この機能をざっくりいうと 「再生までにかかる時間を短縮しましょう」 というオプション。

ゲームによってはデバッグ中に何度も「再生→停止」のイテレーションを回すことがあると思います。
巨大なプロジェクトになるとすぐ再生しないことにイライラしているのもしばしば...

この機能をONにしておくとその時間が短縮されるのでイテレーション回す速度が向上されます。(いいね!)



Domain Reload


docs.unity3d.com

デフォルトでは有効。
プレイモードに入るとすべてが初期化された状態になる。
注意点として static変数の初期化がされないこと
正しくリセットされるようにするためにはRuntimeInitializeOnLoadMethod Attributeを利用して再生時に明示的に初期化する特殊な記述が必要になるとのことです

using UnityEngine;

public class StaticCounterExampleFixed : MonoBehaviour
{
    static int counter = 0;

    // 自分で初期化する
     [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
    static void Init()
    {
            Debug.Log("Counter reset.");
            counter = 0;   
    }

    // Update is called once per frame
    void Update()
    {
            if (Input.GetButtonDown("Jump"))
            {
                counter++;
                Debug.Log("Counter: " + counter);
            }
    }
} 


あと、無効にしていても普通にスクリプトを編集すると再読み込みが走ります(そらそうだ)
つまりスクリプトを編集せずに何度もプレイサイクルを繰り返したい場合にめっちゃ便利


Scece Reload


docs.unity3d.com

デフォルトでは有効。 プレイモードに入るとシーンを一度完全リセットして再度シーンをリロードする。
シーンが複雑で巨大になると読み込み時間がかかるようになる

無効にすることでこの時間が短縮される。
完全読み込み直しではなくシーンで変更されたものをもとに戻すことをやるだけになるので高速化につながる


使ってみた感想としては.. 起動めちゃくちゃ早くなる!

再生ボタンを押すと起動までに5秒ほどかかっていたが1秒もかからなくなった...


static変数の初期化漏れ等の副作用には留意しておく必要があるがそれを考慮しても使っていきたい機能だと感じました。