Эта функция находится на этапе экспериментальной версии. Вы можете опробовать её, оставить отзыв и узнать, что мы планируем делать с ней дальше. На данный момент нельзя публиковать проекты, в которых используется система предметов.
Важный момент: мы не гарантируем обратную совместимость для ресурсов, создаваемых на этом экспериментальном этапе. API этих функций могут меняться, и мы оставляем за собой право полностью удалить экспериментальные функции или отдельные их части по своему усмотрению. Прежде чем приступать к работе с этой функцией, ознакомьтесь со списком известных проблем.
inventory_component — это компонент Scene Graph, используемый в качестве контейнера для предметов. О том, как добавить компонент к модулю, см. в разделе Работа с модулями и компонентами.
Модули считаются предметами только в том случае, если у них есть item_component. Без него модули не будут добавляться в инвентарь, а функции пользовательских предметов и инвентарей могут не работать.
Под термином «предмет» подразумевается модуль с
item_component.Под термином «инвентарь» подразумевается модуль с
inventory_component.
Описание класса
inventory_component используется в качестве контейнера для хранения предметов. Предметы, добавленные в инвентарь, становятся дочерними элементами модуля inventory_component. Помимо обычных иерархических функций Scene Graph инвентари могут управлять самими собой и принадлежащими им предметами с помощью определённых свойств и методов:
Добавляйте или удаляйте предметы с помощью
AddItem()иRemoveItem().Для получения предметов можно использовать
GetItem()иFindItems(). Функции Get возвращают непосредственные дочерние элементы, а функции Find — все дочерние элементы.Для поиска других инвентарей используются
GetInventories()иFindInventories().События, на которые нужно подписаться, например
AddItemEventиRemoveItemEvent.GetEquippedItems()можно использовать для снаряжения, а событияEquipItemEventиUnequipItemEvent— для его отслеживания.
С inventory_component любой модуль может стать сумкой или рюкзаком, сундуком с добычей или даже раскладкой персонажа с оружием и способностями.
С помощью инвентаря можно различными способами добавлять и удалять предметы. Один из полезных методов связан с событиями сцены. При вызове функции AddItem() транслируется событие сцены, на которое могут отреагировать компоненты. Когда событие сцены достигает компонента, возникает событие OnReceive(), которое можно переопределить для активации логики.
В экспериментальной версии пользовательских предметов и инвентарей также появился ещё один метод управления добавлением, удалением и объединением предметов. Создав подкласс типа inventory_rule_interface, можно написать новые переопределения для CanAdd(), CanRemove() и CanMerge(). Эти правила можно добавить в InventoryRuleList с помощью функции AddRule(). Обратите внимание, что эта функция не сохранится после экспериментальной версии.
Этот компонент указан как inventory_component в выпадающем списке компонентов. Более подробная информация о компоненте
inventory_component представлена в справочнике по Verse API.
Инвентари и Scene Graph
Система пользовательских предметов и инвентарей предоставляет базовые настройки, которые нужно понять, чтобы использовать с наибольшей эффективностью.
Все игроки начинают с корневого инвентаря, который представляет собой модуль с inventory_component, присоединённый к модулю игрока. Этот корневой инвентарь также имеет ряд подинвентарей fort_inventory_component. Они необходимы для сохранения функциональности Fortnite. Подробную информацию об этих компонентах см. в разделе Компонент инвентаря Fortnite.
Благодаря методу перемещения по Scene Graph корневой инвентарь всегда будет находиться первым при поиске в дереве модулей с inventory_component. По этой причине новые инвентари целесообразно присоединять к корневому инвентарю.
# Helper function that gets the first descendant inventory component from an agent.
# This will be the root inventory.
GetAgentInventory(Agent:agent)<decides><transacts>:inventory_component=
TargetInventory := (for (I : Agent.FindDescendantComponents(inventory_component)) { I })[0]Корневой инвентарь прикреплён к игроку, а все подинвентари прикреплены к корневому инвентарю. Новые инвентари следует добавлять в корневой инвентарь, чтобы другим системам достаточно было найти один корневой инвентарь и взаимодействовать с ним.
Пример
Добавление inventory_component к модулю в редакторе заготовок позволяет хранить предметы в качестве инвентаря.
У сундука ниже есть inventory_component. Теперь можно использовать все функции этого компонента.
Однако, чтобы получить наилучшие результаты от пользовательских предметов и инвентарей, нужно использовать Verse:
using { /Fortnite.com/Devices }
using { /Fortnite.com/Itemization }
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Itemization }
# This device will give an inventory to all players
# It will then make a dummy item and give it to the inventory.
inventory_giver_device := class(creative_device) :
Общее требование к инвентарям — применять правила, определяющие, какие предметы могут находиться внутри. Ниже приведён сценарий для пользовательского inventory_component, который переопределяет метод компонента
OnReceive(). В следующем примере он используется для создания правила максимального размера инвентаря:
# This custom inventory component overrides the OnReceive function.
# This will allow us to determine whether or not we want an entity with this inventory component, to receive items.
custom_inventory_component := class(inventory_component) :
# What is the maximum number of items allowed in this inventory?
@editable
MaximumItemSlots:int = 5
Примеры инвентаря в игровом процессе, а также использования inventory_component см. в руководствах в разделе Пользовательские предметы и инвентари со Scene Graph.