マウスイベントは、マウスを使って UI を操作するときに発生します。タッチ、ペン、その他のポインティングデバイスは、マウスイベントではなく、他のイベントを生成します。マウスイベントは、マウスを使って UI を操作するときに発生します。タッチ、ペン、その他のポインティングデバイスは、マウスイベントではなく、他のイベントを生成します。マウスイベントのスクリプトリファレンスとこのドキュメントでは、“mouse” (マウス) という用語は、物理的なマウスまたは物理的なマウスをエミュレートする仮想マウスのみを指します。
マウスイベントの前には、必ず対応する PointerEvent があります。
すべてのマウスイベントの基本クラスは MouseEventBase です。
| イベント | 説明 | 下降 | 上昇 | キャンセル可能 |
|---|---|---|---|---|
| MouseDownEvent | ユーザーがマウスボタンを押すときに送信されます。 | はい | はい | はい |
| MouseUpEvent | ユーザーがマウスボタンを離すときに送信されます。 | はい | はい | はい |
| MouseMoveEvent | ユーザーがマウスを動かすと送信されます。 | はい | はい | はい |
| WheelEvent | ユーザーがマウスホイールをアクティブにすると送信されます。 | はい | はい | はい |
| MouseEnterWindowEvent | マウスがウィンドウに入るときに送信されます。 | はい | ||
| MouseLeaveWindowEvent | マウスがウィンドウを離れるときに送信されます。 | はい | ||
| MouseEnterEvent | マウスが要素またはその子孫に入るときに送信されます。 | はい | はい | |
| MouseLeaveEvent | マウスが要素またはその子孫から離れるときに送信されます。 | はい | はい | |
| MouseOverEvent | マウスが要素に入るときに送信されます。 | はい | はい | はい |
| MouseOutEvent | マウスが要素から離れるときに送信されます。 | はい | はい | はい |
| ContextClickEvent (古い機能) | ユーザーが第 3 のマウスボタンを押して離すときに送信されます。IMGUI との後方互換性のために存在します。 | はい | はい | はい |
button:button プロパティは、押されてイベントを発生させたマウスボタンを識別する整数を返します。以下の表は、整数と関連するマウスボタンのリストです。
| 整数 | ボタン |
|---|---|
| 0 | 左ボタン |
| 1 | 右ボタン |
| 2 | 中央ボタン |
pressedButtons:pressedButton プロパティは、現在押されているマウスボタンの組み合わせを識別する整数を返します。
この数値は、個々のボタンの整数値の合計です (下表参照)。例えば、マウスの右ボタンと中央ボタンを同時に押すと、pressedButton の値は 6 になります。
| 整数 | ボタン |
|---|---|
| 1 | 左ボタン |
| 2 | 右ボタン |
| 4 | 中央ボタン |
modifiers:modifiers プロパティは、キーボードイベント中に押された修飾キーを返します。モディファイアには、Shift、Ctrl、Alt キーなどがあります。
詳細については、MDN ドキュメントの 修飾キーのセクション を参照してください。
mousePosition:mousePosition プロパティは、パネル内のマウスの位置 (スクリーン座標系とも呼ばれます) を返します。パネル座標の詳細については、ビジュアルツリーのページ を参照してください。
localMousePosition:localMousePosition プロパティは、ターゲットとなるビジュアル要素に対し相対的な座標を返します。
mouseDelta:前のマウスイベント時のポインターと、現在のマウスイベント時のポインターの位置の差。
以下のリストは、イベントファミリーの各イベントの名前、説明、およびターゲットを示しています。イベントの詳細については、UI Toolkit API を参照してください。
MouseDownEvent は、カーソルがビジュアル要素内にあるときにマウスボタンが押されると送信されます。
target:マウスキャプチャを受け取るビジュアル要素。それ以外の場合は、カーソルの下の一番上の選択可能な要素。
MouseUpEvent は、カーソルがビジュアル要素内にあるときにマウスボタンを放すと発生します。MouseUpEvent は MouseDownEvent を補完するものです。
target:マウスキャプチャを受け取るビジュアル要素。それ以外の場合は、カーソルの下の一番上の選択可能な要素。
MouseMoveEvent は、カーソルのホットスポットがビジュアル要素内で移動するときに送信されます。
target:マウスキャプチャを受け取るビジュアル要素。それ以外の場合は、カーソルの下の一番上の選択可能な要素。
WheelEvent は、マウスホイールが押されると送信されます。
target:マウスキャプチャを受け取るビジュアル要素。それ以外の場合は、カーソルの下の一番上の選択可能な要素。
MouseEnterWindowEvent は、カーソルがエディターウィンドウ内に移動すると発生します。ランタイムパネルでは、ゲームビューに入ると、このイベントを受け取りません。
target:マウスキャプチャを受け取るビジュアル要素。それ以外の場合は、カーソルの下の一番上の選択可能な要素。
MouseLeaveWindowEvent は、カーソルがエディターウィンドウのスペースを出るときに発生します。MouseLeaveWindowEvent は、MouseEnterWindowEvent に対するカウンターポイントです。
target:マウスキャプチャを受け取るビジュアル要素。それ以外の場合は、カーソルが要素の上にないため null を返します。
MouseEnterEvent は、カーソルがビジュアル要素、またはその子孫の 1 つの内側に移動するときに送信されます。
target:マウスカーソルの下にあるビジュアル要素、またはその子孫の 1 つ。
MouseLeaveEvent は、カーソルがビジュアル要素の外に移動するときに送信されます。このイベントは MouseOutEvent とは異なります。このイベントはマウスが離れる各要素に送信されます。このイベントは伝播しません。
target:マウスカーソルが離れるビジュアル要素 (またはその子孫の 1 つ)。
MouseOverEvent は、カーソルが要素に入ると送信されます。これは MouseEnterEvent とは異なります。このイベントは入った要素にのみ送信されます。
target:マウスカーソルの下にあるビジュアル要素。
MouseOutEvent は、ポインティングデバイスのカーソルがビジュアル要素の境界の外に移動するときに送信されます。
MouseOutEvent は、MouseLeaveEvent とは異なります。MouseOutEvent は、ビジュアル要素から離れて他の要素に移動するときには常に送信されますが、MouseLeaveEvent は、ビジュアル要素から子孫の要素に移動するときには送信されません。
target:マウスカーソルが離れたビジュアル要素。
コンテキストメニューにメニュー項目を作成する必要があるときに、ContextualMenuManager によって送信されるイベント。
target:コンテキストメニューが作成されるビジュアル要素。
ユーザーが 3 番目のマウスボタンを押下、離すときに送信されるイベント。このイベントは IMGUI との後方互換性のためにのみ存在します。
以下のコードサンプルでは、3 つのボタンを持つエディターウィンドウを作成し、マウスが要素の上に移動したり、マウスのボタンが押されたりすると、コンソールにメッセージを表示します。
このコードサンプルでは、MouseDownEvent と MouseEnterEvent の両方のイベント送信と、イベントパラメーターの使用方法を紹介しています。
この例の動作を実際に見るには、以下を行います。
MouseEventTestWindow.cs という新しい 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<MouseEventTestWindow>();
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<MouseDownEvent>(OnMouseDown, TrickleDown.TrickleDown);
rootVisualElement.RegisterCallback<MouseEnterEvent>(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 へのコールバックの登録と、イベントパラメーターの使用方法を紹介します。この例の動作を実際に見るには、以下を行います。
using UnityEngine;
using UnityEngine.UIElements;
public class MouseEventTestRuntime : MonoBehaviour
{
void Start()
{
var root = GetComponent<UIDocument>().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<MouseDownEvent>(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}");
}
}