Как сделать многоуровневую игру в Unity? Или игру, в которой игрок может перемещаться (телепортировать) между локациями?
Один из наиболее частых вариантов реализации заключается в создании для каждого уровня игры отдельной сцены. Итак, алгоритм создания такой игры следующий.
Шаг 1. Создать сцены для каждого уровня и пр. составляющих игры. Продумать понятную и гибкую систему идентификации файлов сцен
Например, сцены могут иметь следующие имена:
- StartScene – стартовая сцена игры. Это может быть сцена, в которой игрок знакомится с правилами игры, может изменить некоторые начальные настройки, выбрать персонажа и т.д.
- Layer1, Layer2, Layer3, … — сцены, соответствующие 1-му, 2-му, 3-му и т.д. уровням игры.
- EndGame – конечная сцена, которая загружается в финале игры.
Шаг 2. Продумать геймплей так, чтобы было понятно, когда завершается текущий уровень и при каких условиях может быть загружена сцена для следующего уровня или завершения игры
Например, следующий уровень может загружаться при следующих возможных условиях:
а) игрок набрал определённое количество баллов. Это условие имеет смысл проверять каждый кадр в методе Update();
б) игрок добрался до определенного места в игре. Например, пришёл к заданной двери. Соответственно на объекте двери необходимо поставить коллайдер, и при входе в этот коллайдер должна будет выполняться загрузка сцены;
в) в интерфейсе игры имеются кнопки загрузки разных «уровней». Такая ситуация возможна в нескольких случаях:
Когда речь идёт не столько об уровнях игры, сколько о разных локациях, между которыми игрок имеет возможность перемещаться. Пример такой игры – Family Island – там игрок может путешествовать на различные острова.
Второй вариант геймплея с аналогичным функционалом – наличие в реализации отдельной сцены с картой игры. Кликая по определённым зонам-кнопкам этой игры, игрок загружает соответствующий уровень (при условии, что этот уровень для него открыт). Наиболее популярный пример такой игры – Candy Crush Saga и ей подобные.
г) другие варианты или комбинации перечисленных вариантов. Например, для варианта а) при достижении игроков определённых результатов новый уровень может загружаться не сразу, автоматически, а после нажатия игроком на появляющуюся кнопку наподобие «Следующий уровень». Аналогично – для варианта б) – входим в коллайдер двери и видим кнопку «Войти» и т.п.
Шаг 3. Написание функции (метода) загрузки соответствующей сцены.
Для загрузки сцен в движке Unity предусмотрен метод LoadScene (…) из класса SceneManager пространства имён UnityEngine.SceneManagement.
Это значит, что в классе (скрипте), в котором будет выполняться загрузка сцены с помощью указанного метода, должна быть прописана директива:
using UnityEngine.SceneManagement;
Далее, при вызове метода следует указывать и имя класса:
SceneManager.LoadScene (…);
У данного метода есть несколько перегрузок (вариантов вызова с различными наборами параметров), подробнее о которых можно почитать в официальной документации Unity.
Наиболее простые способы вызова метода следующие.
Вариант 1 – с явным указанием имени загружаемой сцены в качестве параметра. Например:
SceneManager.LoadScene («Layer2»);
Вариант 2 – с указанием индекса загружаемой сцены в качестве параметра. Например:
SceneManager.LoadScene (2);
Индекс – это число-порядковый номер сцены, который автоматически присваивается в окне настроек Build Settings:
Один из возможных вариантов скрипта следующий:
using UnityEngine;
using UnityEngine.SceneManagement;
public class Teleport : MonoBehaviour {
public int n_scene = 1; // индекс загружаемой сцены по умолчанию, который в редакторе можно изменить
void OnTriggerEnter(Collider col) // вход в коллайдер-триггер объекта-двери или телепорта
{
if (col.tag.Equals("Player")) // если это объект с тегом "Player"
{
SceneManager.LoadScene(n_scene); // загружаем сцену с заданным индексом
}
}
}
Этот скрипт должен быть на объектах-дверях или телепортах. На них же должен стоять коллайдер-триггер.
Шаг 4. Заполнить раздел Scenes In Build в окне настроек Build Settings, внеся туда все сцены, которые необходимо будет загружать
Пример этого окна представлен выше. Чтобы его вызвать, используется главное меню, пункты File -> Build Settings...
Шаг 5. Не забыть прикрепить скрипт(ы) к соответствующим игровым объектам на сцене
Как это сделать, знает любой новичок ;)