当然可以!
在编辑模式下,您不能使用 SceneManager
,而必须使用 EditorSceneManager
。
首先,您需要迭代要使用的场景。
例如,可以在检查器中使用包含SceneAsset
列表的 public static
字段,其中您只需引用场景即可。
public static List<SceneAsset> Scenes = new List<SceneAsset>();
或者您可以通过脚本获取它们,例如仅使用添加到构建设置中的场景使用EditorBuildSettings.scenes
List<EditorBuildSettingsScene> Scenes = EditorBuildSettings.scenes;
对于这两种方法,您可以使用LinQ Select
(这基本上是一种foreach
循环的快捷方式)和AssetDatabase.GetAssetPath
获取场景路径列表,例如:
List<string> scenePaths = Scenes.Select(scene => AssetDatabase.GetAssetPath(scene)).ToList();
对于 EditorBuildSettingsScene,你也可以直接使用EditorBuildSettings.scenes
List<string> scenePaths = Scenes.Select(scene => scene.path).ToList();
现在您可以通过使用
EditorSceneManager.OpenScene
,
EditorSceneManager.SaveScene
和
EditorSceneManager.CloseScene
(如果需要,还有
AssetDatabase.SaveAssets)遍历它们并执行所需操作。请保留HTML标签。
foreach(string scenePath in scenePaths)
{
var currentScene = EditorSceneManager.OpenScene(scenePath);
EditorSceneManager.SaveScene(currentScene);
EditorSceneManager.CloseScene(currentScene, true);
}
AssetDatabase.SaveAssets();
在开始之前,您可能需要使用EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo
命令来保存当前打开的场景。
if(EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
{
}
else
{
}
为了最终启动这个方法,最简单的方法就是添加一个[MenuItem]
。
public static class Calculation
{
[MenuItem("YourMenu/RunCalculation")]
public static void RunCalculation()
{
}
}
这将在Unity编辑器的顶部菜单栏中添加一个名为
YourMenu
的新菜单,其中包含一个条目
RunCalculation
。
注意:由于使用了许多只存在于
UnityEditor
命名空间中的类型(例如
EditorSceneManager
),因此您应该将整个脚本放置在
Editor
文件夹中(这样它就会在最终构建中被忽略),或者使用预处理器。
#if UNITY_EDITOR
#endif
在构建中,代码也会被忽略。
请注意,我假设你到目前为止也是在编辑模式下进行计算的。如果此计算某处依赖于任何Start
或Awake
方法,则必须在运行计算之前从该编辑脚本手动调用它。