Выделение
Система выделения позволяет выбрать несколько предметов и выполнить с ними одно действие: перетащить группу, снять выделение, выделить диапазон или выбрать все предметы в инвентаре.
Операции выделения
| Действие | Что происходит |
|---|---|
| Клик | Снимает предыдущее выделение и выбирает один предмет |
| Ctrl + клик | Добавляет предмет к выделению или убирает его |
| Shift + клик | Выделяет диапазон от последнего выбранного слота до текущего |
| Ctrl + A | Выделяет все непустые слоты текущего инвентаря |
| Escape | Снимает выделение |
Если слот пустой, операции выбора обычно его игнорируют. Это не даёт случайно выделять пустые ячейки вместо предметов.
Групповое перетаскивание
Если потянуть выделенный предмет, система переносит всю выбранную группу.
Важно понимать поведение:
- каждый выбранный слот переносится отдельно
- целевой слот используется как стартовая точка поиска места
- предметы, для которых место найдено, переносятся
- предметы, для которых места нет или проверка не прошла, остаются на месте
- уже перенесённые предметы не откатываются из-за ошибки следующего предмета
Если включён частичный перенос, из стека может перейти только то количество, которое помещается в цель.
Swap для группового переноса не используется. Группа раскладывается в свободные или совместимые слоты.
После успешного группового переноса выделение автоматически снимается.
Перенос из разных инвентарей
По умолчанию можно выделить предметы из нескольких инвентарей, если ваши операции выбора это позволяют.
Если такой сценарий не нужен, включите _restrictToSameInventory. Тогда группа будет собираться только из одного инвентаря.
Настройка
- Добавьте
SelectionManagerна сцену. Обычно нужен один экземпляр на сцену. - Добавьте
SlotSelectionViewна префаб слота. Он отвечает за визуальную подсветку выбранного слота. - Настройте операции выбора через ввод:
SelectionSlotActionвInteractionBindingsProfileдля Ctrl + клик и Shift + клик.InputActionSelectionTriggerдля горячих клавиш вроде Ctrl + A и Escape.ButtonSelectionTriggerдля UI-кнопок "Выделить всё" и "Снять выделение".
Что проверять при проблемах
| Симптом | Что проверить |
|---|---|
| Предмет не добавляется к выделению | Есть ли SelectionManager на сцене |
| Нет подсветки | Есть ли SlotSelectionView на префабе слота |
| Ctrl/Shift не работают | Настроены ли нужные SelectionSlotAction в профиле ввода |
| Ctrl + A или Escape не работают | Подключён ли InputActionSelectionTrigger или другой trigger |
| Группа переносится не вся | Есть ли место в целевом инвентаре и проходят ли rules для каждого предмета |
Справочник классов
| Класс | Роль |
|---|---|
SelectionManager |
Хранит текущее выделение |
SelectionContext |
Состояние выделения на момент чтения |
SlotSelectionView |
Подсвечивает слот, если он выбран |
SelectionOperationBase |
Базовый класс операций выбора |
ClearAndSelectOperation |
Обычный клик: снять всё и выбрать один слот |
ToggleFilledSlotOperation |
Ctrl + клик: переключить непустой слот |
RangeSelectOperation |
Shift + клик: выбрать диапазон |
SelectAllOperation |
Ctrl + A: выбрать все непустые слоты |
ClearSelectionOperation |
Escape: снять выделение |
SelectByConditionOperation |
Выбор по условию |
SelectionSlotAction |
Действие выбора для pointer binding |
StartMultiDragAction |
Запускает перетаскивание выделенной группы |
ButtonSelectionTrigger |
Запускает операцию выбора через UI Button |
InputActionSelectionTrigger |
Запускает операцию выбора через Input System Action |