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" );
}
}
输出结果
而它还有两个属性: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");
}
}
输出结果
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的使用总结