Проще говоря: - **Что за «событие»?** В 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`. То есть метод просто _обрывает дальнейший подъём события к родителям_, экономя лишние вызовы.