首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Unity3D的构建设置中获取下一个场景的名称?

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

Stack Overflow用户
提问于 2016-11-30 21:14:22
回答 1查看 3.3K关注 0票数 1

所以,我想做的事情应该非常简单。我需要抓取下一个场景的名称(而不是加载),如构建设置中列出的那样。

我认为我有一个简单的解决方案,做这样的事情:

代码语言:javascript
复制
int currentIndex = SceneManager.GetActiveScene().buildIndex;
string nextSceneName = SceneManager.GetSceneAt(currentIndex + 1).name

但是很明显,"GetSceneAt“并不适用于构建设置中的场景,而是适用于SceneManager所拥有的某种内部列表。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-01 02:57:11

从团结5.5开始,如果您使用的是早期版本,请参见下面的内容。

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

然而..。它的文件提到:

该方法将返回一个有效的场景,如果一个场景已经添加到在给定的构建索引的构建设置,并且场景被加载。如果尚未加载,则SceneManager无法返回有效的场景。

但是并不是所有的东西都丢失了,因为还有SceneUtility.GetScenePathByBuildIndex(buildIndex),它不依赖于已经加载的场景。它返回一个相对于场景的项目路径,我们可以从中提取一个场景名称。

代码语言:javascript
复制
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和一些早期版本。

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

在阅读了您的问题之后,我为它创建了一个插件/资产,它是三个小脚本,它应该“只工作”,使用它实际上只是一行代码:

代码语言:javascript
复制
var buildSceneRecords = BuildScenes.Records;

这些记录包含编辑器生成设置中场景的名称、路径和索引。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40898310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档