はじめに
上記の公式の記事によると、ドメインのリロードをスキップすることで
高速でプレイモードに入れるようになる実験的な機能が
Unity 2019.3 には存在するとのことなので、触ってみました
概要
デフォルトでは、プレイモードに入るまでにこのくらい時間がかかる場合でも
Unity メニューの「Edit > Project Settings」から
「Editor」の「Enter Play Mode Options (Experimental)」をオンにすることで
このように高速でプレイモードに入ることができるようになります
注意点として、ドメインのリロードがスキップされてしまうので
using UnityEngine; public class Example : MonoBehaviour { private static int m_count = 0; private void Awake() { Debug.Log( ++m_count ); } }
例えば、上記のように static 変数を使用してる場合、
通常なら Unity を再生するたびに static 変数はリセットされますが、
「Enter Play Mode Options (Experimental)」をオンにした場合は
static 変数の値が初期化されずに残ってしまいます
using UnityEngine; public class Example : MonoBehaviour { private static int m_count = 0; [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.SubsystemRegistration )] private static void Init() { m_count = 0; } private void Awake() { Debug.Log( ++m_count ); } }
そのため、RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.SubsystemRegistration )
を使用して
Unity 再生前に static 変数の値を初期化する処理を書く必要があるとのことです
using UnityEngine; public class Example : MonoBehaviour { private void Awake() { Application.quitting += Quitting; } private static void Quitting() { } }
他にも、上記のようにイベントにコールバックを登録する場合も
using UnityEngine; public class Example : MonoBehaviour { [RuntimeInitializeOnLoadMethod] private static void Init() { Application.quitting -= Quitting; } private void Awake() { Application.quitting += Quitting; } private static void Quitting() { } }
RuntimeInitializeOnLoadMethod
を使用して
イベントからコールバックを解除する必要があるとのことです