Ознакомьтесь с рекомендациями по работе с системой транзакций на острове, включая тестирование и отладку вашей витрины.
Использование устройства «Транзакции на острове» в Verse
Устройство «Транзакции на острове» содержит уже готовый шаблон для транзакций на острове. Содержит все реализации ключевых аспектов модуля магазина в API Verse. Сюда входят предметы, предложения, предлагаемые наборы, а также обработка покупок через интерфейс магазина по умолчанию. С помощью этого кода вы можете быстро подготовить собственную витрину.
Для доступа к устройству:
перейдите в проводник Verse;
щёлкните правой кнопкой мыши по названию вашего проекта;
выберите Добавить новый файл Verse в проект;
выберите устройство «Транзакции на острове».
Для использования готового кода перейдите к коду Verse и внесите изменения в следующие элементы:
названия предметов;
описания;
значки.
Замените названия по умолчанию в коде на названия, которые будут соответствовать вашим правам и предложениям.
Рекомендации по написанию кода
Вы можете оптимизировать свой код Verse, сделав его более масштабируемым и повысив тем самым производительность вашего острова.
Организация рабочего процесса
Одной из распространённых рекомендаций при программировании является разделение ответственности. Файлы и функции должны быть отведены под конкретные задачи, что облегчит работу с ними в будущем по мере того, как проект будет развиваться.
Таким образом ваш код будет более компактным, организованным и читаемым, что, помимо прочего, упрощает процесс отладки.
В чём проявляется такой подход при работе с системой транзакций:
размещение определений предметов в отдельном файле;
размещение предложений, включая предлагаемые наборы, в отдельном файле;
создание устройства, обрабатывающего все статичные и заранее определённые предложения;
создание устройства для обработки только динамически создаваемых предложений;
создание устройства для обработки только покупок.
Разбиение на модули
Модули — это целостные единицы кода, которые можно перераспределять для использования в нескольких файлах. В модули можно вносить изменения в любое время, не нарушая зависимости в файлах, в которых тот или иной модуль уже используется. Вы можете вынести длинные или повторяющиеся части кода, например определения прав доступа, в отдельный файл, а затем импортировать их с помощью оператора using.
Одним из основных преимуществ использования модулей является то, что при таком подходе вам достаточно определить переменную в модуле лишь единожды и только в одном месте. Таким образом вы можете передавать данные между различными файлами Verse путём импорта нужного модуля и обращения к нужной переменной. В случае возникновения каких-либо ошибок данных в модуле такой подход сокращает область поиска возможной причины до одного конкретного модуля без необходимости проверять все части кода, где вы использовали содержимое этого модуля.
В приведённом ниже примере показано, как определить информацию о праве доступа CornSeedPacket в модуле.
EntitlementInfo<public> := module:
CornSeedPacket<public> := module:
Name<public><localizes> : message = "Corn seed pack"
Description<public><localizes> : message = "A pack of corn seeds. Opening a pack yields 10 corn seeds for planting."
ShortDescription<public><localizes> : message = "Contains 10 corn seeds for planting."Как EntitlementInfo, так и CornSeedPacket определены как модули, что позволяет импортировать всю информацию о праве доступа и напрямую обращаться к нужным переменным из CornSeedPacket, например к переменной Name.
В этом фрагменте кода показано, как импортировать модуль EntitlementInfo для определения права доступа corn_seed_pack.
Обратите внимание, что нет необходимости повторно вводить строки переменных, таких как Name, поскольку вы обращаетесь к ним напрямую через модуль CornSeedPacket. Это позволяет избежать возможных ошибок, к примеру, опечаток.
Entitlements<public> := module:
using { EntitlementInfo }
# Using custom entitlement class to distinguish your entitlements.
my_island_entitlement<public> := class<abstract><castable>(entitlement){}
corn_seed_pack<public> := class<concrete>(my_island_entitlement):
var Name<override> : message = CornSeedPacket.Name
var Description<override> : message = CornSeedPacket.Description
var ShortDescription<override> : message = CornSeedPacket.ShortDescription
При использовании оператора using необходимо указать путь к модулю, который вы хотите импортировать. Конкретно в этом примере нам не требуется путь, поскольку предполагается, что модуль находится в той же папке.
Оптимизация производительности острова
Чтобы сделать процесс более отзывчивым, вы можете определить методы покупки и выдачи предметов с эффектом <suspends> и вызывать их с помощью spawn.
Это позволяет функции TryBuyOffer выполняться асинхронно, пока остальные части игровой логики продолжают работать. Кроме того, благодаря такому подходу сама игра не будет приостанавливаться на время выполнения транзакции.
TryBuyOffer(Player:player, Offer:offer)<suspends>:void=
Result := BuyOffer(Player, Offer)
OnButtonInteraction(Agent:agent):void=
if (Player := player[Agent]):
spawn{TryBuyOffer(Player, OfferType)}
Рекомендации по использованию значков
К игровым текстурам предъявляются определённые требования, чтобы они корректно отображались в игре. При создании текстур в UEFN из импортированных изображений убедитесь, что файл исходного изображения имеет высоту и ширину в виде степени двух. Это повысит стабильность и совместимость вашего острова при запуске на разных платформах.
Принцип степеней двух также используется при подгрузке текстур, чтобы снизить разрешение текстур на платформах с меньшим объёмом памяти.
Подгрузка текстур помогает решать следующие задачи:
изменение разрешения текстуры;
определение скорости загрузки игры;
повышение качества графики игры;
экономия памяти графического процессора.
Более подробная информация о правиле степени двух и изменении размера текстур приведена в статье Изменение размера текстур.
Более подробная информация об импорте пользовательских ресурсов в UEFN приведена в статье Импорт ресурсов. Более подробную информацию о том, как открывать доступ к таким ресурсам, как текстуры в Verse, можно найти в статье Доступ к ресурсам.
Тестирование и отладка ваших прав доступа
Сеансы редактирования по сети и закрытого тестирования предназначены для отладки. Такие сеансы отладки позволяют взаимодействовать с системой транзакций, правами и предложениями следующим образом:
транзакции не приводят к списанию В-баксов с аккаунтов;
Выданные и купленные права удаляются в конце сеанса отладки.
в сеансах отладки предусмотрен доступ к меню Команды отладки.
Ваши предложения должны быть доступны в частной и тестовой версии острова для всех участников команды на этапе тестирования. Предлагаемые предметы ещё не считаются выпущенными. Выпущенными предложения начинают считаться после публикации острова и его открытия для игроков.
Доступ к меню команд отладки
Для доступа к меню «Команды отладки» достаточно нажать Esc на ПК или кнопку Start/Options на контроллере, а затем выбрать пункт «Команды отладки» в меню.
Команды отладки магазина
Команды отладки для вашей витрины вы можете найти в разделе «Команды отладки магазина», где имеется доступ к следующим командам.
Название команды | Описание |
Открыть витрину | Отображает динамический интерфейс магазина с предложениями всех доступных прав, позволяя игрокам приобрести их по отдельности. Здесь вы можете выбрать отдельное право доступа для тестирования. |
Выдать все права | Заполняет инвентарь этого игрока, чтобы он получил максимальное количество доступных прав доступа. Вы также можете проверять, сможет ли игрок получить тот или иной предмет в зоне, где такой доступ не предусмотрен. |
Выдать одно право доступа | Выдаёт игроку по одному праву доступа каждой разновидности. Позволяет выдать игроку большое количество прав, при этом оставив место в инвентаре, чтобы тестировать покупки расходуемых прав доступа, не достигая максимального количества. Если выдача права доступа будет конфликтовать с Вы также можете проверять, сможет ли игрок получить тот или иной предмет в зоне, где такой доступ не предусмотрен. |
Принудительно удалить права доступа | Удаляет все имеющиеся права доступа из инвентаря игрока. Позволяет сбросить инвентарь игрока и продолжить тестирование системы покупок. Может пригодиться для работы с Кроме того, команда также подходит для ускорения итерации при тестировании за счёт быстрого сброса инвентаря. |
Печать имеющихся вариантов прав доступа | Выводит все варианты прав в журнале выходных данных. |
Постоянная блокировка покупок | Отключено по умолчанию. Если установлено «ОТКЛ.», система покупок работает в обычном режиме. Если установлено «ВКЛ.», покупки не будут проходить независимо от условий, при которых они должны были бы пройти успешно. Параметр «Постоянная блокировка покупок» полезен для тестирования случаев, когда |