はじめに
using UnityEngine; public class Example : MonoBehaviour { [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )] private static void Init() { Debug.Log( "ピカチュウ" ); } }
ゲーム開始時に関数を呼び出してくれる RuntimeInitializeOnLoadMethod 属性の
引数に渡せる列挙型の種類が増えていました
Unity 2019.1 から追加されたもの
https://docs.unity3d.com/2019.1/Documentation/ScriptReference/RuntimeInitializeLoadType.html
- BeforeSplashScreen
- スプラッシュスクリーンの前に呼び出される
- AfterAssembliesLoaded
- すべてのロードされたアセットが初期化された後に呼び出される
using UnityEngine; public class Example : MonoBehaviour { [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSplashScreen )] private static void InitBeforeSplashScreen() { Debug.Log( "スプラッシュスクリーンの前に呼び出される" ); } [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterAssembliesLoaded )] private static void InitAfterAssembliesLoaded() { Debug.Log( "すべてのロードされたアセットが初期化された後に呼び出される" ); } }
Unity 2019.2 から追加されたもの
https://docs.unity3d.com/2019.2/Documentation/ScriptReference/RuntimeInitializeLoadType.html
- SubsystemRegistration
- サブシステムの登録時に呼び出される
using UnityEngine; public class Example : MonoBehaviour { [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.SubsystemRegistration )] private static void InitSubsystemRegistration() { Debug.Log( "サブシステムの登録時に呼び出される" ); } }
呼び出される順番の検証
検証用スクリプト
using UnityEngine; public class Example : MonoBehaviour { [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )] private static void InitBeforeSceneLoad() { Debug.Log( "BeforeSceneLoad" ); } [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterSceneLoad )] private static void InitAfterSceneLoad() { Debug.Log( "AfterSceneLoad" ); } [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterAssembliesLoaded )] private static void InitAfterAssembliesLoaded() { Debug.Log( "AfterAssembliesLoaded" ); } [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSplashScreen )] private static void InitBeforeSplashScreen() { Debug.Log( "BeforeSplashScreen" ); } [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.SubsystemRegistration )] private static void InitSubsystemRegistration() { Debug.Log( "SubsystemRegistration" ); } }
Unity エディタ上の場合
AfterAssembliesLoaded と BeforeSplashScreen は呼び出されない
PC Standalone ビルドの場合
以下の順番で呼び出される
- SubsystemRegistration
- AfterAssembliesLoaded
- BeforeSplashScreen
- BeforeSceneLoad
- AfterSceneLoad