Warm tip: This article is reproduced from serverfault.com, please click

c#-在播放模式下使用SceneManager的EditorSceneManager

(c# - EditorSceneManager using SceneManager in Play mode test)

发布于 2020-12-02 09:33:28

我需要使用EditorSceneManager加载场景以进行播放模式单元测试。我需要使用此场景而不是SceneManager.Load,因为我无法在“构建”设置中使用场景。有关EditorSceneManager的文档很清楚,它可以满足我的需求。

    protected void LoadScene(string sceneName, Action onComplete)
    {
        if (string.IsNullOrEmpty(sceneName)) { Debug.LogError("Missing scene name"); return;}
        UnityEditor.SceneManagement.EditorSceneManager.LoadScene(sceneName);
        //...
    }

我收到错误消息,认为场景不在构建设置中,就像调用了SceneManager.LoadScene而不是编辑器版本一样。

编译器还建议简化为以下我不想使用的内容:

 UnityEngine.SceneManagement.SceneManager.LoadScene(sceneName);

尽管我没有可能混淆代码的指令:

using System;
using System.Collections;
using UnityEditor;
using UnityEngine;

我正在使用带有IPrebuildSetup,IPostBuildCleanup的辅助解决方案,以通过AssetDatabase和EditorBuildSettingsScene添加/删除场景,并且可以正常工作。但是,在构建产品应用时,它还会在Jenkins中运行场景加载/卸载过程。我需要避免这种情况,因为这可能会导致仅在测试场景中使用的资产运输。

Questioner
fafase
Viewed
0
derHugo 2020-12-02 20:14:43

EditorSceneManager所继承SceneManager,这就是为什么它提供了相同的方法,LoadScene其中AFAIK做同样的事情,这意味着没有覆盖或类似这样的东西EditorSceneManager

但是,它提供了你可以并且应该用于编辑器特定内容的其他方法。

你可以使用 LoadSceneInPlayMode

此方法允许你在编辑器的播放模式下加载场景,而无需将该场景包含在“构建设置场景”列表中。

UnityEditor.SceneManagement.EditorSceneManager.LoadSceneInPlayMode(sceneName);

注意:调用该参数path不是sceneName出于某种原因;)

你必须提供存储在其中的路径 Scene.path

返回场景的相对路径。像:“资产/MyScenes/MyScene.unity”