Фэндом


Операции с уровнями Править

Открытие нового уровня Править

Для собственно открытия уровня достаточно одного оператора:

   UGameplayStatics::OpenLevel(this, TEXT("Start_Map"));

Первый параметр — так называемый WorldContextObject, из которого метод UEngine::GetWorldFromContextObject может получить текущий мир. В качестве него годится любой объект, существующий в мире.

Однако метод OpenLevel лишь инициирует процесс загрузки нового уровня; сама загрузка происходит асинхронно (возможно, вообще в другом потоке). Если после загрузки уровня необходимо предпринять какие-либо действия (например, программно разместить актёров), необходимо воспользоваться делегатом, уведомляющим о завершении загрузки. Это делается следующим образом.

1. Заводится переменная, которая продолжает существовать в промежутке времени между выполнением функции, запрашивающей загрузку уровня, и вызовом функции, обрабатывающей событие завершения загрузки. Обычно это будет поле класса.

2. В функции, запрашивающей загрузку уровня, создаётся привязка к делегату функции, которая будет вызвана по окончании загрузки:

   Load_Map_Delegate = FCoreUObjectDelegates::PostLoadMap.AddUObject(this, &ThisClass::Post_Load_Map);
   UGameplayStatics::OpenLevel(this, TEXT("Start_Map"));

В данном случае:

  • Load_Map_Delegate — переменная, в которой сохраняется ссылка на привязку функции к делегату;
  • this — указатель на экземпляр класса UObject или его потомка, в котором определена функция, вызываемая по завершении загрузки;
  • ThisClass::Post_Load_Map — функция, которая должна быть вызвана по завершении загрузки. Предполагается, что функция, запрашивающая загрузку, находится в этом же классе ThisClass, поскольку предыдущим параметром был this, однако это не обязательно.

3. В функции, вызываемой по завершении загрузки карты, помимо действий, относящихся к игровой логике, добавляется оператор, отвязывающий эту функцию от делегата:

   FCoreUObjectDelegates::PostLoadMap.Remove(Load_Map_Delegate);

Если этой функции необходимо узнать, какая карта была загружена, она должна обратиться к текущему контексту мира (структура типа FWorldContext), а точнее, к её полю URL. Загрузка карт выполняется последовательно, поэтому это поле будет относиться к последней загруженной карте.

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на Фэндоме

Случайная вики