所以,我想做的事情应该非常简单。我需要抓取下一个场景的名称(而不是加载),如构建设置中列出的那样。
我认为我有一个简单的解决方案,做这样的事情:
int currentIndex = SceneManager.GetActiveScene().buildIndex;
string nextSceneName = SceneManager.GetSceneAt(currentIndex + 1).name但是很明显,"GetSceneAt“并不适用于构建设置中的场景,而是适用于SceneManager所拥有的某种内部列表。
我所有的google搜索都会根据场景的特定命名顺序,或者在构建之前将场景列表导出到文件中(一个需要手动导出的列表)等等。我无法想象这么简单的问题需要这么复杂的解决方案,这就是我为什么要问自己的原因。
如何才能在构建设置中获取下一个场景的名称?
发布于 2016-12-01 02:57:11
从团结5.5开始,如果您使用的是早期版本,请参见下面的内容。
大多数人首先尝试的最简单的方法是使用SceneManager.GetSceneByBuildIndex(buildIndex),因为它返回具有name属性的Scene对象。
然而..。它的文件提到:
该方法将返回一个有效的场景,如果一个场景已经添加到在给定的构建索引的构建设置,并且场景被加载。如果尚未加载,则SceneManager无法返回有效的场景。
但是并不是所有的东西都丢失了,因为还有SceneUtility.GetScenePathByBuildIndex(buildIndex),它不依赖于已经加载的场景。它返回一个相对于场景的项目路径,我们可以从中提取一个场景名称。
public static class SceneUtilityEx
{
public static string GetNextSceneName()
{
var nextSceneIndex = SceneManager.GetActiveScene().buildIndex + 1;
if (nextSceneIndex < SceneManager.sceneCountInBuildSettings)
{
return GetSceneNameByBuildIndex(nextSceneIndex);
}
return string.Empty;
}
public static string GetSceneNameByBuildIndex(int buildIndex)
{
return GetSceneNameFromScenePath(SceneUtility.GetScenePathByBuildIndex(buildIndex));
}
private static string GetSceneNameFromScenePath(string scenePath)
{
// Unity's asset paths always use '/' as a path separator
var sceneNameStart = scenePath.LastIndexOf("/", StringComparison.Ordinal) + 1;
var sceneNameEnd = scenePath.LastIndexOf(".", StringComparison.Ordinal);
var sceneNameLength = sceneNameEnd - sceneNameStart;
return scenePath.Substring(sceneNameStart, sceneNameLength);
}
}编辑:由于历史原因,下面这一节只适用于Unity5.4和一些早期版本。
是的,不幸的是你是对的,但是.你很幸运!
在阅读了您的问题之后,我为它创建了一个插件/资产,它是三个小脚本,它应该“只工作”,使用它实际上只是一行代码:
var buildSceneRecords = BuildScenes.Records;这些记录包含编辑器生成设置中场景的名称、路径和索引。
你可以在这里找到它:https://github.com/sindrijo/unity3d-runtime-buildscenes
https://stackoverflow.com/questions/40898310
复制相似问题