使い方

メニューから「編集 > プロジェクト設定」 (Edit > Project Settings) を開き、「Editor」タブに切り替えて、「Enter Play Mode Setting」の項目を設定する。

  • 「Enter Play Mode Options」を有効にすると、スクリプトやシーンの読み込みを省略するため、再生モードの開始が劇的に高速となる。
  • スクリプトの実装によっては、上手く初期化されないケースがある。
    • 静的変数が初期化されない。
    • 静的イベントが初期化されない。
  • 必要に応じて、「Reload Domain」あるいは「Reload Scene」のオプションを有効にする。
設定
  • Enter Play Mode Options再生モード開始時の読み込みオプションを有効にする (デフォルト無効/※実験的機能)
    • Reload Domainスクリプトを再読み込みする (デフォルト無効)
    • Reload Sceneシーンを再読み込みする (デフォルト無効)

ドキュメント:

設定可能な再生開始時モード | Unity マニュアル [公式]

Domain Reload | Unity マニュアル [公式]

Reload Scene | Unity マニュアル [公式]

Reload Domain と Reload Scene の無効化の詳細 | Unity マニュアル [公式]

参考:

Enter Play Mode Options で Editor 再生開始を早くする | KAZUPON 研究室

Enter Play Mode Settings – エディタ再生開始前の待ち時間を最大90%も削減する | kan のメモ帳

Enter Play Mode Options を設定すると爆速になった | TAKOYAKING’s blog

Unity 2019.3 には高速にプレイモードを開始する実験機能が存在する | コガネブログ

ゲームを再生する時間を短くする Configurable Enter Play Mode とは | 宴

Enter Play Mode Options – ゲーム再生までの時間を短くする | タニスゲームス

驚愕の超速イテレーションデバッグ設定 | maruton

Unity 2019.3 で再生モードへの素早い切り替えが可能に | Unity Blog [公式]

Insanely fast enter to play mode – Unity Forum

Long time to enter play mode – Unity Forum

静的変数を初期化する

ドメインリロードを省略した場合、再生モードの開始時に静的変数が初期化されなくなるため、RuntimeInitializeOnLoadMethod 属性を付与した静的メソッドで明示的に初期化する。

public class Example : MonoBehaviour { static bool initialized = false; [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.SubsystemRegistration)] static void Init() { initialized = true; } }
Code language: C# (cs)
仕様
  • ゲームがランタイムで読み込まれる際に、一連の Awake メソッドの後に呼び出される。
  • 複数のメソッドに属性を付与した場合、実行順序は保証されない。

ドキュメント:

UnityEngine.RuntimeInitializeOnLoadMethodAttribute | Unity スクリプトリファレンス [公式]

エディターウィンドウ

カスタムエディターウィンドウで、再生モードの開始時に処理を適用するには、EditorApplication.playModeStateChanged イベントにハンドラを追加して、状態を判別して処理を実行する。

public class ExampleWindow : EditorWindow {   [MenuItem("Tools/Example Window")]     public static void OpenTestWindow()     {       GetWindow<ExampleWindow>("Example");     }     private void OnEnable()     {         EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;         EditorApplication.playModeStateChanged += OnPlayModeStateChanged;     }     private void OnDisable()     {         EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;     }     private void OnPlayModeStateChanged(PlayModeStateChange state)     {       if (state == PlayModeStateChange.EnteredPlayMode) { Debug.Log("Entered Play Mode in Example Window!"); }     } }
Code language: C# (cs)

ドキュメント:

EditorApplication.playModeStateChanged | Unity スクリプトリファレンス [公式]

PlayModeStateChange | Unity スクリプトリファレンス [公式]

参考:

How to tell when returned to editor mode from play mode? (EditorWindow) – Unity Forum

プライベート配列がヌルに初期化されない

現象:

praivate または internal が指定された配列、または、リストが null に初期化されない。

対処法:

  • 該当する配列、または、リストに NonSerialized 属性を付与する。

参考:

Just so you know, the generic workaround that WE found is… (Hyp-X) – Unity Forum

Unassigned private array field is not null when entering play mode with Reload Domain & Scene disabled – Unity Issue Tracker

Awake が呼び出されない

現象:

シーンの再読み込みを省略すると、クラスに ExecuteInEditMode 属性、または、ExecuteAlways 属性が指定されている場合、Awake メソッドが呼び出されなくなる。これは現在のところ、ドメインリロードを省略した場合の仕様となっている。(既知の問題)

代替
  • OnEnable
  • Start

参考:

Awake is no longer called for some MonoBehaviour types – Unity Forum

Small bug with Play Mode Options and Awake method on scripts that are marked EecuteInEditMode – Unity Forum

InitializeOnEnterPlayMode

※ Unity 2019.3 以降

エディターで再生モード開始時に呼び出したい静的メソッドに InitializeOnEnterPlayMode 属性を付与する。

public class Example : MonoBehaviour { #if UNITY_EDITOR     [InitializeOnEnterPlayMode]   static void Init(EnterPlayModeOptions options)   { Debug.Log("Entering Play Mode");     } #endif }
Code language: C# (cs)

ドキュメント:

UnityEditor.InitializeOnEnterPlayModeAttribute | Unity スクリプトリファレンス [公式]

参考:

InitializeOnEnterPlayMode 属性を指定した関数は再生時に呼び出される | コガネブログ

Play ボタン押したときにメソッドを実行したいときの新機能 | ハルシオンシステムの気ままBlog

Would you use such boilerplate to catch EnterPlaymode and do reset or other Editor work for game code? (Alexey Zakharov) – Unity Forum

初期化サイクル

ドキュメント:

Reload Domain と Reload Scene の無効化の詳細 | Unity マニュアル [公式]

参考:

When updating internal projects to use the feature I kept those statements in mind (Alexey Zakharov) – Unity Forum

フォーラム

Configurable Enter Play Mode – Unity Forum

API

UnityEngine.RuntimeInitializeOnLoadMethodAttribute | Unity スクリプトリファレンス [公式]

UnityEditor.InitializeOnEnterPlayModeAttribute | Unity スクリプトリファレンス [公式]

EditorApplication.playModeStateChanged | Unity スクリプトリファレンス [公式]

PlayModeStateChange | Unity スクリプトリファレンス [公式]

まとめ

ゲームを再生する時間を短くする Configurable Enter Play Mode とは | 宴

チュートリアル

開発効率アップ! Enter Play Mode オプション解説

Enter Play Mode Settings – ゲームの調整を楽にする

Enter Play Mode Menu Item

リポジトリ:

baba-s/Kogane.EnterPlayModeMenuItem: メニューから Enter Play Mode の有効/無効を変更できるエディタ拡張 – GitHub

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA