Приветствую! В данной статье мы разберём несколько способов перехода между сценами, а именно:
- Смена сцен по названию.
- Смена сцен по индексам.
- Смена сцен, используя параметры.
Смена сцен по названию
Данный способ самый простой, и встречается он очень часто. Он используется тогда, когда нам необходимо перейти точно на определённую сцену. Для этого создадим C# скрипт, с названием, например, Scenes. И пропишем в нём следующий код:
using UnityEngine;
using UnityEngine.SceneManagement;
public class Scenes : MonoBehaviour
{
public void OpenMenu()
{
SceneManager.LoadScene("Menu");
}
public void OpenGame()
{
SceneManager.LoadScene("Game");
}
}
Разбор кода
Обратите внимание, что при работе со сценами, нам необходимо обязательно подключить библиотеку:
using UnityEngine.SceneManagement;
Дальше мы создаём функцию OpenMenu(), которая будет загружать сцену с названием Menu. Вторая функция с названием OpenGame() загружаем сцену с названием Game. Убедитесь, что сцены с такими названиями существуют в Вашем проекте.
Как видите, всё очень просто. Условия, при которых Вы будете запускать данные функции, могут быть совсем разные. Например: клик на клавишу «Esc», здоровье персонажа меньше нуля, и тд. Пример:
if(HealthUser <= 0) {
OpenMenu();
}
Смена сцен по индексам
Данный способ аналогичен предыдущему, за исключением того, что мы вместо названий сцен, используем их индексы. Данный способ полезен в тех случаях, когда нам необходимо перейти на следующую или предыдущую сцену. Создадим C# скрипт, с названием, например, Scenes. И пропишем в нём следующий код:
using UnityEngine;
using UnityEngine.SceneManagement;
public class Scenes : MonoBehaviour
{
public void OpenMenu()
{
SceneManager.LoadScene(0);
}
public void OpenGame()
{
SceneManager.LoadScene(1);
}
}
Как видите, код аналогичен предыдущему, поэтому разбирать мы его не будем. Единственное что хотелось бы отметить, что благодаря функциям, у нас открываются чуть больше возможностей перехода на сцены. Например, мы можем перейти на следующую или предыдущую функцию:
using UnityEngine;
using UnityEngine.SceneManagement;
public class Scenes : MonoBehaviour
{
public void NextLevel()
{
var index = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(index + 1);
}
public void PreviousLevel()
{
var index = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(index - 1);
}
}
Разбор кода
Строчки в функции NextLevel():
var index = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(index + 1);
В первой строчке мы в переменную index мы заносим тот индекс сцены, в котором мы находимся в данный момент. А уже во второй строчке, мы увеличиваем индекс нашей сцены на единицу, и запускаем таким образом следующую сцену.
В функции PreviousLevel() всё аналогично, только индекс мы не увеличиваем на единицу, а уменьшаем. Тем самым запускаем предыдущую сцену.
Обратите внимание! Перед тем как работать со сценами по их индексам, нам необходимо добавить все сцены в Build Settings. Для этого жмём на вкладку File - Build Settings. Далее перетаскиваем все свои сцены в область Scenes in Build, и расставляем их по порядку. После чего просто закрываем данное окно. Теперь можно спокойно работать с индексами.
Смена сцен, используя параметры
Данный способ аналогичен предыдущему, только здесь мы переходим на определённую сцену исходя из переданного аргумента в нашу функцию.
using UnityEngine;
using UnityEngine.SceneManagement;
public class Scenes : MonoBehaviour
{
public void GoToLevel(int number)
{
SceneManager.LoadScene(number);
}
}
Разбор кода
Функция GoToLevel() принимает в качестве аргумента номер индекса, который нам необходимо открыть, и заносит его в переменную number. Этот метод защитит нас от дублирования однотипных функций, которые по идее выполняют одно и тоже.
Давайте теперь попробуем выполнить функцию GoToLevel(), передав ей аргумент «1» следующим образом:
GoToLevel(1)
Конечно же, в качестве аргумента мы можем передать не только индекс, но и название. Поэтому используя открытие сцены через аргумент функции, Вы можете работать как с индексами, так и с названиями сцен.
Если Вам понравилась сцена, буду рад Вашим лайкам.
Если я перехожу со сцены на сцену то скрипты работающие в прошлой сцене продолжали работать мешая нахождению в меню. Что делать?