Как перейти на другую сцену в unity
Перейти к содержимому

Как перейти на другую сцену в unity

  • автор:

Переход между сценами

Приветствую! В данной статье мы разберём несколько способов перехода между сценами, а именно:

  1. Смена сцен по названию.
  2. Смена сцен по индексам.
  3. Смена сцен, используя параметры.

Смена сцен по названию

Данный способ самый простой, и встречается он очень часто. Он используется тогда, когда нам необходимо перейти точно на определённую сцену. Для этого создадим 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

Смена сцен по индексам

Данный способ аналогичен предыдущему, за исключением того, что мы вместо названий сцен, используем их индексы. Данный способ полезен в тех случаях, когда нам необходимо перейти на следующую или предыдущую сцену. Создадим 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)

Конечно же, в качестве аргумента мы можем передать не только индекс, но и название. Поэтому используя открытие сцены через аргумент функции, Вы можете работать как с индексами, так и с названиями сцен.

Если Вам понравилась сцена, буду рад Вашим лайкам.

Открыть другую сцену (уровень)

Сначала в FileBuild Settings… надо добавить сцены, между которыми можно будет переключаться.

Unity. Build Settings

Теперь можно открыть другую сцену (уровень) через метод SceneManager.LoadScene() .

using UnityEngine.SceneManagement; // … SceneManager.LoadScene("SceneName");

Метод Application.LoadLevel() считается устаревшим.

Обновлено: 25 ноября 2021

Комментарии

Авторизуйтесь, чтобы добавлять комментарии

Как реализовать переход на другую сцену?

Я делаю кликер. Мне нужно сделать переход на другую сцену когда игрок сделает 1000 кликов. Не знаю как реализовать.

  • Вопрос задан более двух лет назад
  • 750 просмотров

Комментировать

Решения вопроса 1

CHIDWI

Unity3D Developer

подключаешь библиотеку using

using UnityEngine.SceneManagement; //в метод Update или CliksCar добавляешь if(clik >= 1000) < SceneManager.LoadScene("sceneName"); //собсна в скобках имя сцены >

Ответ написан более двух лет назад

Как сделать переход между сценами unity3d?

Как сделать что бы при столкновении с определенным обьектом уровень перезагружался в интернете прочитал что Application.loadlevel(Application.loadedLevel), но unity и редактор пишет Заменить на SceneManager. вопрос такой как заменить вторую часть (Application.loadedLevel) с использованием SceneManager? Пытался найти с помощью гугла выдает устаревшие сайты с использованием Application. (может я просто искал плохо)

  • Вопрос задан более трёх лет назад
  • 15700 просмотров

Комментировать
Решения вопроса 1
Middle PHP Developer

using UnityEngine.SceneManagement; SceneManager.LoadScene("scene_name")
using UnityEngine.SceneManagement; SceneManager.LoadScene(scene_id)

Ответ написан более трёх лет назад
Нравится 8 1 комментарий

Тут вопрос как перейти на СЛЕДУЮЩУЮ сцену, а не писать отдельный скрипт, отличающийся только идентификатором, под 100500 сцен)

Ответы на вопрос 2
durnevdanya @durnevdanya
Создать скрипт а в нем :
void .
Ответ написан более трёх лет назад
Павел Русаков @fortegon Автор вопроса
`UnityEngine.Application.LoadLevel(string)’ is obsolete: `Use SceneManager.LoadScene’

Самый простой способ, написать универсальный скрипт и переключать уровни по индексу
using UnityEngine.SceneManagement;

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex +1); // Получаем индекс сцены и загружаем сцену с индексом на один больше

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

c#

  • C#

Почему он жалуется на то что не может работать с null именно на строчке if (reader.GetString(14) != null)?

  • 1 подписчик
  • 14 часов назад
  • 72 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *