Добавление счетчика уровней, не связанного с единицей buildindex, и рандомизация уровней

#c# #unity3d #random #counter #scene

Вопрос:

Я пытаюсь добавить в свою игру счетчик уровней, который не основан на buildindex, но до сих пор не смог найти способ сделать это. Это приводит к моему следующему вопросу: мне нужно, чтобы счетчик работал независимо от buildindex, потому что я хочу, чтобы уровни воспроизводились в случайном порядке (с возможностью воспроизведения одного и того же уровня). До сих пор, чтобы рандомизировать уровни, я придумал это:

 private void NextLevel()
{
  SceneManager.LoadScene(SceneManger.buildIndex   range(0,x)); //x would be the number of scenes
}
 

Я еще не закончил достаточное количество сцен, чтобы иметь возможность проверить это, чтобы узнать, работает ли это, если кто-нибудь знает лучший способ или сможет подтвердить, работает ли это, или я должен попытаться придумать что-то еще, что я хотел бы знать!

Спасибо вам за ваше время и любые советы

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

1. docs.unity3d.com/ScriptReference/… есть пример. Ваш не будет работать, если вы всегда не захотите выбрать сцену с более высоким номером. Не должно быть так сложно добавить еще несколько сцен в вашу игру и протестировать ее.

2. Чтобы добавить в точку зрения @RetiredNinja, вам нужно будет только скопировать сцену и добавить что-то вроде текстового поля, которое отличается для каждой сцены. Вы могли бы быстро проверить это.

3. Это правда, я добавлю пару глупых сцен позже, когда смогу, и проверю это. Есть идеи по счетчику уровней? Я хочу, чтобы он мог отслеживать пройденные уровни

Ответ №1:

Вы можете получить полное количество доступных сцен с помощью SceneManager.sceneCountInBuildSettings и использовать это как максимальное значение, например

 private void NextLevel()
{
     SceneManager.LoadScene(Random.Range(0,SceneManager.sceneCountInBuildSettings));
}
 

Ответ №2:

Если вам нужны сцены случайным образом, вы можете использовать это :

 private void RandomeLevel()
{
  //UnityEngine.Random.Range(0, Max)
  //Start 0 and End 4 = ("Max")
  int nextSceneIndex = UnityEngine.Random.Range(0, 4);
  SceneManager.LoadScene(nextSceneIndex, LoadSceneMode.Single);
}