很多插件以及工具类,都会有一个初始化函数,需要在项目启动时手动调用,比较麻烦也提高了代码耦合性,Unity5.0以上的版本,针对这种情况,提供了新的特性RuntimeInitializeOnLoadMethodAttribute帮助自动初始化。
声明方式
特性共有六种参数声明方式,如下:
// 场景加载完毕调用 无参默认缺省值为AfterSceneLoad
[RuntimeInitializeOnLoadMethod]
// 场景加载完毕调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
// 场景加载前调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
// 所有程序集被加载和预加载资产被初始化后调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
// 启动画面显示之前调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
// 子系统注册回调
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
示例
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void AfterSceneRuntimeOnLoadMethod()
{
// 场景加载完毕后执行
print("AfterSceneRuntimeOnLoadMethod");
}
[RuntimeInitializeOnLoadMethod]
static void RuntimeOnLoadMethod()
{
// 场景加载完毕后执行(缺省值)
print("RuntimeOnLoadMethod");
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void BeforeSceneRuntimeOnLoadMethod()
{
// 场景加载前执行
print("BeforeSceneRuntimeOnLoadMethod");
}
Tip
- Unity5.0以上的版本才具有此特性
- 声明的函数必须是静态的,加上static关键字,由此引申出的用法如下:
- 项目入口函数使用该声明自动调用
- 工具类中处理与类对象无关的初始化函数用此声明,与类对象相关的初始化逻辑写在构造函数中
- 函数的执行顺序如下:
- 全局:SubsystemRegistration >> AfterAssembliesLoaded >> BeforeSplashScreen >> BeforeSceneLoad >> Awake >> Enable >> AfterSceneLoad >> Start
- 同类同声明:按照定义顺序执行
- 不同类同声明:无法确定具体顺序