Version: 2022.3
言語: 日本語
入力イベント
マウスイベント

キーボードイベント

キーボードイベントは、キーボードのキーを押したり離したりするときに発生します。各イベントには、修飾キー の情報が含まれています。テキスト文字、関連する キーコード の情報が含まれています。

多くの標準コントロールは、ショートカットやアクセシビリティの動作をエンコードするために、KeyDownEvent を使用しています。以下の例はすべて、キーボードイベントを使用しています。

  • ToggleButton クラスは、EnterSpacebar のキー押下を、マウスクリックの代替としてリッスンします。
  • スクロールビューとスライダーコントロールは、方向キーを押すことで値を変化させます。
  • テキストフィールドコントロールは、keyCode プロパティと文字プロパティの両方を見て、特別なアクションを実行したり、テキストを受け入れたりします。

すべてのキーボードイベントの基本クラスは KeyboardEventBase です。

イベント 説明  下降伝播 上昇伝播 キャンセル可能
KeyDownEvent ユーザーがキーボードのキーを押下するときに送信されます。
KeyUpEvent ユーザーがキーボードのキーを離すときに送信されるイベント

固有のプロパティ

keyCode: keyCode プロパティは、キーボードやジョイスティックなどの入力デバイスの物理的なキーに直接対応する文字キーを返します。character プロパティと keyCode プロパティの違いは、keyCode が物理的なキーを表しているのに対し、character は特定の文字の入力を表していることです。例えば、keyDownEvent の間に aA の両方とも keyCode=KeyCode.A を 返します。

character: keyDownEvent の間に、character プロパティは文字コードを返します。

modifiers: modifiers プロパティは、どのモディファイアキーが押されているかを返します。修飾キーの例としては、ShiftCtrlAlt キーなどがあります。

詳細は、修飾キー のセクションを参照してください。

イベントリスト

以下のリストは、イベントファミリーの各イベントの名前、説明、ターゲットを示しています。

デフォルトでは、ビジュアル要素はキーボードイベントを受け取りません。フォーカス可能で現在フォーカスされている要素のみがキーボードイベントの対象となります。これは、キーボードイベントが下降段階 (trickle down) を経て上昇段階 (bubble up) に移行し、親要素もそれらを受け取ることができるようになるためです。

つまり、キーボードイベントの受信を開始するには、要素を focusable=true とマークし、element.Focus() を使用して明示的にフォーカスを与える必要があります。これにより、要素がキーボードイベントを受信できるようになります。

KeyDownEvent

KeyDownEvent は、キーボードのキーを押すたびに送信されます。押されたキーには、そのイベントの keyCode プロパティが含まれます。そのキーの押下にテキスト入力が関連している場合、テキスト入力の各文字に対して追加のイベントが送信されます。character プロパティには、そのイベントのための文字が含まれます。

a を押して離すと、UI Toolkit は以下のイベントを送信します。


KeyDownEvent { keyCode=KeyCode.A }
KeyDownEvent { character=’a’ }
KeyUpEvent { keyCode=KeyCode.A }

Ctrl+a を押して離すると、UI Toolkit は以下のイベントを送信します。


KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }
KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.LeftControl }

target: フォーカスがあるビジュアル要素。フォーカスがある要素がない場合は、パネルのルートのビジュアル要素。

KeyUpEvent

KeyUpEvent は、キーボードのキーを離すときに送られます。KeyDownEvent には、キーストロークに紐づいたテキスト入力がある場合に付加的に送信されるイベントがあります。

a を押して離すと、UI Toolkit は以下のイベントを送信します。

KeyDownEvent { keyCode=KeyCode.A }
KeyDownEvent { character=’a’ }
KeyUpEvent { keyCode=KeyCode.A }

Ctrl+a を押して離すると、UI Toolkit は以下のイベントを送信します。


KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }
KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.LeftControl }

target: フォーカスがあるビジュアル要素。フォーカスがある要素がない場合は、パネルのルートのビジュアル要素。

以下のコードサンプルは、ユーザーがテキストフィールドのキーを押すと、コンソールにメッセージを表示します。このコードサンプルでは、KeyUpEventKeyDownEvent の両方のイベントの発生を強調しています。

  1. 任意のテンプレートで Unity プロジェクトを作成します。

  2. サンプルシーンで GameObject > UI Toolkit > UI Document の順にクリックします。

  3. 以下のコンテンツで KeyboardEventTest.cs という C# スクリプトを作成します。

    using UnityEngine;
    using UnityEngine.UIElements;
    
    // 有効な UIDocument を使用して KeyboardEventTest をゲームオブジェクトに加えます。
    // ユーザーがキーを押すと、キーボードイベントのプロパティがコンソールに出力されます。
    [RequireComponent(typeof(UIDocument))]
    public class KeyboardEventTest : MonoBehaviour
    {
        void OnEnable()
        {
            var root = GetComponent<UIDocument>().rootVisualElement;
            root.Add(new Label("Press any key to see the keyDown properties"));
            root.Add(new TextField());
            root.Q<TextField>().Focus();
            root.RegisterCallback<KeyDownEvent>(OnKeyDown, TrickleDown.TrickleDown);
            root.RegisterCallback<KeyUpEvent>(OnKeyUp, TrickleDown.TrickleDown);
        }
        void OnKeyDown(KeyDownEvent ev)
        {
            Debug.Log("KeyDown:" + ev.keyCode);
            Debug.Log("KeyDown:" + ev.character);
            Debug.Log("KeyDown:" + ev.modifiers);
        }
    
        void OnKeyUp(KeyUpEvent ev)
        {
            Debug.Log("KeyUp:" + ev.keyCode);
            Debug.Log("KeyUp:" + ev.character);
            Debug.Log("KeyUp:" + ev.modifiers);
        }
    }
    
  4. Hierarchy ウィンドウで UIDocument ゲームオブジェクトを選択します。

  5. KeyboardEventTest.cs を Inspector ウィンドウの Add Component にドラッグします。

  6. 再生モードに入り、テキストフィールドに入力します。

その他の参考資料

入力イベント
マウスイベント