Системы предметов и инвентарей — важная часть многих игр. Вы можете настраивать инвентарь игрока в Fortnite с помощью модулей и компонентов Scene Graph, создавая уникальные предметы для своего острова.
Предметы — это объекты, которые могут использовать и которыми могут владеть игроки и агенты. Инвентари включают в себя существующий инвентарь игрока Fortnite, а также любые пользовательские инвентари, которые вы создаёте с помощью компонента inventory_component. Пользовательский инвентарь и предметы — это система для создания и хранения предметов, а также управления ими. Эта система является экспериментальной функцией, которую необходимо включить в настройках проекта, а также использовать вместе с Scene Graph и Verse в Unreal Editor для Fortnite (UEFN).
Основы Scene Graph
Scene Graph — это система модулей и компонентов, построенная на основе Verse. Модули — это контейнеры для компонентов, которые наделяют их нужной функциональностью. Вы можете прикреплять модули друг к другу, связывая между собой родительские и дочерние объекты для создания иерархий. Повторно используемая конфигурация модулей и компонентов называется готовым элементом.
См. раздел Работа с модулями и компонентами для получения дополнительной информации о модулях и компонентах. См. раздел Готовые элементы и экземпляры готовых элементов для получения дополнительной информации о готовых элементах.
Предметы
Предметы создаются в Scene Graph путём добавления компонента item_component к модулю. Инвентари рассматривают компонент как объект. Компонент item_component предоставляет следующую функциональность:
Взятие в руки и отказ от предмета.
Названные категории для сравнения и сортировки.
Сам по себе компонент item_component предоставляет предмету ограниченные возможности. Дополнительные компоненты позволяют расширить функциональность и сделать поведение более интересным.
Более подробную информацию см. в разделе Компонент предмета.
Инвентарь
Инвентари — это контейнеры для предметов, которые управляют тем, что происходит с этими предметами. Инвентарь — это модуль с компонентом inventory_component, который работает следующим образом:
Отслеживает все предметы, находящиеся внутри него.
Управляет тем, какие предметы могут входить в инвентарь или покидать его.
Определяет, что происходит, когда новый предмет пытается объединиться с уже существующим в инвентаре.
Поскольку предмет одновременно может находиться только в одном инвентаре, сами по себе инвентари также определяют владельца модулей предметов. Вложенные модули инвентаря считаются предметами внутри него только в том случае, если у них также есть компонент item_component, иначе они считаются дочерними модулями.
По умолчанию в инвентаре может находиться бесконечное количество предметов любого типа. С помощью Verse вы можете задавать ограничения и правила, влияющие на добавление и удаление предметов. Примеры:
Добавлять предметы в инвентарь только при наличии нужной категории.
Ограничивайте количество предметов в инвентаре.
Запрещать удаление последнего предмета из инвентаря.
Разрешите предметам с более высоким приоритетом выбрасывать предметы с более низким приоритетом при переполнении инвентаря.
Ограничивайте инвентарь одним предметом.
Деревья инвентарей
Инвентари учитывают все инвентари, которые находятся под ними в иерархии Scene Graph. Такие дочерние инвентари называются вложенными инвентарями. Вы можете использовать дерево инвентарей разными способами.
Например, вы можете добавить предмет в родительский инвентарь, откуда он может попасть в более специализированный дочерний инвентарь. Представьте, что вы даёте игроку монету, которая проходит через систему инвентаря и попадает в кошелёк (Инвентарь игрока > Инвентарь рюкзака > Инвентарь кошелька).
Чтобы реализовать более сложную логику работы инвентаря, необходимо писать код на Verse.
Verse: инвентари
Существует два способа добавить предмет в инвентарь.
Вызвать
AddItem(), чтобы добавить предмет в конкретный инвентарь.Вызвать функцию
AddItemDistribute()и использовать иерархию инвентарей для поиска наиболее подходящего инвентаря или вложенного инвентаря.
При вызове функции AddItemDistribute(), целевой инвентарь и все его вложенные инвентари получают возможность обработать и принять предмет. После рассмотрения каждого варианта наиболее подходящий инвентарь пытается добавить предмет.
Корневой инвентарь игрока
По умолчанию у игроков есть инвентарь. Он называется корневым инвентарём. В отличие от других инвентарей, корневой инвентарь игрока не может принимать предметы. Вместо этого он выступает родителем для расположенных ниже вложенных инвентарей. Это позволяет использовать AddItemDistribute() для обращения к корневому инвентарю чтобы предмет мог найти подходящий инвентарь, даже если исходная цель не может его принять.
Чтобы игрок мог получать предметы, у него должен быть один или несколько вложенных инвентарей под корневым инвентарём.
Это пояснение не относится к модулям, у которых компонент inventory_component добавлен через Verse или через редактор готовых элементов.