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" );
}
}
结果为:
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");
}
}
结果为:
3. 想必看到这里你就知道怎么用了吧,那赶紧用起来吧,骚年
4. 顺便附一张MonoBehaviour的生命周期图
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 | 导航栏的菜单项 |