通过RuntimeInitializeOnLoadMethodAttribute属性,可以在游戏启动时自动执行没有挂载到GameObject上的脚本。
这样在做一些插件的时候会比较方便,不需要用户手动去添加脚本,只要启动游戏就能直接自动执行。
// Create a non-MonoBehaviour class which displays
// messages when a game is loaded.
using UnityEngine;
class MyClass
{
[RuntimeInitializeOnLoadMethod]
static void OnRuntimeMethodLoad()
{
new GameObject("Test");
}
}
创建上面的代码,场景中不需要做任何操作。当点击运行的时候,场景里会自动出现一个名为Test的GameObject。
它还有下面四个参数
AfterSceneLoad 当场景加载完成后调用
BeforeSceneLoad 场景加载之前调用
AfterAssembliesLoaded 当多有程序集加载完毕后,预加载资源初始化好之后回调。Callback when all assemblies are loaded and preloaded assets are initialized.
BeforeSplashScreen Splash Screen显示之前调用。Immediately before the splash screen is shown.
SubsystemRegistration 子系统注册回调
示例
// Demonstration of RuntimeInitializeOnLoadMethod and the argument it can take.
using UnityEngine;
class MyClass
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void OnBeforeSceneLoadRuntimeMethod()
{
Debug.Log("第一个场景加载前");
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void OnAfterSceneLoadRuntimeMethod()
{
Debug.Log("第一个场景加载后");
}
[RuntimeInitializeOnLoadMethod]
static void OnRuntimeMethodLoad()
{
Debug.Log("第一个场景加载后");
}
}
注意当有多个使用同一个参数的回调时,回调的顺序是不确定的。