Unity的RuntimeInitializeOnLoadMethod属性初探

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

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的使用总结

目录
相关文章
|
编解码 程序员 atlas
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
1408 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
编解码 开发框架 Java
Unity 之 打包参数 -- Player面板属性详解
Unity Project Setting Player面板详解,看完这篇文章,彻底搞懂各个选项设置实际作用。
2015 0
Unity 之 打包参数 -- Player面板属性详解
|
5月前
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
104 0
|
Go 图形学 Android开发
Unity 之 自动设置导入资源属性选项(模型、图片、声音)
在项目开发中会经常性的更换、导入很多资源,而且对于资源的设置容易出现设置错误或者忘记设置的情况,下面的Code是用untyi自带的AssetPostprocessor功能把导入的资源根据一定的规则自动设置对应的格式选项,使用的时候也很方便,只需要把脚本...
2588 0
|
图形学
Unity中InitializeOnLoad属性的妙用
InitializeOnLoad 属性应用的对象是 静态构造函数,它可以保证在编辑器启动的时候调用此函数。根据这个特性,可以在编辑器中设置定期的回调(帧更新),来实现类似watchFile的功能。这里借助了EditorApplication类中的 update 委托,在编辑器运行时,它将每秒调用多次。
1201 0