Пример комнат и порталов

Загрузите этот учебный проект: Пример простых порталов.

Введение

Этот туториал ознакомит Вас с созданием системы комнат "Hello World" с двумя комнатами и порталом между ними.

Шаг 1

../../../_images/tutorial_simple_1.png
  • Создайте новый проект.

  • Добавьте Spatial в качестве корня сцены (на скриншоте он называется "Root").

  • Затем добавьте узел RoomManager. Он понадобится нам позже для обработки системы комнат.

  • Далее нам нужно начать определять наши комнаты. Мы создадим все наши комнаты в другом пространстве, которое мы назвали 'RoomList'.

  • Добавьте новый узел Room в качестве дочернего элемента roomlist.

  • Назовём комнату Kitchen.

  • Теперь мы создадим геометрию нашей комнаты. Названия, которые вы дадите геометрии, зависят от вас.

  • Создайте MeshInstance для пола. Создайте коробку, добавив ресурс CubeMesh к MeshInstance. Масштабируйте и позиционируйте его, чтобы сформировать пол.

  • Создайте MeshInstance для стен. Создайте несколько сеток в форме прямоугольных параллелепипедов (box meshes), затем измените их масштаб и позицию. Убедитесь, что на одной стороне остаётся открытый проход. Для этого вам потребуется создать два сегмента стены.

Шаг 2

../../../_images/tutorial_simple_2.png
  • Теперь нужно создать другую комнату.

  • Это можно сделать, просто продублировав первую комнату (выберите узел Kitchen, щелкните правой кнопкой мыши и выберите Duplicate).

  • Поверните и расположите вторую комнату так, чтобы открытые проходы совпадали.

  • Переименуйте вторую комнату в Lounge.

Step 3

../../../_images/tutorial_simple_3.png
  • Далее мы добавим портал между двумя комнатами.

  • Create a new Portal in the kitchen.

  • Масштабируйте и позиционируйте портал с помощью узла Transform в инспекторе, чтобы он поместился в проеме между двумя комнатами.

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

Step 4

../../../_images/tutorial_simple_4.png
  • Чтобы сделать все более интересным, мы хотим добавить в комнаты еще несколько ящиков.

  • Размещение этих ящиков в качестве дочерних или внучатых узлов комнат явно указывает системе, в какой комнате должны находиться объекты. Однако мы также можем создать эти объекты вне комнаты. При условии, что они находятся в ветке RoomList, система попытается автоматически поместить их в нужную комнату во время выполнения.

  • На скриншоте ящики были размещены как дочерние элементы Spatial, который я назвал Freeform для поддержания порядка.

  • Коробкам также присвоен зеленый пространственный материал, чтобы они сильнее выделялись на фоне остальной комнаты.

  • Давайте также создадим OmniLight, чтобы он был автоматически размещен в одной из комнат.

Шаг 5

../../../_images/tutorial_simple_5.png
  • Далее наступает решающий этап. Мы должны сообщить RoomManager, где находятся комнаты!

  • Выберите RoomManager и посмотрите в окне инспектора в разделе Paths.

  • Вам нужно назначить Room List для указания на узел RoomList, который мы создали ранее (который является родителем всех комнат).

Step 6

../../../_images/tutorial_simple_6.png
  • Убедитесь, что вы сохранили свой проект перед следующим шагом. Всегда полезно сохранять и создавать резервные копии перед конвертированием.

  • Выберите RoomManager, и на панели инструментов в верхней части видового окна 3d-редактора появится кнопка Convert Rooms. Нажмите эту кнопку.

  • Если все прошло успешно, RoomManager создаст данные для выполнения (граф помещения ), чтобы выполнить окклюзию во время выполнения.

  • В окне вывода можно увидеть журнал процесса преобразования. Это полезно для поиска проблем.

  • Если вы теперь переместите камеру редактора внутрь комнат, вы должны увидеть, как сетки в противоположной комнате будут выбраковываться в зависимости от того, что вы можете видеть через портал.

Вывод

На этом мы завершаем этот простой учебник. Не бойтесь экспериментировать с созданной вами новой системой комнат.

Некоторые вещи, которые следует попробовать

  • Создавайте различные типы геометрии. Узлы CSG, системы частиц и мультимеши - все они поддерживаются портальной системой.

  • Попробуйте создать камеру и добавить ее в сцену. Если вы запустите сцену, вы заметите, что выборка порталов не активна. Это происходит потому, что портал room graph должен создаваться каждый раз при загрузке уровня путем преобразования комнат. Вместо того чтобы использовать кнопку в редакторе, в реальных играх вы вызываете функцию в RoomManager для преобразования уровня, называемую rooms_convert(). Попробуйте сделать это с помощью скрипта, возможно, запущенного внутри функции _ready().

  • Геометрия, которую вы создали до сих пор, состоит из STATIC (не движущаяся). Если вы посмотрите в инспекторе на узлы геометрии, вы увидите, что они происходят от CullInstance. Здесь вы можете установить Portal Mode для объектов в портальной системе. Это определяет, как будет обрабатываться узел.

  • Если вы сейчас напишете сценарий для перемещения одного из ваших объектов в пределах комнаты и просмотрите его через камеру во время выполнения сцены, вы можете заметить, что объект выбраковывается неправильно. Это происходит потому, что предполагается, что объекты STATIC не перемещаются в системе. Если вместо этого вы измените объект на DYNAMIC, то теперь он будет обновлять выборку правильно.

  • Есть несколько portal_modes, которые описаны в документации.

  • Попробуйте включать и выключать портал во время выполнения из вашего сценария. Вы можете вызвать set_portal_active() для открытия и закрытия портала.

  • При выделении портала должны появиться 4 ручки. Попробуйте перетащить точки портала с помощью мыши и посмотрите, как это повлияет на объекты, которые будут выбраковываться.

  • Если выделить помещение и нажать кнопку Generate Points на панели инструментов, то точки корпуса помещения будут сохранены в инспекторе помещений. Теперь их можно редактировать с помощью ручек.