#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. Можете ли вы сказать мне, как это исправить.