2024年04月的文章

Unity RuntimeInitializeOnLoadMethod

0 条评论 Unity 无标签 帅木
使用[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:用于子系统(如图形、音频等)注册的回调。