«Игнор» лишь говорит движку: «не выбирай меня как цель (не останавливай клики на мне), когда рассчитываешь, на что именно нажали»
```
PickingMode.Ignore
```
### То есть можно поставить picking mode на ignore и все равно подписываться на события, и эти события будут срабатывать, ловиться, даже если picking mode стоит на ignore, я правильно понимаю?
Да, верно — `PickingMode.Ignore` _только_ убирает элемент из **выбора цели** (hit-test), но **не исключает его из цепочки распространения события**.
### Как это устроено
1. **Определяется `target`.**
Для мыши/тача движок ищет самый верхний «пикабельный» (`PickingMode.Position`) элемент под курсором. Если элемент помечен `Ignore`, его пропускают. ([docs.unity3d.com](https://docs.unity3d.com/2020.1/Documentation/Manual/UIE-Events-Dispatching.html "Unity - Manual: Dispatching Events"))
2. **Строится путь распространения**:
`root → … → parent_of_target → target → parent_of_target → … → root`.
В этом списке присутствуют **все предки**, даже если для них стоит `Ignore`. ([docs.unity3d.com](https://docs.unity3d.com/2020.1/Documentation/Manual/UIE-Events-Dispatching.html "Unity - Manual: Dispatching Events"))
3. **Фаза Trickle-Down** идёт сверху вниз по этому пути (root → target). Ваш обработчик, зарегистрированный с `TrickleDown.TrickleDown`, срабатывает, потому что элемент всё равно есть в списке.
> Таким образом, `panel.visualTree` (корень) получает `PointerUpEvent` в Trickle-Down-фазе, даже когда:
>
> - он помечен `pickingMode = Ignore`;
>
> - целевой элемент был уничтожен до отпускания пальца.
>
### Демонстрация
```csharp
var root = uiDocument.panel.visualTree;
root.pickingMode = PickingMode.Ignore; // корень «невидим» для hit-test
root.RegisterCallback<PointerUpEvent>(e =>
{
Debug.Log(
quot;Root got PointerUp (id={e.pointerId}) "
+ quot;target={e.target.name}");
}, TrickleDown.TrickleDown);
```
_Зажмите кнопку, удалите её из иерархии, затем отпустите палец — сообщение появится, подтверждая, что событие дошло до корня._
---
### Когда события **не** дойдут
- Если зарегистрировать колбэк **без** указания фазы (по умолчанию bubbling), а кто-то ниже по дереву вызвал `evt.StopImmediatePropagation()`. Поэтому мы подписываемся именно на **Trickle-Down**.
---
Итого: можно смело оставлять `PickingMode.Ignore` для корня, чтобы он не перехватывал клики при выборе цели, и одновременно использовать его как «ловушку» для нужных событий — они всё равно дойдут в фазе захвата.