Триггеры и загрузка сцены

Любая игра разбита на несколько уровней. Это значительно увеличивает производительность игры и упрощает ее создание.

  1. Создай первый уровень и сохрани его с уникальным именем, выбрав в главном меню File → Save Scene As…
  2. Добавь в проект новый уровень выбрав в главном меню File → New Scene. Когда уровень будет готов, сохрани его (File → Save Scene As…).
  3. Открой уровень на панели Project, который будет открываться первым при запуске игры. Выбери в главном меню File → Build Settings…. Нажми кнопку Add Open Scenes, чтобы текущий уровень добавился в список Scenes In Build. Повтори эти операции с другими уровнями, чтобы все они добавились в список Scenes In Build.
  4. Осталось только написать простой скрипт, который поможет тебе перемещать игрока между уровнями (сценами). Для этого тебе необходимо разобраться с триггерами.

Триггеры

Разберем работу триггеров на прототипе, который мы подготовили:

Слева - Сцена с Башней, Справа - Сцена внутри Башни
Слева — Сцена с Башней, Справа — Сцена внутри Башни

Задача: сделать переход из одной сцены в другую и обратно, когда Игрок подходит к двери. Триггеры подойдут замечательно.

Триггер — это зона срабатывания определенных действий, когда объект входит в эту зону, находится в ней или выходит за ее пределы. Он часто используется для автоматического открывания дверей, загрузки уровней, отображения обучающих игровых подсказок, игровых роликов… Используй свою фантазию!

Для обработки триггеров скрипт получает события OnTriggerEnter, OnTriggerStay и OnTriggerExit. Работа с ними полностью аналогична работе с событиями Start и Update. Событие OnTriggerEnter будет посылаться, когда объект только вошел в зону триггера. Это то, что нам нужно, но для начала создадим сами объекты с триггерами.

Триггер можно сделать из коллайдера. Для этого, нужно его выбрать и в окне Инспектор включить свойство isTrigger.

  1. Создай пустой объект GameObject → Create Empty.
  2. Добавь к созданному объекту один из компонентов Collider (Box Collider, Sphere Collider, Capsule Collider, Mesh Collider), расположенный в меню Component → Physics.
  3. Размести триггер прямо перед дверью.
  4. В настройках добавленного компонента включи параметр Is Trigger.
  5. Повтори это во второй сцене.
Слева - Сцена с Башней, Справа - Сцена внутри Башни
Слева — Сцена с Башней, Справа — Сцена внутри Башни

Теперь тебе понадобится этот скрипт: OnTriggerSceneLoader.7z. Разберем как он работает.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class OnTriggerSceneLoader : MonoBehaviour {


    public string SceneName; //Название сцены. Не забываем добавить сцену BuildSettings > AddOpenScene

    void OnTriggerEnter(Collider other) //Для 3D - выполняется, когда Игрок войдет в зону триггера
    {
        if (other.gameObject.tag == "Player") //Проверяем тэг объекта
        {
            SceneManager.LoadScene(SceneName); //Загружаем сцену
        }
    }

    void OnTriggerEnter2D(Collider2D other) //Для 2D - в нашем случае, это событие выполняться не будет.
    {
        if (other.gameObject.tag == "Player") //Проверяем тэг объекта. Убедись, что у Игрока есть тег Player
        {
            SceneManager.LoadScene(SceneName); //Загружаем сцену
        }
    }
}

Размести этот скрипт на триггерах. В сцене внутри Башни укажи SceneName, который соответствует названию сцены снаружи Башни. И наоборот.

Готово👍