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



我想制作一个场景管理器脚本,并在触发时随机更改场景,进入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与数组类似,但不需要指定大小。

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类的内容。

最新更新