前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity的RuntimeInitializeOnLoadMethod属性初探

Unity的RuntimeInitializeOnLoadMethod属性初探

作者头像
meteoric
发布2018-11-20 11:06:27
1.7K0
发布2018-11-20 11:06:27
举报
文章被收录于专栏:游戏杂谈游戏杂谈

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

先来看一下它的生命周期

代码语言:javascript
复制
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
image

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

代码语言:javascript
复制
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
image

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档