Что это: модуль инвентаря и подбираемых предметов: InventoryComponent, PickableItem, InventoryHand, InventoryDropper, UI-компоненты. Настройка в инспекторе и через код. Скрипты в Scripts/Tools/Inventory/.
Навигация: ← К Tools · оглавление — таблица ниже
| Элемент | Назначение |
|---|---|
| InventoryComponent | Основной компонент инвентаря в сцене: Aggregated или Slot Grid, Add/Remove, TryConsume, события, автосохранение в SaveProvider по Save Key (по умолчанию; на диск — SaveProvider.Save() при выходе/паузе), свойства для NeoCondition и GetCount(itemId). |
| PickableItem | Подбираемый предмет в мире: триггеры 2D/3D, ручной вызов Collect, выдача в InventoryComponent. |
| InventoryDropper | Отдельный модуль дропа: удаляет предметы из инвентаря и спавнит объект в мире с опциональной физикой. |
| InventoryHand | Система «руки»: один выбранный предмет в Hand Anchor; переключение влево/вправо, интеграция с Selector; при наличии HandView на предмете применяются офсеты и масштаб вьюшки, затем общий масштаб (по умолчанию дельта). |
| HandView | Вьюшка руки на префабе предмета: смещение позиции/поворота и базовый масштаб в руке; InventoryHand читает с экземпляра и применяет первой. |
| InventoryPickupBridge | Вспомогательный мост для вызовов Collect из UnityEvent (InteractiveObject, PhysicsEvents и т.д.). |
| ShopInventoryGrantBridge | Bridge, связывающий Shop и инвентарь. Listen на OnPurchasedId + таблица mappings shopItemId → InventoryItemData + amount. Цена опциональная связи: Shop остаётся без зависимости от Inventory. |
| InventoryItemData | ScriptableObject с описанием предмета (id, name, icon, maxStack, category, Supports Instance State). |
| InventoryDatabase | ScriptableObject-база предметов для lookup по id и ограничений maxStack. |
| InventoryInitialStateData | ScriptableObject с начальным заполнением инвентаря. |
| AggregatedInventory / SlotGridInventory | Чистые C# backend-хранилища без MonoBehaviour: старый агрегированный режим и режим физической сетки слотов. |
| InventoryView / InventoryItemView | UI-визуализация инвентаря (режим auto-spawn или manual), TextMeshPro + Image (все поля опциональны). |
| InventorySlotGridView / InventorySlotView | Фиксированная сетка слотов для хотбара, рюкзака и сундуков; простой клик-перенос через InventoryTransferService. |
InventoryItemData.MaxStack: -1 = бесконечный стак (по умолчанию), 1 = нестакаемый предмет. Для уникальных предметов с собственным состоянием включайте Supports Instance State.
Если у InventoryItemData.Icon не задана иконка, автоматически используется превью из WorldDropPrefab.
- Создайте
InventoryDatabaseи добавьте в негоInventoryItemData. - Добавьте
InventoryComponentна объект в сцене. - Назначьте
Database,Save Keyи (опционально)Initial State Data. - Выберите
Load Mode:UseSaveIfExists— приоритет save, иначе initial;MergeSaveWithInitial— merge initial + save;InitialOnlyIgnoreSave— только initial.
- Добавьте
PickableItemна префаб предмета:- укажите
Item DataилиitemId, - настройте
Amount, - включите сбор через
Collect On Trigger 3D/2Dили вызывайтеCollectчерез UnityEvent.
- укажите
- Подпишите события
OnItemAdded,OnInventoryChanged,OnLoadedдля UI/логики. - Для дропа по клавише: добавьте
InventoryDropper. Если есть InventoryHand (рука с предметом), назначьте этот Dropper в Hand → по G будет сбрасываться предмет из руки; у Dropper ввод по клавише при этом временно отключается. Без Hand оставьте у Dropper настройки по умолчанию (G,CanDrop = true) — дропается выбранный предмет. - При включённом Auto Save инвентарь сам пишет данные в SaveProvider при изменениях. Для записи на диск вызовите
SaveProvider.Save()при выходе или смене сцены. - Для Minecraft-style UI используйте
Slot Gridрежим иInventorySlotGridViewдля хотбара / сундуков.
Готовые сценарии с полями Inspector и связками компонентов:
- Агрегированный инвентарь, валюта, автосохранение — раздел «Примеры механик» в InventoryComponent.md.
- Хотбар + рюкзак + сундук + клик-перенос — там же (Minecraft-style) и InventorySlotGridView.md.
- Сетка + уникальные предметы с JSON-состоянием — InventoryComponent.md и InventoryItemState.md.
- Рука и физические слоты хотбара — InventoryHand.md (
Use Physical Slot Indices).
[SerializeField] private InventoryComponent inventory;
[SerializeField] private InventoryItemData coin;
private void GiveCoins(int amount)
{
inventory.AddItemData(coin, amount);
}
private bool TryBuy(int price)
{
return inventory.TryConsume(coin.ItemId, price);
}
// Условие по количеству: inventory.GetCount(itemId) >= N
if (inventory.GetCount(coin.ItemId) >= 10) { ... }- InventoryComponent — режимы хранения, save/load, таблица полей, примеры механик.
- InventorySlotGridView — сетка слотов UI, клик-перенос (
InventoryTransferService). - InventoryItemState —
IInventoryItemState, payload в save blob контейнера. - InventoryHand — рука, применение по E, дроп по G через Dropper; интеграция с Selector; HandView на предметах (офсеты и масштаб), масштаб руки — HandScaleMode (по умолчанию Relative, дельта).
- HandView — вьюшка руки на префабе предмета: позиция/поворот/масштаб в руке.
- PickableItem
- InventoryDropper — дроп в мир; при подключении через Hand обрабатывает DropEquipped, свойство AllowDropInput.
- InventoryView
- ShopInventoryGrantBridge — опциональная связка с модулем Shop.