Version: Unity 6.0 (6000.0)
言語 : 日本語
イベントの参照
Change イベント

キャプチャイベント

キャプチャイベントは、マウスのキャプチャ状態の変化を知らせます。UI Toolkit には、2 種類のキャプチャイベントがあります。

  • マウスキャプチャイベント
  • ポインターキャプチャイベント

ある要素がマウスやポインターを捉える (キャプチャ) と、その要素は、ポインティングデバイスがキャプチャを解除するか失うまで、そのポインティングデバイスからイベントを受け取る唯一の要素となります。

例えば、テキストボックスをクリックすると、テキストボックスがマウスをキャプチャします。マウスは画面上を動き回ることができても、テキストボックスの外でイベントをトリガーしません。テキストボックスがマウスをキャプチャしている間は、他のイベントをトリガーしません。ユーザーがテキストボックスの外でマウスボタンを押すと、テキストボックスはマウスのキャプチャをリリースします。

イベント 説明 下降 上昇 キャンセル可能
MouseCaptureEvent 要素がマウスキャプチャを取得したときに送信されます。
MouseCaptureOutEvent 要素がマウスキャプチャを解除したり、失うときに送信されます。
PointerCaptureEvent 要素がポインターを捉えるときに送信されます。
PointerCaptureOutEvent 要素がポインターを離すときに送信されます。

動作

マウスキャプチャ

マウスキャプチャイベントは、物理的なマウス、または物理的なマウスをエミュレートした仮想マウスでのイベントを指します。マウスをキャプチャすると、マウスポインターの PointerCaptureEvent が発生します。

要素がマウスキャプチャをリリースすると、対応する MouseCaptureOutEvent が発生します。ターゲットはキャプチャのリリースを要求した要素です。

2 つの要素が同時にマウスをキャプチャすることはありません。別のビジュアル要素が MouseCaptureEvent をトリガーすると、元の MouseCaptureEvent を送った要素はキャプチャを失います。これは、元の要素での MouseCaptureOutEvent もトリガーします。

ポインターキャプチャ

UI Toolkit では、ポインターイベントがマウスイベントに先行します。ポインタータイプがマウスの場合、マウスをキャプチャすると、対応するマウスキャプチャイベントも発生します。ポインターをキャプチャすると、マウスもキャプチャされます。

イベントリスト

MouseCaptureEvent

MouseCaptureEvent イベントは、要素がマウスキャプチャを取得するときに送信されます。

target: キャプチャを取得する要素。

MouseCaptureOutEvent

MouseCaptureOutEvent イベントは、要素がマウスキャプチャをリリースまたは失うと送信されます。

target: キャプチャを失う要素。

PointerCaptureEvent

PointerCaptureEvent イベントは、要素がポインターキャプチャを取得すると送信されます。

target: キャプチャを取得する要素。

PointerCaptureOutEvent

PointerCaptureOutEvent イベントは、要素がポインターキャプチャをリリースまたは失うと送信されます。

target: キャプチャを失う要素。

以下の例では、キャプチャイベントの動作と、ポインターのキャプチャと解除を示しています。

この例の動作を実際に見るには、以下を行います。

  1. Assets > Scripts > Editor で、CaptureEventsTestWindow.cs という名前の新しい C# ファイルを作成します。
  2. サンプルを C# スクリプトにコピーします。
  3. エディターツールバーから、Window > UI Toolkit > Capture Events Test Window を選択します。
  4. Dialog ウィンドウ内の様々なラベルをクリックして、コンソールで出力を確認してください。
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<CaptureEventsTestWindow>();
        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<MouseDownEvent>((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<MouseDownEvent>((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<MouseCaptureEvent>((evt) =>
        {
            Debug.Log("Mouse captured");
        });
        rootVisualElement.RegisterCallback<MouseCaptureOutEvent>((evt) =>
        {
            Debug.Log("Mouse captured released");
        });
    }
}
イベントの参照
Change イベント