我需要使用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的场景加载/卸载过程,同时构建prod应用程序。我需要避免这种情况,因为它可能导致只在测试场景中使用的传输资产。
发布于 2020-12-02 10:12:48
EditorSceneManager
继承自SceneManager
,这就是为什么它提供了afaik所做的相同的方法LoadScene
,这意味着EditorSceneManager
不存在覆盖或类似的情况。
但是,它提供了可以而且应该用于编辑器特定内容的其他方法。
您可以使用LoadSceneInPlayMode
此方法允许您在编辑器()的播放模式下加载场景,而无需将场景包括在构建设置场景列表中。
UnityEditor.SceneManagement.EditorSceneManager.LoadSceneInPlayMode(sceneName);
Note:该参数名为path
,而不是sceneName
,原因是;)
您必须提供路径,因为它存储在Scene.path
中。
返回场景的相对路径。喜欢:"Assets/MyScenes/MyScene.unity"
发布于 2020-12-02 09:55:25
你应该写一个
using UnityEngine.SceneManagement;
然后你就可以用
SceneManager.LoadScene(sceneName);
应该是这样的
https://stackoverflow.com/questions/65105419
复制相似问题