Проще говоря:
- **Что за «событие»?**
В UI Toolkit каждое действие — клик, движение мыши, нажатие клавиши — идёт по иерархии элементов: сначала к самому внутреннему элементу (Button), затем «всплывает» к его родителям (Panel, Window и т.д.).
- **Где вызывается `evt.StopPropagation()`?**
Вы пишете его внутри своего обработчика (например, у Button).
- **Что именно он «останавливает»?**
Как только Вы вызвали этот метод, событие **больше не поднимется выше** текущего элемента.
- Родительские элементы (Panel, Window…) его уже **не получат**.
- Их коллбеки не выполнятся, то есть им «выключили микрофон».
- **На кого не влияет?**
- На сам элемент, где Вы сейчас находитесь — текущий обработчик выполняется до конца.
- Стандартное действие элемента (например, нажатие кнопки) всё равно случится; для его отмены нужен `evt.PreventDefault()`.
- **Зачем это нужно?**
Если логика уже отработала на кнопке, незачем дергать остальных — экономите время процессора и избегаете нежелательных побочных эффектов.
> **Коротко:** вызвали у Button → Button обработал, его родители молчат.
### Пример
```csharp
// Самый короткий пример «до / после StopPropagation»
// 1. Добавьте UIDocument в сцену.
// 2. Повесьте этот скрипт на тот же объект.
using UnityEngine;
using UnityEngine.UIElements;
public class StopPropSimple : MonoBehaviour
{
void OnEnable()
{
var root = GetComponent<UIDocument>().rootVisualElement;
// Кнопка-дочка
var button = new Button { text = "Нажми" };
root.Add(button);
// Коллбек у кнопки
button.RegisterCallback<ClickEvent>(evt =>
{
Debug.Log("Button click");
evt.StopPropagation(); // ← уберите эту строку — увидите разницу
});
// Коллбек у корня
root.RegisterCallback<ClickEvent>(evt =>
{
Debug.Log("Root click");
});
}
}
```
- **С `StopPropagation()`** → в консоли только `Button click`.
- **Без него** → `Button click`, затем `Root click`.
То есть метод просто _обрывает дальнейший подъём события к родителям_, экономя лишние вызовы.