События мыши происходят, когда вы взаимодействуете с UI(пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. Словарь с помощью мыши. Сенсорный экран, перья или другие указывающие устройства генерируют другие события, а не события мыши.
В API событий мыши и в этой документации термин «мышь» относится только к физической мыши или виртуальной мыши, которая эмулирует физическую мышь.
Событию мыши всегда предшествует соответствующее событие PointerEvent
.
Базовым классом для всех событий мыши является MouseEventBase.
Событие | Описание | Стекает вниз | Пузыри вверх | Отменяемый |
---|---|---|---|---|
MouseDownEvent | Отправляется, когда пользователь нажимает кнопку мыши. | ✔ | ✔ | ✔ |
MouseUpEvent | Отправляется, когда пользователь отпускает кнопку мыши. | ✔ | ✔ | ✔ |
MouseMoveEvent | Отправляется, когда пользователь перемещает мышь. | ✔ | ✔ | ✔ |
WheelEvent | Отправляется, когда пользователь активирует колесико мыши. | ✔ | ✔ | ✔ |
MouseEnterWindowEvent | Отправляется, когда мышь входит в окно. | ✔ | ||
MouseLeaveWindowEvent | Отправляется, когда мышь покидает окно. | ✔ | ||
MouseEnterEvent | Отправляется, когда мышь входит в элемент или один из его потомков. | ✔ | ✔ | |
MouseLeaveEvent | Отправляется, когда мышь покидает элемент или одного из его потомков. | ✔ | ✔ | |
MouseOverEvent | Отправляется, когда мышь входит в элемент. | ✔ | ✔ | ✔ |
MouseOutEvent | Отправляется, когда мышь покидает элемент. | ✔ | ✔ | ✔ |
ContextClickEvent (obsolete) | Отправляется, когда пользователь нажимает и отпускает третью кнопку мыши. Существует для обратной совместимости с IMGUI. | ✔ | ✔ | ✔ |
Уникальные свойства
button
: свойство button
возвращает целое число, определяющее кнопку мыши, нажатую для срабатывания мероприятие. В следующей таблице перечислены целые числа и связанные с ними кнопки мыши:
Целое число | Кнопка |
---|---|
0 | Левая кнопка |
1 | Правая кнопка |
2 | Средняя кнопка |
pressedButtons
: свойство pressedButton
возвращает целое число, определяющее, какая комбинация кнопок мыши в данный момент нажата.
Число представляет собой сумму целочисленных значений отдельных кнопок (см. таблицу ниже). Например, если одновременно удерживать правую кнопку мыши и среднюю кнопку мыши, значение PressButton будет равно 6.
Целое число | Кнопка |
---|---|
1 | Левая кнопка |
2 | Правая кнопка |
4 | Средняя кнопка |
модификаторы
. Свойство модификаторы
возвращает клавишу-модификатор, нажатую во время события клавиатуры. Некоторыми примерами модификаторов являются клавиши Shift
, Ctrl
или Alt
.
Для получения дополнительной информации см. ключи-модификаторы. раздел документации MDN.
mousePosition
: свойство mousePosition
возвращает положение мыши на панели, также известное как система координат экрана. Дополнительную информацию о координатах панели см. на странице визуального дерева.
localMousePosition
: свойство localMousePosition
возвращает координаты относительно целевого визуального элемента.< /p>
mouseDelta
: разница между положением указателя во время предыдущего события мыши и его положением во время текущего события мыши.
Список событий
В следующем списке указаны имя, описание и цель каждого события в семействе событий. Дополнительную информацию о событии см. в API набора инструментов пользовательского интерфейса.
Событие MouseDown
Событие MouseDownEvent отправляется при нажатии кнопки мыши, когда курсор находится внутри визуального элемента.
target
: визуальный элемент, который получает захват мыши. В противном случае это самый верхний выбираемый элемент под курсором.
MouseUpEvent
Событие MouseUpEvent срабатывает, когда кнопка мыши отпускается, когда курсор находится внутри визуального элемента. MouseUpEvent
дополняет MouseDownEvent
.
target
: визуальный элемент, который получает захват мыши. В противном случае это самый верхний выбираемый элемент под курсором.
СобытиеMouseMoveEvent
Событие MouseMoveEvent отправляется, когда активная точка курсора перемещается внутри визуального элемента.
target
: визуальный элемент, который получает захват мыши. В противном случае это самый верхний выбираемый элемент под курсором.
Событие колеса
Событие WheelEvent отправляется при нажатии колесика мыши.
target
: визуальный элемент, который получает захват мыши. В противном случае это самый верхний выбираемый элемент под курсором.
MouseEnterWindowEvent
MouseEnterWindowEvent срабатывает, когда курсор перемещается в окно редактора. Панели выполнения не получают это событие, когда вы входите в окно просмотра игры.
target
: визуальный элемент, который получает захват мыши. В противном случае это самый верхний выбираемый элемент под курсором.
MouseLeaveWindowEvent
MouseLeaveWindowEvent срабатывает, когда курсор покидает пространство окна редактора. MouseLeaveWindowEvent
является противоположностью MouseEnterWindowEvent
.
target
: визуальный элемент, который получает захват мыши. В противном случае возвращается значение null, так как курсор не находится над элементом.
MouseEnterEvent
Событие MouseEnterEvent отправляется, когда курсор перемещается в визуальный элемент или один из его потомков.
target
: визуальный элемент под курсором мыши или один из его потомков.
MouseLeaveEvent
MouseLeaveEvent срабатывает, когда курсор перемещается за пределы визуального элемента. Это событие отличается от MouseOutEvent
, поскольку оно отправляется каждому элементу, из которого выходит мышь. Это событие не распространяется.
target
: визуальный элемент (или один из его потомков), из которого выходит курсор мыши.
MouseOverEvent
Событие MouseOverEvent отправляется, когда курсор входит в элемент. Это отличается от MouseEnterEvent
, поскольку это событие отправляется только введенному элементу.
target
: визуальный элемент, находящийся под курсором мыши.
MouseOutEvent
Событие MouseOutEvent срабатывает, когда указывающее устройство перемещает курсор за границу визуального элемента.
MouseOutEvent
отличается от MouseLeaveEvent
тем, что MouseOutEvent
отправляется, когда переход от визуального элемента к любому другому элементу, а MouseLeaveEvent
не отправляется при переходе от визуального элемента к дочерним элементам.
target
: визуальный элемент, из которого вышел курсор мыши.
ContextualMenuPopulateEvent
Событие, отправляемое ContextualMenuManager
, когда контекстное меню необходимо заполнить элементами меню.
target
: визуальный элемент, для которого создается контекстное меню.
ContextClickEvent (устарело)
Событие отправляется, когда пользователь нажимает и отпускает третью кнопку мыши. Это событие существует только для обеспечения обратной совместимости с IMGUI.
Примеры
Пример окна редактора
В следующем примере кода создается окно редактора с тремя кнопками, которое выводит сообщения на консоль при наведении указателя мыши на элемент или при нажатии кнопок мыши.
В этом примере кода показано срабатывание событий MouseDownEvent
и MouseEnterEvent
, а также способы использования параметров события. р>
Чтобы увидеть пример в действии, сделайте следующее:
- Создайте новый скрипт C# с именем MouseEventTestWindow
- Скопируйте пример в сценарий C#.
- Откройте пример в разделе Окно > Инструментарий пользовательского интерфейса > Окно проверки событий мыши.
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
// Open this in the Editor via the menu Window --> UI ToolKit --> Mouse Event Test Window
public class MouseEventTestWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/Mouse Event Test Window")]
public static void ShowExample()
{
MouseEventTestWindow wnd = GetWindow();
wnd.titleContent = new GUIContent("Mouse Event Test Window");
}
public void CreateGUI()
{
// Add a few buttons
for (int i = 0; i < 3; i++)
{
Button newElement = new Button { name = $"Button {i}", text = $"Button {i}" };
newElement.style.flexGrow = 1;
rootVisualElement.Add(newElement);
}
// Register mouse event callbacks
rootVisualElement.RegisterCallback(OnMouseDown, TrickleDown.TrickleDown);
rootVisualElement.RegisterCallback(OnMouseEnter, TrickleDown.TrickleDown);
}
private void OnMouseDown(MouseDownEvent evt)
{
bool leftMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.LeftMouse));
bool rightMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.RightMouse));
bool middleMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.MiddleMouse));
Debug.Log($"Mouse Down event. Triggered by {(MouseButton)evt.button}.");
Debug.Log($"Pressed buttons: Left button: {leftMouseButtonPressed} Right button: {rightMouseButtonPressed} Middle button: {middleMouseButtonPressed}");
}
private void OnMouseEnter(MouseEnterEvent evt)
{
VisualElement targetElement = (VisualElement)evt.target;
Debug.Log($"Mouse is now over element '{targetElement.name}'");
}
}
Пример выполнения
В следующем примере кода сообщения выводятся на консоль при нажатии любой кнопки мыши, показывая, какая кнопка вызвала событие и какие кнопки нажаты в данный момент.
В этом примере кода показано, как зарегистрировать обратный вызов для MouseDownEvent
и как использовать параметры события.
Чтобы увидеть пример в действии, сделайте следующее:
- Создайте GameObjectосновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и более. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь с допустимым UIDocument. - В разделе Активы > Сценарии создайте сценарий C# с именем MouseEventTestRuntime.
- Скопируйте пример в сценарий C#.
- Прикрепите сценарий MouseEventTestRuntime к GameObject с помощью UIDocument.
- Войдите в режим воспроизведения.
- Наведите указатель мыши на вид игры и нажмите или удерживайте кнопки мыши.
using UnityEngine;
using UnityEngine.UIElements;
public class MouseEventTestRuntime : MonoBehaviour
{
void Start()
{
var root = GetComponent().rootVisualElement;
var newLabel = new Label("Move the mouse or press buttons to see the log output");
newLabel.style.flexGrow = 1;
root.Add(newLabel);
root.RegisterCallback(OnMouseDown, TrickleDown.TrickleDown);
}
private void OnMouseDown(MouseDownEvent evt)
{
bool leftMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.LeftMouse));
bool rightMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.RightMouse));
bool middleMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.MiddleMouse));
VisualElement targetElement = (VisualElement)evt.target;
Debug.Log($"Mouse Down event. Triggered by {(MouseButton)evt.button} over element '{targetElement.name}'");
Debug.Log($"Pressed buttons: Left button: {leftMouseButtonPressed} Right button: {rightMouseButtonPressed} Middle button: {middleMouseButtonPressed}");
}
}