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

时间:2020-04-14 19:24:30

标签: c# unity3d

我想制作一个场景管理器脚本,并在触发时随机更改场景,输入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]);
    }

1 个答案:

答案 0 :(得分:0)

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

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

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

使用 List 代替数组将使一切变得更容易,摘要列表类似于数组,但是您无需指定大小。

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)));
        }
    }

最后,您想知道一切正常,所以我们访问列表的每个元素:

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

您可以阅读更多的List class here