Unity как загрузить сцену
Перейти к содержимому

Unity как загрузить сцену

  • автор:

Scenes

Сцены содержат объекты вашей игры. Они могут использоваться для создания главного меню, отдельных уровней и для других целей. Можно считать каждый файл сцены отдельным игровым уровнем. В каждой сцене можно разместить объекты окружения, заграждения, декорации, по кусочкам создавая дизайн и саму игру.

A new empty scene, with the default 3D objects - a camera and a directional light.

When you create a new Unity project, your scene view will show a new Scene. This is an untitled and unsaved scene. The scene will be empty except for defult objects — either an orthographic camera, or a perspective camera and a directional light, depending on whether you started the project in 2D or 3D mode.

To save the scene you’re currently working on, choose File > Save Scene from the menu, or pres Ctrl/Cmd + S.

Scenes are saved as assets, into your project’s Assets folder. Therefore they appear in the Project Window, just like any other asset.

Some scene assets, saved and visible in the project view

To open a scene, in order to begin or continue working within that scene, double-click the scene asset in the Project Window.

If your current scene contains unsaved changes, you will be prompted to save or discard the changes.

Multi-Scene Editing.

It is possible to have multiple scenes open for editing at one time. For more information about this, see Multi-Scene Editing.

Как загрузить конкретную сцену в unity2D?

Например если нажать кнопку F1, вот мой код, но загружает следущие сцены, это не очень удобно. Пж не пишите что то типо ищи в гугле.

void Update()
if (Input.GetKey(KeyCode.F1))
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
>
>

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

1 комментарий

Простой 1 комментарий

Порядок выполнения функций событий

В скриптинге Unity есть некоторое количество функций события, которые исполняются в заранее заданном порядке по мере исполнения скрипта. Этот порядок исполнения описан ниже:

Редактор

  • Reset: Reset (сброс) вызывается для инициализации свойств скрипта, когда он только присоединяется к объекту и тогда, когда используется команда Reset.

Первая загрузка сцены

Эти функции вызываются при запуске сцены (один раз для каждого объекта на сцене).

  • Awake: Эта функция всегда вызывается до любых функций Start и также после того, как префаб был вызван в сцену (если GameObject неактивен на момент старта, Awake не будет вызван, пока GameObject не будет активирован, или функция в каком-нибудь прикреплённом скрипте не вызовет Awake).
  • OnEnable: (вызывается только если объект активен): Эта функция вызывается сразу после включения объекта. Это происходит при создании образца MonoBehaviour, например, при загрузке уровня или был вызван GameObject с компонентом скрипта.
  • OnLevelWasLoaded: This function is executed to inform the game that a new level has been loaded.

Учтите, что для объектов, добавленных в сцену сразу, функции Awake и OnEnable для всех скриптов будут вызваны до вызова Start, Update и т.д. Естественно, для объектов вызванных во время игрового процесса такого не будет.

Перед первым обновлением кадра

  • Start: Функция Start вызывается до обновления первого кадра(first frame) только если скрипт включен.

Для объектов добавленных на сцену, функция Start будет вызываться во всех скриптах до функции Update. Естественно, это не может быть обеспечено при создании объекта непосредственно во время игры.

Между кадрами

  • OnApplicationPause: Эта функция вызывается в конце кадра, во время во время которого вызывается пауза, что эффективно между обычными обновлениями кадров. Один дополнительный кадр будет выдан после вызова OnApplicationPause , чтобы позволить игре отобразить графику, которая указывает на состояние паузы.

Порядок обновления

Когда вы отслеживаете игровую логику и взаимодействия, анимации, позиции камеры и т.д. есть несколько разных событий, которые вы можете использовать. По общему шаблону, большая часть задач выполняется внутри функции Update , но есть также ещё другие функции, которые вы можете использовать.

  • FixedUpdate: Зачастую случается, что FixedUpdate вызывается чаще чем Update . FU может быть вызван несколько раз за кадр, если FPS низок и функция может быть и вовсе не вызвана между кадрами, если FPS высок. Все физические вычисления и обновления происходят сразу после FixedUpdate . При применении расчётов передвижения внутри FixedUpdate , вам не нужно умножать ваши значения на Time.deltaTime . Потому что FixedUpdate вызывается в соответствии с надёжным таймером, независящим от частоты кадров.
  • Update: Update вызывается раз за кадр. Это главная функция для обновлений кадров.
  • LateUpdate: LateUpdate вызывается раз в кадр, после завершения Update . Любые вычисления произведённые в Update будут уже выполнены на момент начала LateUpdate . Часто LateUpdate используют для преследующей камеры от третьего лица. Если вы перемещаете и поворачиваете персонажа в Update, вы можете выполнить все вычисления перемещения и вращения камеры в LateUpdate . Это обеспечит то, что персонаж будет двигаться до того, как камера отследит его позицию.

Рендеринг

  • OnPreCull: Вызывается до того, как камера отсечёт сцену. Отсечение определяет, какие объекты будут видны в камере. OnPreCull вызывается прямо перед тем, как начинается отсечение.
  • OnBecameVisible/OnBecameInvisible: Вызывается тогда, когда объект становится видимым/невидимым любой камере.
  • OnWillRenderObject: Вызывается один раз для каждой камеры, если объект в поле зрения.
  • OnPreRender: Вызывается перед тем, как камера начнёт рендерить сцену.
  • OnRenderObject: Вызывается, после того, как все обычные рендеры сцены завершатся. Вы можете использовать класс GL или Graphics.DrawMeshNow, чтобы рисовать пользовательскую геометрию в данной точке.
  • OnPostRender: Вызывается после того, как камера завершит рендер сцены.
  • OnRenderImage(только в Pro версии): Вызывается после завершения рендера сцены, для возможности пост-обработки изображения экрана.
  • OnGUI: Вызывается несколько раз за кадр и отвечает за элементы интерфейса (GUI). Сначала обрабатываются события макета и раскраски, после чего идут события клавиатуры/мышки для каждого события.
  • OnDrawGizmos Используется для отрисовки гизмо в окне Scene View в целях визуализации.

Сопрограммы

Нормальные обновления сопрограмм запускаются после завершения из функции Update. Сопрограмма это функция, которая приостанавливает своё исполнение (yield), пока данные YieldInstruction не завершатся. Разные способы использования сопрограмм:

  • yield Сопрограмма продолжит выполнение, после того, как все Update функции были вызваны в следующем кадре.
  • yield WaitForSeconds Продолжает выполнение после заданной временной задержки, и после все Update функций, вызванных в итоговом кадре.
  • yield WaitForFixedUpdate Продолжает выполнение после того, как все функции FixedUpdate были вызваны во всех скриптах
  • yield WWW продолжает выполнение после завершения WWW-загрузки.
  • yield StartCoroutine сцепляет сопрограмму, и будет ждать, пока не завершится сопрограмма MyFunc.

Когда объект разрушается

  • OnDestroy: Эта функция вызывается после всех обновлений кадра в последнем кадре объекта, пока он ещё существует (объект может быть уничтожен при помощи Object.Destroy или при закрытии сцены).

При выходе

Эти функции вызываются во всех активных объектах в вашей сцене:

  • OnApplicationQuit: Эта функция вызывается для всех игровых объектов перед тем, как приложение закрывается. В редакторе вызывается тогда, когда игрок останавливает игровой режим. В веб-плеере вызывается по закрытия веб окна.
  • OnDisable: Эта функция вызывается, когда объект отключается или становится неактивным.

Блок-схема жизненного цикла скрипта

Следующая диаграмма совмещает порядок и повтор функций событий в течение жизни скрипта.

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

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

  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)

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

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

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

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