Unity的RuntimeInitializeOnLoadMethod属性初探

  1. 云栖社区>
  2. 博客>
  3. 正文

Unity的RuntimeInitializeOnLoadMethod属性初探

meteoric 2017-09-27 15:49:00 浏览954
展开阅读全文

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

 

先来看一下它的生命周期

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" );
    }
}

输出结果

image

 

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

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");
    }

}

输出结果

image

 

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

 

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

KSCXJkAAAAASUVORK5CYII=

 

 

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 导航栏的菜单项

 

更多属性及详情介绍,可以参考:Unity教程之-Unity Attribute的使用总结

网友评论

登录后评论
0/500
评论
meteoric
+ 关注