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