1 简介
在多场景游戏的开发过程中,通常需要按照特定的顺序启动场景,以完成一些初始化工作。因此当我们想要在编辑器中运行某个中间场景时,必须先切换到第一个场景。这样的操作不仅繁琐,而且影响开发效率。利用 RuntimeInitializeOnLoadMethod 属性,可以帮助我们在编辑器运行时加载指定场景,即固定启动场景
2 解决方案
2.1 函数释义
RuntimeInitializeOnLoadMethod 属性允许在游戏启动时自动执行被该属性标记的「静态」方法。其参数类型为 RuntimeInitializeLoadType,表示该静态方法的加载时机,具体类型如下:
加载时机对应的生命周期调用顺序为: BeforeSceneLoad –> Awake –> OnEnable –> AfterSceneLoad –> Start
关于函数及其参数介绍,可以查阅官方文档
函数说明: 「https://docs.unity.cn/cn/2019.4/ScriptReference/RuntimeInitializeOnLoadMethodAttribute-ctor.html」
参数说明: 「https://docs.unity.cn/cn/2019.4/ScriptReference/RuntimeInitializeLoadType.html」
2.2 使用方法
我们需要在游戏启动时加载指定场景,所以选择 BeforeSceneLoad 类型。然后在函数中通过 SceneManager.LoadScene() 加载指定场景,这样每次运行时,都会从当前场景跳转到指定场景。该「静态」方法可以放在任何类型的脚本文件中,且无论是在 Editor 目录之内还是之外,都可以正确执行
当然首先要确保跳转的场景在编辑器的 Build Settings 中
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Initialize()
{
SceneManager.LoadScene("SceneName");
}
3 扩展方案
上面的方法可以确保我们从编辑器中的任何场景启动时,都会跳转到指定场景。但项目中除了发布时的正式场景外,还会有很多测试场景。当运行测试场景时,并不期望跳转到首场景,可以使用 SceneManager.GetActiveScene() 获取当前活动场景后,根据其 name 来判断是否需要跳转首场景
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Initialize()
{
Scene scene = SceneManager.GetActiveScene();
if (!scene.name.Equals("SceneName"))
{
SceneManager.LoadScene("SceneName");
}
}
❝更多源码,请扫码获取
❞