Заброшенный завод — это игра в стиле доминирования, в которой игроки двух команд сражаются за захват целей. В игровом процессе используются такие устройства, как Область захвата, а также пользовательские устройства, созданные с помощью Verse.
В этом уроке вы узнаете, как разработать продвинутую игру в Unreal Editor для Fortnite (UEFN). Вы также познакомитесь с функциями Unreal Engine 5 (UE5), к примеру с с созданием видеоряда, а также с пост-обработкой.
Вам будут доступны внешние ссылки на ресурсы, которые помогут разобраться в функциях Verse и UE5, а также в других освещаемых материалах.
Заброшенный завод находится в разделе Шаблоны проекта Каталога ресурсов.
Обзор
Далее перечислены шаги, необходимые для создания этого острова:
-
Создайте новый проект и измените параметры острова, чтобы настроить игру.
-
Создайте сценарий Verse для появления игроков.
-
Добавьте и настройте ключевые устройства игрового процесса.
-
Добавьте пользовательскую систему появления игроков.
-
Добавьте раскладки игроков.
-
Добавьте звуковые эффекты.
-
Добавьте визуальные эффекты.
Создание нового проекта
Ознакомьтесь со страницей Организация работы над проектом, чтобы подробнее узнать о создании нового проекта.
В этом уроке не рассматриваются параметры острова, которые мы используем для Befallen, равно как и их настройка в UEFN.
Создание сценария Verse для появления игроков
Вы можете использовать Verse для управления генератором игроков, чтобы игроки всегда появлялись на своей территории (рядом с принадлежащими им областями захвата или в областях рядом с союзниками). Для этого используйте комбинацию стандартных устройств творческого режима и Verse.
Добавьте новый сценарий Verse, как описано на этой странице. Затем вставьте следующие строки:
using { /Fortnite.com/Devices }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
using { /Verse.org/Simulation/Tags }
## С помощью этого устройства можно управлять генераторами игроков
## В начале игры начальный набор генераторов включён
## Через какое-то время начальные генераторы отключаются
## После этого точки появления команды, связанные с каждой точкой захвата, будут включаться/отключаться с учётом взвешенного счёта
## Команда, захватившая точку, получает 1 очко к взвешенному счёту (или теряет 1 очко, если точку захватила другая команда)
## Каждый союзник в области получает 1 очко к взвешенному счёту (или теряет 1 очко, если точку захватила команда 2)
## Если взвешенный счёт > 0, игроки команды 1 могут появляться рядом с точкой.
## Если взвешенный счёт < 0, игроки команды 2 могут появляться рядом с точкой
##################################################################
## Класс обработчика событий — мы создадим по одному обработчику на каждую точку захвата и привяжем события к ним
##################################################################
capture_point_event_handler := class:
CapturePointIndex:int
DominationSpawnManagerRef:domination_spawn_manager
TeamCollectionRef:fort_team_collection
# Если это команда 1, возвращаем 1. Если это команда 2, возвращаем –1.
GetTeamDirectionOfAgent<private>(MyAgent:agent)<transacts>:int=
if (FirstTeam := TeamCollectionRef.GetTeams()[0]):
if (TeamCollectionRef.IsAgentOnTeam[MyAgent, FirstTeam]):
return 1
return -1
# Устанавливаем состояние точки захвата
OnCaptured(MyAgent:agent):void=
if(set DominationSpawnManagerRef.CapPointCaptureWeight[CapturePointIndex] = GetTeamDirectionOfAgent(MyAgent)):
DominationSpawnManagerRef.CalculateWeightForPoint(CapturePointIndex)
# Изменяем взвешенное количество очков игроков по мере их входа/выхода
PlayerEnteredLargeZone(MyAgent:agent):void=
if(set DominationSpawnManagerRef.CapPointPlayerWeight[CapturePointIndex] = DominationSpawnManagerRef.CapPointPlayerWeight[CapturePointIndex] + GetTeamDirectionOfAgent(MyAgent)):
DominationSpawnManagerRef.CalculateWeightForPoint(CapturePointIndex)
PlayerLeftLargeZone(MyAgent:agent):void=
if(set DominationSpawnManagerRef.CapPointPlayerWeight[CapturePointIndex] = DominationSpawnManagerRef.CapPointPlayerWeight[CapturePointIndex] - GetTeamDirectionOfAgent(MyAgent)):
DominationSpawnManagerRef.CalculateWeightForPoint(CapturePointIndex)
##################################################################
## Класс диспетчера точек появления в игре в стиле доминирования
##################################################################
domination_spawn_manager := class(creative_device):
# Группы генераторов игроков — заполняются через поиск по тегам Verse
var SpawnPointGroupInitial:[]player_spawner_device = array{}
var SpawnPointGroupsCapPoint:[][]player_spawner_device = array{array{}, array{}, array{}}
# Сохраняем взвешенные значения статуса захвата и количества игроков
var CapPointCaptureWeight:[]int = array{0, 0, 0}
var CapPointPlayerWeight:[]int = array{0, 0, 0}
# Зона захвата
@editable
CapturePoints:[]capture_area_device = array{}
@editable
LargeZones:[]player_counter_device = array{}
# Начальные генераторы будут отключены по истечении заданного времени в секундах
InitialGroupDisableTime:float = 5.0
# Кэшируем классы слушателей, чтобы предотвратить очистку памяти, и об этом не придётся беспокоиться в будущем!
var CachedListeners:[]capture_point_event_handler = array{}
# Метод OnBegin активируется в момент запуска игры
OnBegin<override>()<suspends>:void=
BeginPlayEventSubscriptions()
FindAndCacheSpawnDevices()
DisableInitialSpawnGroup()
# Подпишемся на события через триггеры атрибутов
BeginPlayEventSubscriptions<private>():void=
for (I -> EachCapPoint:CapturePoints):
MyHandler := capture_point_event_handler:
CapturePointIndex := I
DominationSpawnManagerRef := Self
TeamCollectionRef := Self.GetPlayspace().GetTeamCollection()
set CachedListeners = CachedListeners + array{MyHandler}
EachCapPoint.ControlChangeEvent.Subscribe(MyHandler.OnCaptured)
if (EachLargeZone := LargeZones[I]):
EachLargeZone.CountedEvent.Subscribe(MyHandler.PlayerEnteredLargeZone)
EachLargeZone.RemovedEvent.Subscribe(MyHandler.PlayerLeftLargeZone)
# Получим все имеющиеся генераторы игроков и сохраним их в соответствующих массивах
FindAndCacheSpawnDevices<private>():void=
InitialSpawnPoints:[]creative_object_interface = GetCreativeObjectsWithTag(DominationSpawnTags.Tag_SpawnGroup_Initial{})
for (FoundDevice : InitialSpawnPoints, DeviceAsSpawner:= player_spawner_device[FoundDevice]):
set SpawnPointGroupInitial = SpawnPointGroupInitial + array{DeviceAsSpawner}
GroupTags:[]tag = array:
DominationSpawnTags.Tag_SpawnGroup_GroupA{}
DominationSpawnTags.Tag_SpawnGroup_GroupB{}
DominationSpawnTags.Tag_SpawnGroup_GroupC{}
for (I -> GroupTag:GroupTags):
FoundSpawnGroup:[]creative_object_interface := GetCreativeObjectsWithTag(GroupTag)
for (FoundDevice : FoundSpawnGroup, DeviceAsSpawner:= player_spawner_device[FoundDevice]):
if:
set SpawnPointGroupsCapPoint[I] = SpawnPointGroupsCapPoint[I] + array{DeviceAsSpawner}
# Отключим начальные точки появления
DisableInitialSpawnGroup<private>()<suspends>:void=
Sleep(InitialGroupDisableTime)
for (SpawnPoint : SpawnPointGroupInitial):
SpawnPoint.Disable()
# Эта функция будет выполняться всякий раз, когда изменяется CapPointCaptureWeight или CapPointPlayerWeight для точки, чтобы можно было определить, кому разрешено появляться из соответствующей группы появления
CalculateWeightForPoint(PointIndex:int):void=
var WeightOfPoint:int = 0
if:
set WeightOfPoint = CapPointCaptureWeight[PointIndex] + CapPointPlayerWeight[PointIndex]
for (SpawnDevice:SpawnPointGroupsCapPoint[PointIndex]):
var DeviceIsTeam1:logic = false
DeviceTags := SpawnDevice.GetTags()
if (DeviceTags.Has[DominationSpawnTags.Tag_TeamOwnership_Team1{}]):
set DeviceIsTeam1 = true
if (DeviceIsTeam1?):
if (WeightOfPoint > 0):
SpawnDevice.Enable()
else:
SpawnDevice.Disable()
else:
if (WeightOfPoint < 0):
SpawnDevice.Enable()
else:
SpawnDevice.Disable()
Ознакомьтесь с этой инструкцией, чтобы больше узнать о Verse.
В этом уроке для получения ссылок на другие устройства творческого режима мы будем использовать теги Verse.
Далее скомпилируйте сценарий Verse.
Найдите созданное вами устройство DominationSpawnManager в Каталоге ресурсов и перетащите его в мир для задания настроек.
Эти настройки и новые устройства Verse появятся только после того, как вы их скомпилируете.
Добавление и настройка ключевых устройств
Устройства «Точка появления игрока»
(w:700)
Устройства «Точка появления игрока» работают под управлением сценария Verse, который определяет допустимые места появления.
Вы будете использовать несколько вариантов устройств, каждый со своими настройками и функциями. Взаимодействие с некоторыми из них будет происходить с помощью сценария Verse, который отключает/включает точки для определения допустимых мест появления.
Вам понадобятся 16 начальных генераторов — восемь для команды 1 и восемь для команды 2. Разместите их на открытом пространстве. Они будут использоваться только для первой серии появлений в каждом раунде.
Порядок настройки устройства:
Выберите устройство «Точка появления игрока» в Каталоге ресурсов и разместите его.
-
Настройте параметры, как указано ниже:
Параметр Значение Пояснение Команда игрока Индекс команды / Команда 1 или Команда 2 Выберите, какая из команд (1 или 2) будет появляться на данном генераторе. Использовать как старт на острове False Это устройство не будет использоваться в качестве телепорта для начального перемещения на остров. Отображение в игре False Устройство будет оставаться невидимым на протяжении всей игры. Группа приоритета 10 Поставьте флажок для установки группы приоритета. Это приоритет, используемый для появления, причём меньшее число означает более высокий приоритет. Отображать расстояние до врага Откл. Это визуализатор, позволяющий контролировать расстояние до врага в редакторе. Все они по умолчанию отключены, даже если в них не использовалась проверка расстояния до врага. -
Добавьте теги Verse.
Теги игрового процесса позволяют находить устройства с определённым тегом во время игры.
Найдите выпадающее меню Теги игрового процесса и нажмите Редактировать, чтобы появился список флажков True/False.
Для устройств «Точка появления игрока», предназначенных для первоначального появления, нужно установить флажок Начальная и убедиться, что для каждого устройства выбрано владение командой 1 или 2.
Затем выполните следующие действия.

-
Выберите VerseTagMarkup на панели Сведения.
-
Нажмите Редактировать в Тегах игрового процесса, чтобы открыть список флажков True/False.
- Для начальных точек генераторов установите флажок Начальная. Проверьте, чтобы для каждого устройства параметр TeamOwnership был установлен как команда 1 или 2.
-
Скопируйте и разместите ещё 15 устройств (чтобы всего было 16 устройств). Разместите восемь устройств на одной стороне карты рядом с устройством «Область захвата» и ещё восемь на противоположной стороне, также рядом с устройством «Область захвата».
Эти генераторы игроков будут использоваться только в начале игры, а потом будут отключены сценарием Verse.
Вы можете определить теги Verse в любом месте. Теги в рамках этого урока определяются в файле ProjectName.verse
, где ProjectName — заданное вами имя проекта.
Откройте файл и вставьте следующие теги, чтобы определить их.
using { /Verse.org/Simulation/Tags }
DominationSpawnTags<public> := module:
Tag_SpawnGroup<public>:= class(tag){}
Tag_SpawnGroup_Initial<public>:= class(Tag_SpawnGroup){}
Tag_SpawnGroup_GroupA<public>:= class(Tag_SpawnGroup){}
Tag_SpawnGroup_GroupB<public>:= class(Tag_SpawnGroup){}
Tag_SpawnGroup_GroupC<public>:= class(Tag_SpawnGroup){}
Tag_TeamOwnership<public>:= class(tag){}
Tag_TeamOwnership_Team1<public>:= class(Tag_TeamOwnership){}
Tag_TeamOwnership_Team2<public>:= class(Tag_TeamOwnership){}

Разместите группы генераторов в безопасных зонах вдали от боевых действий, как на фото выше. Verse будет отключать и включать эти генераторы в зависимости от того, допустимы ли они согласно вашему сценарию.
Красные точки появления игроков относятся к одной из трёх групп генераторов, контролируемых сценарием Verse. В группе есть два наложенных друг на друга генератора, один для команды 1, а другой для команды 2, которые повторяются в разных местах карты.
Белый генератор в группе точек появления является резервным. Он используется, если после проверки сценарием Verse не будет найдено другого допустимого места появления игрока.
Вы можете добавить группы генераторов, состоящие из генераторов для команды 1 и команды 2, по всей карте. Задайте тег «Группа A», «Группа B» или «Группа C» для группы генераторов, чтобы обозначить область захвата, где должна срабатывать группа.
Разместите группы вокруг устройства «Область захвата», к которому вы их привязали.
Чтобы разместить группы генераторов:
-
Разместите две точки появления в безопасной зоне, одну над другой. Одна точка должна быть закреплена за командой 1, а другая — за командой 2.
-
Настройте их параметры, как показано ниже.
Параметр Значение Пояснение Команда игрока Индекс команды / 1 или 2 Установите индекс команды 1 или 2 для появления игроков. Использовать как старт на острове False Точка не будет использоваться в качестве телепорта для начального перемещения на остров. Отображение в игре False Генератор не будет виден во время игры. Активно во время фазы Нет Точки будут использоваться только сценарием Verse и по умолчанию отключены. Группа приоритета 10 Поставьте флажок для установки группы приоритета. Это приоритет, используемый для появления, причём меньшее число означает более высокий приоритет. Проверка расстояния до врага 60 Это расстояние проверки наличия врагов с целью определить, пригодна ли эта точка для появления. Значение можно изменять в зависимости от размера карты. Увеличьте размер области, если у вас большая карта, и уменьшите, если карта не такая большая. Отображать расстояние до врага Откл. Это визуализатор, позволяющий контролировать расстояние до врага в редакторе. Все они по умолчанию отключены, даже если в них не использовалась проверка расстояния до врага. -
Добавьте теги Verse с помощью следующих флажков, как вы сделали в предыдущем разделе.
-
Установите GroupA для точек появления вокруг точки захвата A.
-
Установите GroupB для точек появления вокруг точки захвата B.
-
Установите GroupC для точек появления вокруг точки захвата C.
-
-
Поместите ещё одну точку появления рядом с двумя точками, размещёнными ранее. Эта точка будет резервным генератором.
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Команда игрока Любая Установите индекс команды 1 или 2 для появления игроков. Использовать как старт на острове False Точка не будет использоваться в качестве телепорта для начального перемещения на остров. Отображение в игре False Генератор не будет виден во время игры. **Активно во время фазы Всегда Эти генераторы всегда доступны для появления игроков. Группа приоритета 50 Поставьте флажок для установки группы приоритета. Это приоритет, используемый для появления, причём меньшее число означает более высокий приоритет. Проверка расстояния до врага 60 Это расстояние проверки наличия врагов с целью определить, пригодна ли эта точка для появления. Значение можно изменять в зависимости от размера карты. Увеличьте размер области, если у вас большая карта, и уменьшите, если карта не такая большая. Отображать расстояние до врага Откл. Это визуализатор, позволяющий контролировать расстояние до врага в редакторе. Все они по умолчанию отключены, даже если в них не использовалась проверка расстояния до врага. -
Скопируйте и разместите эти устройства, равномерно распределив их по карте. Вы также можете разместить их в тех же местах, что и генераторы, привязанные к точкам захвата.
Разместите таким образом 16 устройств, которые не привязаны к какой-то одной команде. Это означает, что захват всех 3 точек приведёт к тому, что побеждённый враг будет появляться на карте в случайных местах.

Наконец, существует ряд точек, размещаемых в предыгровом лобби, где игроки ждут своей очереди в игре. Всего таких точек 16, и они размещаются в зоне ожидания игроков обеих команд.
Чтобы настроить эти устройства:
-
Создайте предыгровое лобби.
-
Разместите в лобби устройство «Точка появления игрока».
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Команда игрока Нет Они используются только как точки появления на острове. Использовать как старт на острове True Точка будет использоваться для появления на острове перед игрой. Отображение в игре False Генератор не будет виден во время игры. Группа приоритета 1 Поставьте флажок для установки группы приоритета. Эти точки всегда будут использоваться во время предыгровой фазы. -
Скопируйте и разместите устройство ещё 15 раз.
Устройства «Область захвата»
Задайте устройствам «Область захвата» следующие параметры:
-
Отредактируйте размещённое устройство «Область захвата».
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Цветовая тема Зелёное яблоко Это акцентный цвет пространства. Вы можете выбрать любой цвет. Радиус захвата 0,5 Это радиус зоны захвата вокруг устройства (в плитках). Отображение во время игры False База этого устройства будет оставаться невидимой на протяжении всей игры. Периодическое начисление очков Владеющая команда Каждые несколько секунд очки начисляются той команде, которая захватила эту точку. Очки за захват 3 Это количество очков за захват. Тип цветовой темы Цвет статуса команды Цвет команды, которая сейчас владеет точкой. Высота захвата 1,0 Это высота зоны захвата вокруг устройства (в плитках). Отображение предмета в игре False Определяет, видна ли голограмма захвата во время игры. Соперники мешают начислению очков True Периодическое начисление очков отключается, когда враг находится в области захвата. Какой команде разрешён захват Все Любая команда может захватывать точки. Время для захвата 10 Время нахождения в области захвата в секундах, необходимое для того, чтобы взять её под контроль. Переопределить время нейтрализации Без нейтрализации Если точка захвачена одной командой, для другой команды нет необходимости сначала её нейтрализовать. Ускорение захвата за каждого игрока 2,0 Это множитель скорости захвата и нейтрализации за каждого дополнительного товарища по команде, который оказывает помощь. Тип убывания прогресса Постепенно Определяет прогресс частичного захвата. Скорость убывания частичного прогресса 0,5 Это скорость, с которой убывает частичный прогресс, если в области захвата нет ни одного товарища по команде. Элементы HUD Значок Области захвата отображаются в пользовательском интерфейсе в виде значков. Требует прямой видимости False Значки областей захвата отображаются всегда вне зависимости от прямой видимости. Текст над значком вражеских команд Враг Это текст пользовательского интерфейса, отображаемый, когда точку захвата контролирует враг. Скрывать значок HUD на расстоянии 450 Это расстояние в метрах, на котором уже не отображается значок HUD. Показывать только в пределах экрана True При отрисовке значка показывать его только в пределах экрана. Текст над значком команд союзников Союзник Этот текст отображается в интерфейсе, если область захвата контролирует ваша команда. Текст над значком нейтральных команд Нейтральный Этот текст отображается в интерфейсе, если область захвата никем не контролируется. Размер текста в HUD 2,0 Размер текста, отображаемого вместе со значком. Отображать прогресс захвата в HUD True Отображает в нижней центральной части экрана элемент HUD, который показывает прогресс захвата при нахождении в точке. -
Повторите этот шаг для каждой области захвата.
Разместите два устройства «Область захвата» на противоположных сторонах карты и одно посередине. Разместите эти два устройства на карте так, чтобы каждая команда находилась рядом с одной областью захвата, а третье — посередине, чтобы команды могли побороться за захват этой области.
Правильное размещение точек захвата требует учитывать укрытия, окружающую местность, высоту и расстояние до других точек захвата.
Также подумайте о том, как визуально обозначить области захвата. Для устройства «Область захвата» заданы достаточно универсальные параметры по умолчанию, но вам следует решить, как использовать графику, освещение и декали мира.
В Befallen база заменена хорошо заметным вращающимся светильником.

Разместите три устройства «Счётчик игроков», по одному рядом с каждым устройством «Область захвата».

Настройте устройства «Счётчик игроков» для создания областей, привязанных к вышеуказанным устройствам.
На скриншоте выше видна красная область вокруг точки захвата C. Размер области зависит от зоны, которую она охватывает.
Настройте следующие параметры устройств «Счётчик игроков».
Параметр | Значение | Пояснение |
---|---|---|
Сравнить кол-во игроков | Не сравнивать | Относительное количество игроков в этой зоне не будет подсчитываться. |
Отображение информационной панели | False | Информационная панель не будет видна во время игры. |
Использовать область | True | Установите этот флажок, чтобы использовать для расчётов область, а не всю карту. |
Ширина области | Переменная | Настройте эту область так, чтобы она охватывала всю зону вокруг одной точки захвата. |
Длина области | Переменная | Настройте эту область так, чтобы она охватывала всю зону вокруг одной точки захвата. |
Высота области | Переменная | Настройте эту область так, чтобы она охватывала всю зону вокруг одной точки захвата. |
Повторите третий и четвёртый шаги для LargeZoneLeft_B и LargeZoneLeft_C.
Устройство Verse

Используйте это устройство для прямой привязки событий к необходимым устройствам, чтобы на них можно было ссылаться в сценарии Verse.
Чтобы настроить устройство Verse:
- Выберите DominationSpawnManager на вкладке Окно сборки.

-
Выберите DominationSpawnManager (Экземпляр) на панели Сведения.
-
Настройте параметры, как указано ниже:
Параметр Значение Пояснение Отображение в игре False Устройство будет оставаться невидимым во время игры. Включение в начале игры True Устройство будет включено в начале игры. -
Задайте следующие настройки DominationSpawnManager:
Параметр Значение Пояснение 0 PointCap_A Сообщает сценарию Verse, какая команда захватила точку. 1 PointCap_B Сообщает сценарию Verse, какая команда захватила точку. 2 PointCap_C Сообщает сценарию Verse, какая команда захватила точку. 0 LargeZoneEntered_A Фильтрует игроков по области «Счётчик игроков», сообщая сценарию Verse о входе игроков. 1 LargeZoneEntered_B Фильтрует игроков по области «Счётчик игроков», сообщая сценарию Verse о входе игроков. 2 LargeZoneEntered_C Фильтрует игроков по области «Счётчик игроков», сообщая сценарию Verse о входе игроков. 0 LargeZoneLeft_A Работает совместно с TriggersLargeZoneEntered, сообщая сценарию Verse о том, что игрок покинул зону, в целях отслеживания действующих генераторов. 1 LargeZoneLeft_B Работает совместно с TriggersLargeZoneEntered, сообщая сценарию Verse о том, что игрок покинул зону, в целях отслеживания действующих генераторов. 2 LargeZoneLeft_C Работает совместно с TriggersLargeZoneEntered, сообщая сценарию Verse о том, что игрок покинул зону, в целях отслеживания действующих генераторов.
Устройство «Замок»

Во многих областях появления игроков есть устройства «Замок». Каждому устройству «Замок» необходимо присвоить уникальное имя.
Вы можете создать шкафы для появления с замками и дверями, чтобы игроки не могли входить в них повторно.
Рекомендуем пронумеровать взаимосвязанные с ними компоненты, чтобы отслеживать каждую точку. В рамках данного урока всего будет четыре закрытых безопасных области появления.
Следуйте дальнейшим инструкциям, чтобы настроить замки для четырёх областей.
-
Разместите устройство «Замок» с внешней стороны закрытой двери.
-
Разместите два устройства «Триггер» внутри помещения так, чтобы они перекрывали дверь.
a. Присвойте устройствам «Триггер» такие имена, которые позволят легко найти их в списке устройств, к примеру TriggerDoorOpen1 и TriggerDoorClose1.
-
Настройте параметры устройства «Замок», как показано ниже.
Параметр Значение Пояснение Отображение во время игры False Устройство будет оставаться невидимым на протяжении всей игры. Скрывать взаимодействие, если заблокировано True Игрок не будет видеть взаимодействие во время игры, если дверь заперта. -
Настройте прямую привязку события, чтобы связать устройства «Замок» и «Триггер».
Устройство A | Функция | Устройство B | Событие | Пояснение |
---|---|---|---|---|
Замок | Открыть | DoorOpenTrigger1 — DoorOpenTrigger4 | При срабатывании триггера | Замок откроет эту дверь в случае активации устройства TriggerDoorOpen1. |
Замок | Закрыть | DoorOpenTrigger1 — DoorOpenTrigger4 | При срабатывании триггера | Замок закроет эту дверь в случае активации устройства TriggerDoorClose1. |
Скопируйте и вставьте это устройство три раза, изменив прямую привязку событий в соответствии с триггерами, которые находятся рядом.

Для отпирания двери необходимо коснуться устройства «Триггер», которое перекрывает подход к двери, чтобы оно передало сигнал на устройство «Замок». Слева показано устройство «Триггер», перекрывающее дверной проём.
Второе устройство «Триггер» справа будет находиться в режиме ожидания две секунды, перед тем как отправит сигнал о закрытии двери. Это позволит игроку, находящемуся внутри, выйти. При этом «кемперы» не смогут проникнуть в помещение.
Порядок настройки этих устройств:
-
Используйте следующую таблицу для настройки устройств TriggerDoorOpen1 — TriggerDoorOpen4.
Параметр Значение Пояснение Отображение в игре False Триггер будет оставаться невидимым на протяжении всей игры. Визуальные эффекты триггера False Устройство не будет воспроизводить визуальные эффекты. Звуковые эффекты триггера False Устройство не будет воспроизводить звуки. -
Используйте следующую таблицу для настройки устройств TriggerDoorClosed1 — TriggerDoorClosed4.
Параметр Значение Пояснение Отображение в игре False Устройство будет оставаться невидимым на протяжении всей игры. Реакция на игрока False Контакт с игроком не приводит к активации триггера. Задержка триггера 2 Устройство отправляет сигнал через две секунды. Визуальные эффекты триггера False Устройство не будет воспроизводить визуальные эффекты. Звуковые эффекты триггера False Устройство не будет воспроизводить звуки. -
Дальше необходимо настроить прямую привязку событий.
Устройство A Функция Устройство B Событие Пояснение Триггер Триггер TriggerDoorOpen1 — TriggerDoorOpen4 При срабатывании триггера Посылает сигнал при срабатывании триггера двери, в результате чего это устройство активируется через две секунды и отпирает замок.
Повторите эту настройку (с увеличением номера в конце условного обозначения) для каждого изолированного помещения с закрытой дверью, которая должна открываться автоматически.

В начале игры может понадобиться, чтобы дверь была открытой, закрытой или запертой. С этим также помогут устройства «Замок». В данном примере мы решили оставить дверь открытой, чтобы не препятствовать перемещению игроков.
Чтобы задать такое поведение:
-
Разместите ещё одно устройство «Замок» и присвойте ему имя LockDevice5.
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Отображение во время игры False Устройство будет оставаться невидимым на протяжении всей игры. Скрывать взаимодействие, если заблокировано True Игрок не будет видеть взаимодействие во время игры, если дверь заперта. Исходное состояние двери Открыто В начале игры дверь будет открыта.
Устройство управления интерфейсом

Устройство управления интерфейсом позволяет задать множество параметров острова. Чтобы настроить это устройство:
-
Разместите на острове устройство управления интерфейсом.
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Показать HUD Показать элемент Показывает HUD в пользовательском интерфейсе. Отображать мини-карту Скрыть элемент Скрывает мини-карту в пользовательском интерфейсе. Отображать поле с информацией HUD Показать элемент Показывает поле с информацией HUD в пользовательском интерфейсе. Отображать меню строительства Скрыть элемент Показывает поле с информацией HUD в пользовательском интерфейсе. Отображать инвентарь игрока Показать элемент Показывает инвентарь игрока. Отображать количество древесины Скрыть элемент Скрывает этот элемент в пользовательском интерфейсе. Отображать количество камня Скрыть элемент Скрывает этот элемент в пользовательском интерфейсе. Отображать количество металла Скрыть элемент Скрывает этот элемент в пользовательском интерфейсе. Отображать количество золота Скрыть элемент Скрывает этот элемент в пользовательском интерфейсе. Показать подсказку о таблице со счётом на карте Скрыть элемент Скрывает подсказку о таблице со счётом на карте. Показать подсказку о таблице со счётом на карте Скрыть элемент Скрывает подсказку о таблице со счётом на карте. Отображать таймер бури Показать элемент Показывает таймер бури в пользовательском интерфейсе. Отображать количество игроков Показать элемент Показывает количество игроков в пользовательском интерфейсе. Отображать количество устранений Показать элемент Показывает количество устранений в пользовательском интерфейсе. Отображать таймер раунда Показать элемент Показывает таймер раунда в пользовательском интерфейсе.
Устройство «Барьер»

Вокруг основной боевой арены находится множество невидимых устройств Барьер, которые не позволяют игрокам покинуть арену. Вы можете изменять количество и размер этих устройств в соответствии с созданной картой, но для них должны быть заданы следующие базовые настройки.
Чтобы настроить устройство «Барьер»:
-
Разместите устройство «Барьер» в месте, где нужно помешать игрокам покинуть арену.
-
Настройте параметры, как указано ниже:
Параметр Значение Пояснение Материал барьера Нет Текстура не используется, что не позволяет видеть устройство во время игры. Длина барьера Переменная Может быть изменена, чтобы полностью оградить область. Ширина Переменная Может быть изменена, чтобы полностью оградить область. Высота барьера 3 Определяет, какой высоты будет барьер (в плитках). -
Скопируйте и разместите устройства, чтобы создать непрерывный барьер вокруг арены.
Устройство «Зона модификатора»

Устройство Зона модификатора находится под уровнем. Ширина, длина и высота устройства должны быть достаточными, чтобы охватить всю арену.
Некоторые из параметров замещают параметры Моего острова, чтобы обеспечить выполнение определённых правил. Порядок настройки устройства:
-
Разместите устройство «Зона модификатора» под уровнем.
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Ширина зоны Переменная Может быть изменена, чтобы полностью оградить область. Длина зоны Переменная Может быть изменена, чтобы полностью оградить область. Высота зоны Переменная Может быть изменена, чтобы полностью оградить область. Воздействие на живых существ False Зона не будет оказывать воздействие на существ. Действие на охранников False Зона не будет оказывать воздействие на охранников. Разрешить редактирование False В этой зоне не разрешается редактировать конструкции, созданные игроками. Включить визуальные эффекты False Устройство не будет воспроизводить визуальные эффекты. Стрельба True Игроки, находящиеся в зоне действия устройства, могут стрелять. Разрешить строительство False Игроки не смогут возводить постройки внутри зоны. Активно во время фазы Всегда Зона модификатора включена и активна во время любой фазы игры. Срок существования предметов True: 25 Если выбрана установка True, любые выроненные предметы будут храниться целое количество секунд, прежде чем они будут уничтожены (в данном случае 25 секунд). Это позволит игрокам собирать оружие устранённых игроков.
Добавление раскладок игроков

Вы можете создать раскладки, используемые игроками при сражении за точку захвата. Свяжите устройство Интерфейс выбора класса с устройством Создание класса, чтобы создать и отображать классы игроков, доступные для выбора в начале матча.
Каждому классу должно быть присвоено отдельное устройство «Создание класса». Вы можете разместить лишь одно устройство «Интерфейс выбора класса».
Чтобы настроить раскладки:
-
Разместите устройство «Интерфейс выбора класса» и оставьте его настройки по умолчанию.
-
Разместите одно устройство «Выбор класса» для каждого класса и раскладки, которые будут использоваться игроками.
a. Зарегистрируйте оружие и боеприпасы в устройстве «Создание класса». Сначала необходимо зарегистрировать основное оружие.
-
Настройте его параметры, как показано ниже.
Параметр Значение Пояснение Название класса <Переменная> Введите название, которое вы хотите присвоить этому классу в устройстве «Выбор класса». Описание класса <Переменная> Введите описание данного класса и раскладки в устройстве «Выбор класса». Идентификатор класса <Переменная> Каждому классу нужно присвоить отдельный идентификатор от 1 до X, где X — количество созданных вами классов. Использовать полученный предмет Первый предмет После появления игрок использует первый предмет из зарегистрированной раскладки.
Добавление звуковых эффектов

Узнайте больше об импорте звуков здесь.
Импортируйте звуковой эффект, а затем перетащите его из Каталога ресурсов в место, откуда будет исходить звук.
Вы также можете добавить ряд глобальных звуковых эффектов в область по своему выбору.

Для этого перетащите ресурс Sound Wave из Каталога ресурсов на арену. Точное место не имеет значения, вы можете сгруппировать ресурсы по своему усмотрению.

Откройте ресурс Sound Wave и включите (True) параметр Повторение на панели Сведения. В отличие от созданной ранее схемы, этот звук будет воспроизводиться по всей карте, и дальнейшие действия не потребуются.
Схемы удобны, если вам требуется задать расширенные звуковые настройки.
Нажмите правую кнопку мыши и выберите Создать схему для пользовательского ресурса Sound Wave в формате .wav, чтобы создать проигрыватель повторяющегося звука со связанным выходом. Указанные выше схемы Blueprint будут созданы автоматически при создании схемы.
Для этого:
Нажмите на Звуковой проигрыватель и измените значение параметра Повторение на True.
Затем нажмите на «Проигрыватель повторяющегося звука» и измените параметр Переопределить затухание на True, чтобы задать внутренний радиус и расстояние ослабления звука.
Добавление визуальных эффектов

С помощью эффектов пост-обработки вы можете изменять образ и атмосферу своего проекта, к примеру, используя цветокоррекцию или применяя оптические эффекты. Следуйте инструкциям ниже, чтобы область пост-обработки охватывала весь уровень.
-
Добавьте Область пост-обработки на свой уровень. В разделе Использовании областей пост-обработки описана подробная процедура.
-
Включите Бесконечное (неограниченное) пространство на панели Сведения области пост-обработки в Параметрах области пост-обработки, чтобы область пост-обработки действовала на весь уровень.
В проекте используются следующие эффекты пост-обработки:
-
Свечение: создаёт дымку/ореол, позволяя подсвечивать определённые части сцены
-
Хроматическая аберрация: позволяет разделить цветовые каналы / исказить изображение по краям экрана
-
Блики в объективе: создаёт блики яркого света в объективе камеры
-
Виньетка: добавляет более тёмный градиент по краям экрана
-
Зернистость плёнки: добавляет эффект зернистости плёнки
-
Цветокоррекция: из параметров насыщенности/контраста/гаммы мы настраиваем только насыщенность (цвета сцены должны быть блёклыми, то есть меньше цветов, больше оттенков серого)
В проекте используются следующие материалы пост-обработки:

-
Эффект теплового мерцания для сцены
-
Цветокоррекция на основе материала
-
Окрашивание сцены с учётом направления обзора камеры

Вы также можете добавить декали. Декали создаются в редакторе материалов, а затем перетаскиваются в сцену.
Найдите декаль в Каталоге ресурсов и перетащите её в то место, где она должна отображаться.
Используйте настройки Масштаба и Приближения, чтобы отобразить актор декали на статичной сетке. Это позволяет создавать дополнительные текстуры поверх земли, пользовательские текстуры для представления таких деталей, как пролитая краска, или транслировать создание знаков и боевых повреждений поверх статичных сеток.
Вы даже можете добавить в игру сигнальные огни.
Сигнальный огонь — это статичная сетка с вращающимся компонентом материала, в которой есть точечный источник света, использующий функцию «Материал освещения».
Изначально этот сигнал был создан в виде файла FBX, а затем импортирован в UEFN.

В UEFN можно импортировать все виды контента, к примеру трёхмерные объекты, аудиофайлы, текстуры и т. д., причём в самых разных форматах. Нажмите правой кнопкой мыши в папке, в которую вы хотите импортировать файл, и выберите пункт «Импорт».

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

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

Это глобальный ресурс, доступный всем авторам в основном Каталоге ресурсов UEFN. Чтобы добавить элемент «Кружение чаек для создания атмосферы», перетащите его из папки Fortnite, открытой в Каталоге ресурсов.
Вы также можете добавить в игру пролетающие реактивные самолёты.

Для создания реактивного самолёта используется устройство «Внутриигровое видео». Для реализации полётов применяется физическая модель реактивного самолёта, спрятанная под уровнем.

Если требуется создать видеоряды реактивного самолёта, нажмите здесь, чтобы больше узнать об этой функции. Такие видеоряды включают опорные кадры преобразования, звуковые эффекты, дрожание камеры и генераторы визуальных эффектов для реактивного самолёта.
Вы можете использовать Verse для управления временем воспроизведения видеорядов. Для этого нужно создать новое устройство Verse с помощью сценария, приведённого ниже.
Скомпилируйте сценарий Verse, представленный ниже. Вы можете создать новое устройство в Каталоге ресурсов, а затем перетащить его на уровень и отредактировать.
# Авторские права Epic Games, Inc. Все права защищены.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
################################################################################
## Это устройство ссылается на массив устройств «Последовательность внутриигрового видео» и воспроизводит их случайным образом с переменным временем ожидания.
################################################################################
sequencer_randomization_device := class<concrete>(creative_device):
# Массив устройств «Последовательность внутриигрового видео» со случайным выбором элемента
@editable
SequencerList : []cinematic_sequence_device = array{}
# Минимальное/максимальное время ожидания перед воспроизведением следующего видеоряда
@editable
CooldownMin:float = 120.0
@editable
CooldownMax:float = 240.0
# Если видеорядов несколько, нужно ли запретить воспроизведение одного и того же ряда два раза подряд?
@editable
PreventBackToBackRepeats:logic = true
# Метод OnBegin активируется в момент запуска игры
OnBegin<override>()<suspends>:void=
if (SequencerList.Length > 0):
QueueSequence(GetRandomInt(0, SequencerList.Length-1))
# Ожидаем в течение случайного времени перед воспроизведением видеоряда
QueueSequence<private>(Index:int)<suspends>:void=
CooldownTime:float = GetRandomFloat(CooldownMin, CooldownMax)
Sleep(CooldownTime)
if (MySequencer := SequencerList[Index]):
MySequencer.Play()
QueueSequence(GetNextIndexToPlay(Index))
# Определяем индекс следующего видеоряда либо случайным образом, либо исключив последний воспроизведённый ряд
GetNextIndexToPlay<private>(LastIndex:int):int=
if (SequencerList.Length > 1 and PreventBackToBackRepeats?):
var IndexToReturn:int = LastIndex + GetRandomInt(1, SequencerList.Length-1)
if(set IndexToReturn = Mod[IndexToReturn, SequencerList.Length]):
return IndexToReturn
return GetRandomInt(0, SequencerList.Length-1)
Добавьте устройство «Последовательность внутриигрового видео» для каждого из направлений пролёта и настройте их следующим образом.
Параметр | Значение | Пояснение |
---|---|---|
Последовательность | Созданная последовательность | Укажите в этом поле последовательность внутриигрового видео. В этом уроке используются три экземпляра видеорядов в трёх последовательностях внутриигрового видео, при этом сценарий Verse определяет время пролёта случайным образом. |
Добавьте устройство Verse из Каталога ресурсов и задайте для него следующие настройки.

Параметр | Значение | Пояснение |
---|---|---|
CooldownMin | 180 | Минимальное время ожидания в секундах до следующего пролёта. |
CooldownMax | 500 | Максимальное время ожидания в секундах до следующего пролёта в сценарии Verse. |
PreventBackToBackRepeats | True | Реактивный самолёт не будет пролетать в одном направлении дважды, если к нему привязано более одного устройства последовательности внутриигрового видео. |
Для активации устройств «Последовательность внутриигрового видео» требуются ссылки на каждое из них.
Устройство A | Функция | Устройство B | Событие | Пояснение |
---|---|---|---|---|
Список устройств «Последовательность внутриигрового видео» | Реактивный самолёт | CinematicSequenceDevice | 1–3 | Добавьте ссылку на каждое устройство «Последовательность внутриигрового видео». |

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