Не удалось загрузить сцену, поскольку она не была добавлена в настройки сборки

#c# #unity3d

Вопрос:

У меня в моих играх 9 уровней, но когда я запускаю игру, Unity продолжает увеличивать индекс моей сцены и сообщает, что сцена ошибки не может быть загружена, потому что она не была добавлена в настройки сборки. Вот текущая ошибка. В нем говорилось, что сцена 33 не может быть загружена, но у меня есть только 9. Пожалуйста, помогите мне, как это исправить.Спасибо

ИЗОБРАЖЕНИЕ ОШИБКИ

Вот мой код для уровней.Я просто увеличиваю 1 уровень каждый раз, когда игрок заканчивает:

 IEnumerator NextLevel()
{
    finish = true;
    PlayerPrefs.SetInt("Level", PlayerPrefs.GetInt("Level", 1)   1);
    yield return new WaitForSeconds(1);
    SceneManager.LoadScene("Level"   PlayerPrefs.GetInt("Level"));
}
 

Комментарии:

1. Сообщение об ошибке звучит вполне понятно … добавьте сцены в настройки сборки … и откуда взялись 33? Кажется, вы уже пробовали много раз и после достижения 10 всегда получаете эту ошибку, но все равно увеличиваете индекс уровня 😉 .. вы должны реализовать что-то, чтобы ограничить его до максимального индекса 😉

2. Нет, я добавил ее в свои настройки сборки, но у меня всего 9 уровней, и в сообщении об ошибке не удалось загрузить сцену 31. Он продолжает увеличивать сцену каждый раз, когда я нажимаю кнопку воспроизведения.

3. ну да, это то, что делает ваш код .. сохраните более высокое значение для настроек проигрывателя, а затем попробуйте загрузить эту сцену… как уже было сказано … убедитесь, что она максимальна на вашем самом высоком уровне inex

4. если у вас всего 9 сцен, что именно вы хотите, чтобы она делала, когда вы закончите последний созданный уровень, скажем, 8, потому что 0 — это меню.

5. @BugFinder Я хочу вернуться к сцене 1, чтобы снова запустить игру, можете ли вы сказать мне, как сбросить счетчик.

Ответ №1:

Вы должны убедиться, что загружаемый индекс привязан к фактическим доступным уровням!

 privte const int maxLevel = 9;

IEnumerator NextLevel()
{
    finish = true;
    var currentLevel = PlayerPrefs.GetInt("Level", 1);
    var nextLevel = currentLevel   1;
    if(nextLevel > maxLevel)
    {
        Debug.LogWarning(No more levels available);
        yield break;
    }

    PlayerPrefs.SetInt("Level", nextLevel);
    
    yield return new WaitForSeconds(1);
    SceneManager.LoadScene(Level   nextLevel.ToString());
}
 

Комментарии:

1. Спасибо, чувак. Я попробовал, но теперь появляется надпись «Больше нет доступного уровня». Это способ стереть память сцен загрузки Unity. Я думаю, что все еще помню сцену загрузки 33.

2. сбросьте настройки проигрывателя .. либо с помощью кода PlayerPrefs.DeleteKey("Level"); , либо непосредственно в реестре

3. Спасибо, я понял. Но похоже, что мой код увеличился на 2 уровня вместо 1. Например, с уровня 1 на уровень 3 на уровень 5. Можете ли вы сказать мне, как это исправить.

Ответ №2:

Предполагая, что вам нужно сбросить настройки PlayerPrefs после прочтения ответа и всех комментариев. @derHugo уже ответил, как удалить ключ из PlayerPrefs. Кроме того, я хочу кое-что добавить —

Теперь вы можете удалить все ключи в PlayerPrefs, просто Edit > Clear All PlayerPrefs выполнив это.

Или используйте этот инструмент для удаления определенного ключа из редактора.

Комментарии:

1.Спасибо, я понял. Но похоже, что мой код увеличился на 2 уровня вместо 1. Например, с уровня 1 на уровень 3 на уровень 5. Можете ли вы сказать мне, как это исправить.