Unity 比 Awake 更早被运行的函数....


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

1. 我们来看看他所处生命周期的位置:

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 比 Awake 更早被运行的函数...._第1张图片

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

public class ExampleClass : 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 比 Awake 更早被运行的函数...._第2张图片
3. 想必看到这里你就知道怎么用了吧,那赶紧用起来吧,骚年

4. 顺便附一张MonoBehaviour的生命周期图
Unity 比 Awake 更早被运行的函数...._第3张图片

5. 顺便在记录一下Unity提供的其他Attribute。如果你想搞点插件什么的,说不定用的上

注意: 在使用的时候"XXXXAttribute"的时候需要去除”Attribute“使用。
想知道为什么。希望这篇文章对你有用:https://blog.csdn.net/KiTok/article/details/90324325

属性名 功能
AddComponentMenu 导航栏菜单
ContextMenu 右键菜单
HeaderAttribute 为属性添加头描述
HideInInspector 可以让public变量在Inspector上隐藏,无法在Editor中进行编辑
MultilineAttribute 支持输入多行文本
RangeAttribute 限定输入值的范围
RequireComponent 组件依赖,使用该组件后自动添加依赖组件
RuntimeInitializeOnLoadMethodAttribute 上文说喽
SerializeField 强制对变量进行序列化,即使变量是private
SpaceAttribute 增加空位
TooltipAttribute 提示信息,当鼠标移到Inspector上时显示相应的提示
InitializeOnLoadAttribute 允许在Unity加载时初始化编辑器类,而不需要用户进行操作
InitializeOnLoadMethodAttribute Unity启动而无需用户操作,就可以在项目中运行一些编辑器脚本代码
MenuItem 导航栏的菜单项

你可能感兴趣的:(Unity)