在Unity3D的构建设置中获取下一个场景的名称?

And*_*rio 1 c# unity-game-engine unity5

所以,我想做的事情似乎应该非常简单.我需要获取下一个场景的名称(不加载它),如构建设置中所列.

做以下事情我认为我有一个简单的解决方案:

int currentIndex = SceneManager.GetActiveScene().buildIndex;
string nextSceneName = SceneManager.GetSceneAt(currentIndex + 1).name
Run Code Online (Sandbox Code Playgroud)

但显然"GetSceneAt"不适用于构建设置中的场景,而是适用于SceneManager所具有的某种内部列表.

我的所有谷歌搜索都会根据场景的特定命名顺序显示解决方案,或者在构建之前将场景列表导出到文件(手动需要导出的列表)等等.我无法想象这样一个简单的问题需要这么复杂的解决方案,这就是我要求自己的原因.

如何在构建设置中获取下一个场景的名称?

Sin*_*son 6

从Unity 5.5开始,这应该可行,如果您使用的是早期版本,请参见下文.

大多数人首先尝试的最直接的方法是使用,SceneManager.GetSceneByBuildIndex(buildIndex)因为它返回一个Scene具有name属性的对象.

但是......它的文档提到:

如果已将场景添加到给定构建索引的构建设置并且场景已加载,则此方法将返回有效场景.如果尚未加载,则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);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:由于历史原因,包含以下部分,它仅适用于Unity 5.4和某些早期版本.

是的,不幸的是你是对的,但是......你很幸运!

我在阅读完你的问题之后创建了一个插件/资产,它是三个小脚本,它应该"正常工作"并且使用它只是一行代码:

var buildSceneRecords = BuildScenes.Records;
Run Code Online (Sandbox Code Playgroud)

记录包含编辑器构建设置中场景的名称,路径和索引.

你可以在这里得到它:https://github.com/sindrijo/unity3d-runtime-buildscenes