В предыдущем шаге мы создали неигрового персонажа, который, получив команду, может двигаться вперёд, поворачиваться влево и вправо. В этом шаге мы настроим игровые доски, по которым персонаж будет перемещаться.
В этой игре для игровой доски должно быть определено следующее:
Размер плитки: размер плиток на доске, определяющий, насколько далеко должен передвигаться персонаж.
Камера: выбор камеры, используемой при попадании персонажа на эту игровую доску. Для этого будем использовать устройство Закреплённая камера.
Начальное положение: положение, из которого персонаж должен начать двигаться по доске. Для этого используем предмет окружения творческого режима, чтобы его можно было легко задать в качестве редактируемого свойства и получить его преобразование.
Конечная цель: конечная цель персонажа, к которой он должен продвигаться и которая будет сигнализировать о конце маршрута на игровой доске. Для этого будем использовать устройство «Триггер», сигнализирующее о том, что персонаж на него наступил.
Препятствия: препятствия не позволяют персонажу сразу добраться до конечной цели. Это подробно рассмотрено в разделе Создание препятствий.
Каждое из них отслеживается в классе (class) игровой доски. Этот класс содержит спецификатор concrete, поэтому может быть редактируемым свойством в Verse-устройстве, при этом каждый член класса имеет редактируемый атрибут для возможности изменять его значения из UEFN.
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
Итак, игровая доска с её свойствами определена и теперь пора добавить её поведение:
Обработка конечной цели: когда игровая доска настроена, подпишемся на
TriggeredEventконечной цели. Используем обработчик событий и пользовательское событие для открытого объявления о том, что достигнута конечная цель при активации персонажем устройства «Триггер». Более подробно об этом рассказывается в разделе Реализация взаимодействия с устройствами.Начало игровой доски: в начале игровой доски назначим устройство «Камера» всем игрокам.
Конец игровой доски: в конце игровой доски удалим устройство «Камера» у всех игроков.
Ниже приведён полный класс для игровой доски:
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
Создание препятствий
Препятствия не позволяют персонажу сразу добраться до конечной цели. В этой игре в качестве препятствий мы используем устройства «Барьер», чтобы не давать двигаться персонажу, и устройства «Триггер», которые отключают барьеры.
Наше определение класса obstacle включает в себя:
IsObstaclePassed: элемент данных, показывающий статус активации барьеров. Имеет тип logic, потому что есть только два состояния.
Барьер: устройства «Барьер», связанные с препятствиями. Это значит, что вы можете прикрепить более одного устройства «Барьер» к триггеру, который их отключает.
BarrierDissolves: последовательности внутриигрового видео, воспроизводимые при прохождении через препятствия.
BarrierAppears: последовательности внутриигрового видео, воспроизводимые при сбросе препятствий.
Триггер: устройство «Триггер», к которому персонаж должен подойти для отключения препятствия.
Ниже приведён весь класс, представляющий препятствия. Он содержит спецификатор concrete, поэтому может быть редактируемым свойством в Verse-устройстве.
# An obstacle on the gameboard, with an associated set of
# Barrier devices, Trigger devices that deactivate the barriers,
# and Cinematic Sequence devices that play sequences for barriers dissolving and appearing for visual feedback on what is happening.
# This class has the concrete specifier so it can be an editable property on a Verse device.
obstacle := class<concrete>:
# Data for storing whether barriers are currently enabled/disabled.
var IsObstaclePassed:logic = false
# The array of barriers for this obstacle.
Добавление игровых досок
Итак, игровая доска определена, и теперь вы можете добавить массив таких игровых досок в своё Verse-устройство, о чём будет рассказано в разделе 6. Управление игровым циклом.
В проекте, который вы создали на основе шаблона VKT — стартовый пакет игр с устройствами Verse, в разделе «Структура» найдите устройство Verse Commander Minigame и, выбрав его, откройте панель Сведения.
В разделе Игровые доски панели «Сведения» вы увидите пять элементов, соответствующих доскам в игре. Разверните эти элементы для просмотра устройств, внутриигрового видео и других свойств, которые используются для игровой доски.
Вы можете добавить игровые доски, выбрав Добавить элемент для игровых досок, в результате чего в игре будут добавляться новые уровни.
Игровые доски можно удалять, для чего напротив удаляемой игровой доски нужно выбрать выпадающее меню и с его помощью удалить из игры уровни.
Кроме того, вы можете перераспределить игровые доски, в результате чего изменится порядок расположения уровней в игре: просто перетащите нужный элемент в нужное место — перед другими элементами игровой доски или после них.
Для тестирования конкретных уровней вы можете перераспределить доски так, чтобы тестируемый уровень оказался первым в списке.
Следующий шаг
Мы определили игровые доски и теперь вы знаете, как добавлять их в необходимом количестве. В следующем шаге вы узнаете, как оформить доски, чтобы создать увлекательные головоломки и обойти ограничения.