Unity RuntimeInitializeOnLoadMethod
使用[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]属性,可以在不挂载到任何游戏对象上的情况下在程序运行时执行此方法,方便在在程序初始化前做一些额外的初始化工作。
类似功能的有InitializeOnLoad(最先执行)、InitializeOnLoadMethod(第二执行)、RuntimeInitializeOnLoadMethod,前两个用在编辑器,第三个用在运行时,用法如下:
[InitializeOnLoad]
public class InitializeOnLoadTest
{
/// <summary>
/// 第一次打开 Unity 编辑器运行一次,脚本编译完成后运行一次,每次进入 Play 模式都运行一次。
/// </summary>
static InitializeOnLoadTest()
{
Debug.Log("InitializeOnLoad");
}
}
/// <summary>
/// 第一次打开 Unity 编辑器运行一次,脚本编译完成后运行一次,每次进入 Play 模式都运行一次。
/// </summary>
[InitializeOnLoadMethod]
private static void InitOnLoad1()
{
Debug.Log("InitializeOnLoadMethod");
}
/// <summary>
/// 在每次进入 Play 模式时运行一次,还可以通过参数确定在加载场景之前还是之后调用方法。
/// </summary>
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
public static void Init()
{
Instantiate(Resources.Load<GameObject>("AppQuit"));
}
RuntimeInitializeLoadType更多参数如下所示:
AfterSceneLoad:在场景加载之后执行。
BeforeSceneLoad:在场景加载之前执行。
AfterAssembliesLoaded:所有程序集加载完成并且预加载的资源初始化后执行。
BeforeSplashScreen:在启动画面显示之前执行。
SubsystemRegistration:用于子系统(如图形、音频等)注册的回调。