Unity的RuntimeInitializeOnLoadMethod属性初探

(35) 2024-04-13 21:01:01

Unity的RuntimeInitializeOnLoadMethod属性初探

Unity 5.0开始增加了RuntimeInitializeOnLoadMethodAttribute,这样就很方便在游戏初始化之前做一些额外的初始化工作,比如:Bulgy参数设置、SDK初始等工作。

 

先来看一下它的生命周期

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第1张

sing UnityEngine;

public class ExampleClass : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log( "Awake" );
    }

    private void OnEnable()
    {
        Debug.Log( "OnEnable" );
    }

    private void Start()
    {
        Debug.Log( "Start" );
    }

    [RuntimeInitializeOnLoadMethod]
    private static void OnRuntimeMethodLoad()
    {
        Debug.Log( "RuntimeInitializeOnLoadMethod" );
    }
}

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第1张

输出结果

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第3张

 

而它还有两个属性:RuntimeInitializeLoadType.BeforeSceneLoad  | RuntimeInitializeLoadType.AfterSceneLoad

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第1张

using UnityEngine;

public class InitTest  : MonoBehaviour
{
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    static void OnBeforeSceneLoadRuntimeMethod ()
    {
        Debug.Log("Before scene loaded");
    }

    void Awake()
    {
        Debug.Log("Awake");
    }
    void OnEnable()
    {
        Debug.Log("OnEnable");
    }

    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
    static void OnAfterSceneLoadRuntimeMethod()
    {
        Debug.Log("After scene loaded");
    }

    [RuntimeInitializeOnLoadMethod]
    static void OnRuntimeMethodLoad()
    {
        Debug.Log("RuntimeMethodLoad: After scene loaded");
    }

    void Start()
    {
        Debug.Log("Start");
    }

}

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第1张

输出结果

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第6张

 

Before –> Awake –> OnEnable –> After –> RuntimeMethodLoad –> Start。

 

附一张脚本的生命周期图(来源:官方网站)

Unity的RuntimeInitializeOnLoadMethod属性初探 (https://mushiming.com/)  第7张

 

 

Unity中提供的Attribute有很多,RuntimeInitializeOnLoadMethodAttribute只是其中的一种。如果自己写程序扩展编辑器的功能,就需要了解这些属性。常用的有:

1、AddComponentMenu 导航栏菜单

2、ContextMenu 右键菜单

3、HeaderAttribute

4、HideInInspector 可以让public变量在Inspector上隐藏,无法在Editor中进行编辑

5、MultilineAttribute 支持输入多行文本

6、RangeAttribute 限定输入值的范围

7、RequireComponent 组件依赖,使用该组件后自动添加依赖组件

8、RuntimeInitializeOnLoadMethodAttribute

9、SerializeField 强制对变量进行序列化,即使变量是private

10、SpaceAttribute 增加空位

11、TooltipAttribute 提示信息,当鼠标移到Inspector上时显示相应的提示

12、InitializeOnLoadAttribute

13、InitializeOnLoadMethodAttribute

14、MenuItem 导航栏的菜单项

 

THE END

发表回复