Поля Verse можно определять непосредственно в UMG. Переменные создаются в виджете и затем связываются со свойствами виджета в коде Verse. Переменные передают данные Verse и отражаются в дайджесте ресурсов; они также позволяют создавать динамический пользовательский интерфейс без необходимости использовать модели представления устройств.
Пример интерфейса функции «Транзакции на острове»
Этот пример витрины расширяет API магазина, добавляя пользовательские элементы интерфейса с помощью полей и интерфейса Verse. Данные передаются из API в слой данных, а класс Verse используется для отслеживания игроков и обработки их покупок.
Следующие файлы в шаблоне отвечают за внешний вид интерфейса:
shop_setup_device_template— этот файл определяет переменнуюvar Shopи вызывает функциюShowUIдля отображения интерфейса, описанного в файлеui_shop;ui_shop— класс, объединяющий все виджеты в один файл Verse через интерфейс Verse. UMG отвечает за отображение изображения персонажа, сведений о предмете, заголовков, цены и списка предметов. API Verse управляет фоновыми слоями и кнопками;ui_shop_offer_item— класс, добавляющий кнопку «Просмотреть» для каждой строки предметов;link_volume_to_shop_device— сценарий устройства, который использует устройство «Область» в качестве триггера для отображения интерфейса магазина.
Интерфейс магазина
Дизайн основного интерфейса магазина реализован в элементе OverlayRoot. OverlayRoot использует блок материала для вызова экземпляров материалов, отвечающих за фон основного интерфейса и раздела с предложениями.
set OverlayRoot = overlay:
Slots := array:
overlay_slot:
Widget := BackgroundWidget
VerticalAlignment := vertical_alignment.Fill
HorizontalAlignment := horizontal_alignment.Fill
overlay_slot:
Widget := CloseButton
Padding := margin {Left := 824.0, Bottom := 30.0}
VerticalAlignment := vertical_alignment.Bottom
Дополнительный виджет наложения содержит стековое поле. Стековое поле используется для создания основного блока с предложениями. Последний слот стекового поля зарезервирован для OfferDetailsOverlayRoot — это виджет, который отвечает за отображение деталей предложения.
overlay_slot:
Widget := stack_box:
Orientation := orientation.Horizontal
Slots := array:
stack_box_slot:
Widget := stack_box:
Orientation := orientation.Vertical
Slots := array:
stack_box_slot:
Widget := HeaderWidget
PopulateOffers
Функция PopulateOffers создаёт нужное количество строк предметов для каждого предмета, указанного в OfferItemWidget, формируя повторяющееся действие для каждого предложения в стековом поле. Например, если у вас есть три предложения, функция создаёт три виджета предложений для каждого из ваших предметов.
PopulateOffers(InOffers:[]offer) : void =
for (Offer : InOffers):
var OfferItemWidget : ui_shop_offer_item = ui_shop_offer_item {}Для каждого предложения функция UpdateSelectedOfferDetails обновляет следующие данные:
название;
значок;
краткое описание;
цена.
UpdateSelectedOfferDetails(SelectedOffer : offer) : void =
var PriceFloat : float = 0.0
if (PriceVB := price_vbucks[SelectedOffer.Price]):
set PriceFloat = GetPriceVBucks(PriceVB)
Метод HandleBuyButtonClicked запускает процесс оплаты Epic Games, когда игрок совершает покупку.
HandleBuyButtonClicked(SelectedOffer : offer) <suspends> : void =
BuyButton.OnClick().Await()
if (PlayerUI := GetPlayerUI[Player]):
HideUI(PlayerUI)
BuyOffer(Player, SelectedOffer)
Триггер устройства
В этом примере устройство «Область» используется как триггер для открытия интерфейса магазина. В качестве триггера можно использовать любое устройство — или вообще не использовать устройства. Игроки могут подходить к предметам по отдельности — интерфейс магазина появится автоматически.
# A Verse-authored creative device that can be placed in a level
link_volume_to_shop_device := class(creative_device):
@editable
var ShopTemplate:shop_setup_device_template = shop_setup_device_template{}
@editable
var OfferVolume:volume_device = volume_device{}