Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

События захвата информируют вас об изменениях в состоянии захвата мыши. UI(пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь
В Toolkit предусмотрено два типа захвата событий:

  • События захвата мыши
  • События захвата указателя

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

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

Событие Описание Стекает вниз Пузыри вверх Отменяемый
MouseCaptureEvent Отправляется, когда элемент захватывает мышь.
MouseCaptureOutEvent Отправляется, когда элемент освобождается или иным образом теряет захват мыши.
PointerCaptureEvent Отправляется, когда элемент захватывает указатель.
PointerCaptureOutEvent Отправляется, когда элемент освобождает указатель.

Поведение

Захват мыши

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

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

Не может быть двух элементов, которые захватывают мышь одновременно. Если другой визуальный элемент инициирует MouseCaptureEvent, элемент, отправивший исходное MouseCaptureEvent, теряет захват. Это также вызывает событие MouseCaptureOutEvent для исходного элемента.

Захват указателя

События указателя предшествуют событиям мыши в UI Toolkit. Если тип указателя — мышь, его захват также вызовет соответствующие события захвата мыши. Захват указателя также захватит мышь.

Список событий

Событие захвата мыши

Событие MouseCaptureEvent отправляется, когда элемент захватывает мышь.

target: элемент, который получает захват.

MouseCaptureOutEvent

Событие MouseCaptureOutEvent отправляется, когда элемент освобождается или теряет захват мыши.

target: элемент, который теряет захват.

Событие PointerCapture

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

target: элемент, который получает захват.

Событие PointerCaptureOut

Событие PointerCaptureOutEvent отправляется, когда элемент освобождается или теряет захват указателя.

target: элемент, который теряет захват.

Примеры

В следующем примере демонстрируется поведение событий захвата, а также захват и освобождение указателей.

Чтобы увидеть пример в действии, сделайте следующее:

  1. В разделе Ресурсы > Сценарии > Редактор создайте новый файл C# с именем CaptureEventsTestWindow.cs
  2. Скопируйте пример в сценарий C#.
  3. На панели инструментов редактора выберите Окно > Набор инструментов пользовательского интерфейса > Тестовое окно захвата событий.
  4. Нажимайте различные метки в диалоговом окне и наблюдайте за выводом в консоли.
using UnityEditor; using UnityEngine; using UnityEngine.UIElements; public class CaptureEventsTestWindow : EditorWindow { [MenuItem("Window/UI Toolkit/Capture Events Test Window")] public static void ShowExample() { var wnd = GetWindow(); wnd.titleContent = new GUIContent("Capture Events Test Window"); } private bool m_IsCapturing = false; public void CreateGUI() { // Add a few clickable labels that print a message to the console when clicked for (int i = 0; i < 4; i++) { Label clickableLabel = new Label($"Label {i} - Click Me!"); clickableLabel.RegisterCallback((evt) => { Debug.Log($"Clicked on label '{(evt.target as Label).text}'"); }); rootVisualElement.Add(clickableLabel); } // Now add a label that captures the pointer Label capturingLabel = new Label("Click here to capture mouse"); capturingLabel.RegisterCallback((evt) => { if (!m_IsCapturing) { capturingLabel.text = "Click here to release mouse"; MouseCaptureController.CaptureMouse(capturingLabel); m_IsCapturing = true; } else { capturingLabel.text = "Click here to capture mouse"; MouseCaptureController.ReleaseMouse(capturingLabel); m_IsCapturing = false; } }); rootVisualElement.Add(capturingLabel); // Register callbacks to print a message when the mouse is captured or released rootVisualElement.RegisterCallback((evt) => { Debug.Log("Mouse captured"); }); rootVisualElement.RegisterCallback((evt) => { Debug.Log("Mouse captured released"); }); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3