Инвентарь
Хотя система инвентаря несколько не в духе игр вроде VN, нам поступило много запросов и просьб интегрировать таковую в Naninovel. Проект на GitHub служит как примером для создания и интеграции инвентаря в движок, так и расширением, которое вы можете легко настроить для Naninovel.
Демонтрационный проект показывает, как создать пользовательский интерфейс инвентаря с макетом сетки, разбиением на страницы и перетаскиванием окна, как добавить пользовательский сервис движка и связанное с ним меню конфигурации, добавить вводные привязки, использовать аутсорсинг состояния, авторские пользовательские команды сценария и функции выражений.
Вы можете клонировать репозиторий проекта с помощью клиента Git или скачать его в виде zip-архива.
WARNING
Пакет Naninovel не распространяется вместе с проектом, поэтому ошибки компиляции будут создаваться после его первого открытия; импортируйте Naninovel из Asset Store, чтобы исправить эти ошибки.
Установка
Чтобы настроить расширение инвентаря для существующего проекта Unity, используйте UPM чтобы установить пакет через следующий URL-адрес Git: https://github.com/Naninovel/Inventory.git?path=Assets/NaninovelInventory
; или скачайте и импортируйте NaninovelInventory.unitypackage вручную.
Использование
Чтобы создать готовый интерфейс инвентаря из шаблона, используйте контекстное меню ассета Create -> Naninovel -> Inventory -> Inventory UI
. Затем добавьте префаб для ресурсов UI Naninovel через меню редактора Naninovel -> Resources -> UI
. После добавления интерфейс может быть показан/скрыт, как и все другие UI, с помощью команд @showUI
и @hideUI
.
Компонент UI инвентаря имеет свойство Capacity
, с помощью которого вы можете изменить количество слотов в инвентаре. Сетка слотов настраивается (номер слота и макет, слоты на странице и т.д.) с помощью игрового объекта Content/InventoryGrid
. Поведение перетаскивания окна можно настроить (отключить) с помощью компонента Drag Drop
, прикрепленного к игровому объекту Content
.
Префабы предметов инвентаря можно создать с помощью контекстного меню ассета Create -> Naninovel -> Inventory -> Inventory Item
. Затем префабы предметов должны быть назначены в качестве ресурсов инвентаря через меню редактора Naninovel -> Resources -> Inventory
.
Если у вас много предметов и их неудобно назначать через меню редактора, можно просто поместить их в папку Resources/Naninovel/Inventory
, и они автоматически будут предоставлены движку. Вы можете дополнительно организовать их с помощью подпапок, если хотите; в этом случае используйте прямые косые черты (/
) при ссылке на них в сценариях Naninovel. Например, элемент, сохранённый как Resources/Naninovel/Inventory/Armor/FullPlate.prefab
, может использоваться в сценариях в качестве Armor/FullPlate
.
Также можно использовать адресируемую систему ассетов для ручного предоставления ресурсов. Чтобы предоставить доступ к ассету, назначьте адрес, равный пути, который вы использовали бы для его предоставления с помощью описанного выше метода, за исключением опущенной части "Resources/". Например, выставить "FullPlate.prefab", назначьте префабу следующий адрес:Naninovel/Inventory/FullPlate
. Имейте в виду, что адресируемый провайдер по умолчанию не используется в редакторе; вы можете разрешить его, включив свойство Enable Addressable In Editor
в меню конфигурации провайдера ресурсов.
Каждый предмет имеет свойство Stack Count Limit
, чтобы ограничить количество предметов этого типа, которые могут быть уложены в один слот инвентаря, и событие Unity On Item Used
, которое вызывается при использовании предмета (либо с помощью команды @useItem
, либо когда пользователь нажимает на предмет в инвентаре). Ниже приведен пример того, как вы можете настроить событие с помощью компонента Play Script
, чтобы удалить предмет после его использования, создать спецэффект сбоя и вывести текстовое сообщение.
Вы можете добавить предметы в инвентарь с помощью команды @addItem
и удалить с помощью команды @removeItem
(или @removeItemAt
, @removeAllItems
). ID предметов равны именам их префабов. ID слотов инвентаря равны индексам слотов сетки (например, первый слот равен 0, второй – 1 и т.д.).
Пользовательские функции ItemExist()
и ItemCount()
для проверки наличия предметов в инвентаре и количества существующих предметов также доступны для удобства.
Ниже приведен скрипт из демонстрационного проекта:
# Start
Select an action.[skipInput]
@choice "Pick up sword" if:!ItemExist("Sword") do:"@addItem Sword, @goto .Adventure"
@choice "Pick up armor" if:!ItemExist("Armor") do:"@addItem Armor, @goto .Adventure"
@choice "Adventure awaits, venture forth!"
@stop
# Adventure
@if ItemExist("Sword")
@set monstersSlayed="{ItemExist("Armor") ? Random(3,5) : 2}"
@addItem Food amount:{monstersSlayed}
You've encountered and slayed {monstersSlayed} monsters with your sword.[if !ItemExist("Armor")] You could've been more productive with an armor, though.[endif][i][showUI Inventory wait:false] Check your inventory for the loot!
@goto .Start
@else
But you don't have a weapon! You've been beaten by the monsters.[if ItemExist("Armor")] At least it didn't hurt that much, thanks to the armor.[endif] Let's prepare better next time.
@goto .Start
@endif