Demo3 Craft
Examples/Demo3 Craft/CraftDemo.unity
Это пример slot-indexed inventory и крафта, где UI синхронизируется не со списком, а с фиксированными массивами данных.
Что показывает демо
SlotIndexedInventoryDataBinding- стол крафта и слот результата
- ограничение максимального стека на слот
CraftResultDataBindingкак кастомный тип инвентаря для доставания результата крафта
Как устроено
Центральная точка логики:
Crafting/CraftingManager.cs
Он хранит:
_hotbarItems_inventoryItems_craftTableItems- список рецептов
- текущий результат и множитель крафта
UI разбит на четыре независимых binding-а:
MainInventoryDataBindingHotbarDataBindingCraftTableDataBindingCraftResultDataBinding
Как работает
Обычные слоты:
- Binding перечисляет занятые индексы через
GetOccupiedSlots(). AddToSlotData(...)иRemoveFromSlotData(...)вызывают методыCraftingManager.- На
Awake()инвентари получаетSetMaxStackSize(CraftingManager.MaxItemsPerSlot)чтобы ограничить число предметов в слоте
Крафт:
- Изменение craft table обновляет массив
_craftTableItems. CraftingManager.RefreshCraftResult()ищет подходящий рецепт.CraftResultDataBinding.OnReloadUI()показывает результат и настраивает шаг drag-а.- Когда пользователь забирает результат,
OnItemRemovedFromUI(...)вызываетConsumeCraftIngredients(...).
Это хороший пример read-only слота, который не принимает входящий drop, но в зависимости от внешней логики создает предмет который можно вытащить.
Когда брать этот пример за основу
- нужен инвентарь с жёсткими индексами
- нужен крафт
- нужен пример выходного слота с эффектом после извлечения