#c# #unity3d
Вопрос:
Я пытаюсь создать систему загрузки уровней в unity, которая будет загружать уровень на основе кнопки, которую вы нажмете. Код, который у меня сейчас есть, крайне не нужен, так как мне нужно создать IEnumerator и функцию StartCoroutine для каждой отдельной кнопки.
Это код, который у меня есть до сих пор:
public void LoadLevel1()
{
StartCoroutine(Level1());
}
IEnumerator Level1()
{
transition.SetTrigger("Start");
yield return new WaitForSeconds(2);
SceneManager.LoadScene("Level 1");
}
Этот процесс для каждого уровня становится действительно раздражающим и повторяющимся, так как 10 уровней уже занимают более 150 строк беспорядочного кода.
Я попытался оптимизировать это, загрузив сцену с названием кнопки.
Например, на кнопке, которая загружает уровень 1, название кнопки называется «Уровень 1», поэтому логически я бы просто назвал «gameObject.name» и возьмите название кнопки «Уровень 1» и загрузите сцену «Уровень 1».
У Visual Studio нет проблем с этим, но когда я пытаюсь запустить приведенный ниже код:
public void LoadLevel()
{
StartCoroutine(GoToLevel());
}
IEnumerator GoToLevel()
{
transition.SetTrigger("Start");
yield return new WaitForSeconds(2);
SceneManager.LoadScene(gameObject.name);
}
Но по какой-то причине единство требует gameObject.name и говорит: «О, вам нужно имя вашего родителя» и пытается загрузить сцену «Уровень загрузки». Которого не существует, потому что он должен загружать «Уровень 1». Я понятия не имею, почему это происходит. Любые идеи будут оценены по достоинству.
Комментарии:
1. Кнопки, которые будут загружать игру, будут статичными (например, стандартные 10 кнопок) или они будут загружаться динамически?
Ответ №1:
gameObject.name возьмите значение из gameobject, в который вы добавили свой скрипт. Вы должны пройти btn gameobject.name и это будет работать нормально. В качестве альтернативы вы можете добавить аргумент в функцию с int и передать индекс уровня следующим образом :
public void LoadLevel(int i)
{
StartCoroutine(GoToLevel(i));
}
IEnumerator GoToLevel(int i)
{
transition.SetTrigger("Start");
yield return new WaitForSeconds(2);
SceneManager.LoadScene("Level" i);
}
Вызовите эту функцию уровня загрузки из btn и передайте номер уровня в качестве аргумента в инспекторе, и все готово. И обязательно сохраняйте название сцены как Level1, Level2 ….