Version: 2021.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 キーなどがあります。

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

イベントリスト

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

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. 有効な UIDocument でゲームオブジェクトを作成します。
  2. Assets > Scripts で、KeyboardEventTest という C# スクリプトを作成します。
  3. サンプルを C# スクリプトにコピーします。
  4. KeyboardEventTest スクリプトを UIDocument でゲームオブジェクトにアタッチします。
  5. 再生モードに入り、テキストフィールドに入力します。
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);
    }
}
入力イベント
マウスイベント