Skip to content

Latest commit

 

History

History
53 lines (42 loc) · 3.85 KB

File metadata and controls

53 lines (42 loc) · 3.85 KB

InventoryComponent

Назначение: Главный менеджер инвентаря. Отвечает за хранение предметов, управление лимитами (максимальные стаки, вместимость слотов) и автоматическое сохранение прогресса. Поддерживает работу как с физическими слотами (SlotGrid), так и с общим списком предметов (Aggregated).

Поля (Inspector)

Поле Описание
Database Ссылка на InventoryDatabase для получения информации о предметах и их максимальных стаках.
Storage Mode Тип хранения: Aggregated (общий безразмерный список) или SlotGrid (ограниченная сетка слотов).
Slot Count Количество ячеек (используется только если выбран режим SlotGrid).
Save Key Уникальный ключ для SaveProvider, по которому инвентарь будет сохранять данные.
Auto Load / Auto Save Автоматически загружать данные при старте и сохранять при каждом изменении содержимого.

API

Метод / Свойство Описание
int TotalItemCount { get; } Возвращает общее количество всех предметов в инвентаре.
int GetCount(int itemId) Возвращает текущее количество предметов с указанным ID.
int AddItemByIdAmount(int itemId, int amount) Добавляет предметы в инвентарь (если есть место). Возвращает реально добавленное количество.
bool TryConsume(int itemId, int amount) Пытается списать (потратить) указанное количество. Возвращает true, если предметов хватило.
void Clear() Полностью удаляет все предметы из инвентаря.

События (Unity Events)

Событие Аргументы Описание
OnInventoryChanged (нет) Вызывается при любом изменении инвентаря (добавление, удаление, перемещение). Удобно для обновления UI.
OnItemAdded int itemId, int amount Вызывается при успешном добавлении предмета.
OnItemRemoved int itemId, int amount Вызывается при успешном удалении/трате предмета.
OnCapacityRejected int itemId, int amount Вызывается, если инвентарь полон и предмет не влез.

Примеры

Пример No-Code (в Inspector)

Вы можете привязать UI-текст или звуковой эффект к событию OnInventoryChanged прямо в инспекторе, чтобы обновлять интерфейс каждый раз, когда игрок что-то подбирает.

Пример (Код)

// Проверяем, есть ли у нас 5 монет, и если да — тратим их
if (InventoryComponent.I.GetCount(10) >= 5) 
{
    InventoryComponent.I.TryConsume(10, 5);
    Debug.Log("Покупка совершена!");
}

См. также