Unity | 编辑器运行时固定启动场景

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");
    }
}

更多源码,请扫码获取

更多源码,请扫码获取

猜你喜欢

转载自blog.csdn.net/u010799737/article/details/132086856