Перейти к содержанию

Выделение

Система выделения позволяет выбрать несколько предметов и выполнить с ними одно действие: перетащить группу, снять выделение, выделить диапазон или выбрать все предметы в инвентаре.

Операции выделения

Действие Что происходит
Клик Снимает предыдущее выделение и выбирает один предмет
Ctrl + клик Добавляет предмет к выделению или убирает его
Shift + клик Выделяет диапазон от последнего выбранного слота до текущего
Ctrl + A Выделяет все непустые слоты текущего инвентаря
Escape Снимает выделение

Если слот пустой, операции выбора обычно его игнорируют. Это не даёт случайно выделять пустые ячейки вместо предметов.

Групповое перетаскивание

Если потянуть выделенный предмет, система переносит всю выбранную группу.

Важно понимать поведение:

  • каждый выбранный слот переносится отдельно
  • целевой слот используется как стартовая точка поиска места
  • предметы, для которых место найдено, переносятся
  • предметы, для которых места нет или проверка не прошла, остаются на месте
  • уже перенесённые предметы не откатываются из-за ошибки следующего предмета

Если включён частичный перенос, из стека может перейти только то количество, которое помещается в цель.

Swap для группового переноса не используется. Группа раскладывается в свободные или совместимые слоты.

После успешного группового переноса выделение автоматически снимается.

Перенос из разных инвентарей

По умолчанию можно выделить предметы из нескольких инвентарей, если ваши операции выбора это позволяют.

Если такой сценарий не нужен, включите _restrictToSameInventory. Тогда группа будет собираться только из одного инвентаря.

Настройка

  1. Добавьте SelectionManager на сцену. Обычно нужен один экземпляр на сцену.
  2. Добавьте SlotSelectionView на префаб слота. Он отвечает за визуальную подсветку выбранного слота.
  3. Настройте операции выбора через ввод:
  4. SelectionSlotAction в InteractionBindingsProfile для Ctrl + клик и Shift + клик.
  5. InputActionSelectionTrigger для горячих клавиш вроде Ctrl + A и Escape.
  6. 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