繁体   English   中英

如何从所有场景列表中删除活动场景

[英]How to delete the active scene from all the scene list unity

我想制作一个场景管理器脚本并在触发器进入 2D 时随机更改场景。 但我不想加载活动场景。 我设法将所有场景放在列表中,但我不知道如何从列表中删除活动场景。 我使用这段代码:

    int sceneCount = SceneManager.sceneCountInBuildSettings;
    Debug.Log("sceneCount:  " + sceneCount);
    string[] scenes = new string[sceneCount];
    for (int i = 0; i < sceneCount; i++)
    {
        scenes[i] = System.IO.Path.GetFileNameWithoutExtension(SceneUtility.GetScenePathByBuildIndex(i));

        scenes[i].Remove(SceneManager.GetActiveScene().buildIndex);

        Debug.Log(scenes[i]);
    }

而不是添加所有场景然后删除,更好的方法是在将场景添加到数组之前,您可以检查索引是否相同:

if(i != SceneManager.GetActiveScene().buildIndex)
        {
            scenes[i] = System.IO.Path.GetFileNameWithoutExtension(SceneUtility.GetScenePathByBuildIndex(i));
        }

但是现在有一个小问题,该索引的数组元素是 null,您可以检查该元素是否为 null 并且不要实例化它,但是我们可能会得到一些更复杂的代码,它应该是......

使用List代替数组,一切都会更容易,总之 List 就像 arrays 但您不需要指定大小。

List<string> scenes = new List<string>();
    for (int i = 0; i < sceneCount; i++)
    {
        if(i != SceneManager.GetActiveScene().buildIndex)
        {
            scenes.Add(System.IO.Path.GetFileNameWithoutExtension(SceneUtility.GetScenePathByBuildIndex(i)));
        }
    }

最后,你想知道是否一切正常,所以我们访问 List 的每个元素:

//Acces each element of the list
    for(int i = 0; i < scenes.Count; i++)
    {
        Debug.Log(scenes[i]);
    }

您可以在此处阅读更多列表 class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM