Как удалить активную сцену из всего списка сцен единства - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу сделать сценарий менеджера сцен и случайным образом изменить сцену при входе в 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 голосов
/ 14 апреля 2020

Вместо добавления всех сцен и последующего удаления, лучшим подходом было бы, чтобы перед добавлением сцены в массив вы могли проверить, совпадает ли индекс:

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

Подробнее о классе списка можно прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...