Эта функция находится на этапе экспериментальной версии. Вы можете опробовать её, оставить отзыв и узнать, что мы планируем делать с ней дальше. На данный момент нельзя публиковать проекты, в которых используются пользовательский инвентарь и предметы.
Обратите внимание: мы не можем гарантировать обратную совместимость для ресурсов, созданных на экспериментальном этапе. API для этих функций могут меняться, при этом мы можем полностью удалить экспериментальные функции или отдельные их части по своему усмотрению. Прежде чем приступать к работе с этой функцией, ознакомьтесь со списком известных проблем.
Системы предметов и инвентаря — это важная часть многих игр. С помощью модулей и компонентов Scene Graph можно настраивать инвентарь игроков Fortnite и создавать на своём острове уникальные пользовательские предметы.
Предметы — это объекты на острове, которые могут использовать и которыми могут владеть игроки и агенты. Инвентари включают в себя существующий инвентарь игрока Fortnite, а также любые пользовательские инвентари, которые вы создаёте с помощью компонента inventory_component. Пользовательский инвентарь и предметы — это система для создания и хранения предметов, а также управления ими. Это экспериментальная функция, которую необходимо включить в настройках проекта: она и будет использоваться со Scene Graph в UEFN и Verse.
Основы Scene Graph
Scene Graph — это система модулей и компонентов, построенная на основе Verse. Модули — это контейнеры для компонентов, которые наделяют их нужной функциональностью. Вы можете прикреплять модули друг к другу, связывая между собой родительские и дочерние объекты для создания иерархий. Повторно используемые расположения модулей и компонентов называются готовыми элементами. Более подробную информацию о модулях и компонентах можно найти в разделе «Работа с модулями и компонентами». Подробнее о готовых элементах в Scene Graph читайте в разделе «Готовые элементы и экземпляры готовых элементов».
Известные проблемы
Пользовательский инвентарь и предметы — это первая система, которая использует Scene Graph в UEFN. По этой причине в экспериментальной версии могут встречаться определённые программные ошибки. Ознакомиться со списком известных проблем вы можете здесь. Мы уже работаем над множеством исправлений и улучшений, которые будут выпущены в одной из будущих версий.
Предметы
Предмет — это модуль в Scene Graph, который содержит компонент item_component. По умолчанию предметы можно объединять и складывать, для них можно создавать категории для сравнения и сортировки, а также их можно брать в руки и убирать обратно.
Поскольку пользовательская система инвентаря и предметов задействует Scene Graph, вы можете добавлять компоненты к предметам для расширения их возможностей. Система уже включает в себя набор базовых компонентов, которые перечислены в таблице ниже.
| Компонент | Описание |
|---|---|
| Этот компонент преобразует модуль в предмет. Он также добавляет ему следующие свойства: возможность объединяться с другими аналогичными предметами, а также возможность находиться под управлением инвентаря. |
| Хранит значок предмета, который будет отображаться в интерфейсе Fortnite. |
| Содержит текстовые данные, такие как название и описание предмета. |
| Хранит ресурс сетки, представляющий предмет в игре. |
| Этот компонент позволяет работать с предметом так же, как с подбираемым предметом в Fortnite. Включает в себя подсказку о взаимодействии (подборе), интерфейс и анимации подбора/сбрасывания. |
Предмет может содержать только один компонент каждого типа. Сюда входят компоненты, которые наследуются от других компонентов, уже присоединённых к предмету.
К примеру, если вы создаёте собственный компонент для конкретного предмета, который будет дочерним элементом компонента item_component, ваш новый компонент предмета будет отображаться вместо стандартного.
Модульность предметов
Благодаря пользовательскому инвентарю и предметам мы можем реализовать модульность. Это означает, что вы можете использовать компоненты для наращивания функциональности предметов. Ниже приведены примеры компонентов, прикреплённых к модулю предмета, который обеспечивает необходимыми функциями.
Модуль
item_component: преобразует модуль в предмет.item_details_component: хранит текстовые данные, такие как описание и название предмета.item_icon_component: хранит значок предмета, который будет отображаться в интерфейсе Fortnite.mesh_component: хранит ресурс сетки, представляющий предмет в игре.
Инвентарь
Инвентарь — это модуль, у которого есть компонент inventory_component.
Инвентарь выполняет роль контейнера для модулей предметов, при этом именно он позволяет управлять тем, что будет происходить с предметами в нём.
В системе пользовательского инвентаря и предметов используются как основные инвентари, так и вложенные инвентари для распределения предметов. Это упрощает сортировку, добавление и извлечение предметов при работе с инвентарём. Поскольку предмет одновременно может находиться только в одном инвентаре, сами по себе инвентари также определяют владельца модулей предметов.
По умолчанию в инвентаре может находиться бесконечное количество предметов любого типа. При этом вы также можете создавать ограничения и правила, которые будут определять, какие предметы можно будет добавлять в инвентарь. Ниже представлены примеры таких ограничений и правил:
Добавляйте предметы в инвентарь, только если они соответствуют запросу требуемого типа.
Ограничивайте количество предметов в инвентаре.
Разрешите предметам с более высоким приоритетом выбрасывать предметы с более низким приоритетом при переполнении инвентаря.
Ограничивайте инвентарь одним предметом.
Если функцию AddItem() не удаётся выполнить для целевого инвентаря, будет выполнен поиск других инвентарей, в которых может находиться этот предмет. Сама функция использует иерархии Scene Graph:
сначала она попытается добавить предмет в инвентари того же уровня (инвентари, у которых есть общий родительский инвентарь с исходным целевым инвентарём), а затем она проверит вложенные инвентари (вложенные инвентари исходного целевого инвентаря). Эта функция проверит все инвентари в иерархии, прежде чем вернуть результат с ошибкой.
Фильтрация инвентарей: события сцены
Когда при вызове функции AddItem() выбирается инвентарь, он получает событие сцены (add_item_event). При переопределении функции OnReceive() в компоненте можно активировать пользовательскую логику, которая будет влиять на сам предмет. Это позволит применять правила инвентаря, такие как проверка типа предмета перед добавлением, использование только определённого количества предметов в инвентаре и т. д. Событие OnReceive() реализовано в базовом классе компонента и доступно для всех компонентов Scene Graph.
Событие add_item_event собирает ответы от всех инвентарей, которых оно достигает. Вы можете сделать так, чтобы компоненты инвентаря изменяли событие и делали так, чтобы эти компоненты инвентаря сами предлагались для получения добавляемого предмета. Такое событие содержит массив inventory_with_priority, который можно задать и обновить с помощью целевого инвентаря. Это позволяет сделать целевой инвентарь приоритетным для получения предмета. При отправлении события сцены все инвентари с заданным приоритетом будут рассматриваться для добавления этого предмета, при этом сам предмет будет добавлен в инвентарь с наивысшим приоритетом.
На текущий момент пользовательский инвентарь и предметы представлены в экспериментальной версии, поэтому доступным будет только событие add_item_event. При этом в будущих обновлениях планируется добавление других событий.
Инвентари Fortnite
Система пользовательского инвентаря и предметов включает в себя несколько подклассов inventory_component, называемых fort_inventory_components. В них есть возможность фильтрации предметов, а также присутствуют элементы интерфейса, имитирующие инвентарь игрока в Королевской битве Fortnite.
| Компонент | Описание |
|---|---|
| Соответствует ячейке инструмента для добычи ресурсов в инвентаре игрока Fortnite по умолчанию. |
| Соответствует панели быстрого доступа в инвентаре игрока Fortnite по умолчанию. |
| Соответствует панели быстрого доступа инструментов строительства в инвентаре игрока Fortnite по умолчанию. |
| Соответствует ячейке для ловушки в инвентаре игрока Fortnite по умолчанию. |
| Соответствует секции валюты в инвентаре игрока Fortnite по умолчанию. |
| Соответствует секции коллекционных предметов в инвентаре игрока Fortnite по умолчанию. |
| Соответствует секции боеприпасов в инвентаре игрока Fortnite по умолчанию. |
Вы также можете создать собственную конфигурацию вложенных инвентарей, в которых предусматриваются следующие операции: добавление, удаление или замена инвентаря игрока по умолчанию.
Другими словами, детальная проработка предметов и инвентаря зависит от количества компонентов, добавляемых к предметам или модулям инвентаря. По мере развития системы пользовательского инвентаря и предметов будет добавляться больше компонентов, расширяющих возможности системы.