キーボードのサポート
Keyboard
クラスで、Key
列挙体で定義される一連のキー Control を備えた Device が定義されます。
個々のキーの位置はキーボードレイアウトに依存しません。例えば、A
キーは常に、Caps Lock
キーの右のキーを指します。現在アクティブなキーボードレイアウトで、a
という文字を生成するキーがどこに配置されているか、またはその文字に割り当てられたキーがレイアウトに存在するかどうかは関係ありません。
特定のキーによって生成される文字 (存在する場合) を照会するには、キー Control の displayName
プロパティを使用します。このプロパティの値は、OS でキーボードレイアウトが変更されると自動的に変更されます。
キーを参照するには、生成される文字に基づいて Control パス を使用します。例えば、Keyboard.current["#(a)"]
を使用すると、Keyboard
から文字 a
を生成するキーを照会できます。
ノート
- キーボードには通常、同時押下として報告されるキーの数と、サポートされるキーの組み合わせの両方に制限があります。このため、特定のキーの同時押下が正しく登録されない場合があります。例えば、キーボードによっては、"QWERT" キーの同時押下は正しく報告されるが、"QWERA" は正しく報告されないことがあります。
- 現在、新しい Input System では on-screen キーボードはサポートされていません。当面は、
UnityEngine.TouchScreenKeyboard
で提供される Unity の既存の API を使用してください。- 現在、通常は、Unity プラットフォームのバックエンドで、複数のキーボードを識別する機能はサポートされません。Input System では、どの時点でも複数の
Keyboard
デバイスがサポートされますが、プラットフォームバックエンドでは通常、単一のキーボードのみが報告され、接続されているすべてのキーボードからの入力が 1 つのキーボードデバイスにルーティングされます。
コントロール
Keyboard
からキーを取得するには、以下のいずれかのメソッドを使用できます。
Keyboard.spaceKey
など、キーのアクセサープロパティを使用する。Keyboard
のインデクサーとKey
列挙体を使用する (keyboard[Key.Space]
など)。
Keyboard
クラスのスクリプティング API リファレンス には、個々のキー Control を表すすべてのプロパティが記載されています。
anyKey
と imeSelected
の 2 つは、特殊な Control であり、個別のキーに直接マップされることはありません。anyKey
は、キーボード上の任意のキーが押されているかどうかを報告する シンセティック ボタン Control です。imeSelected
は、IME によるテキスト処理が有効かどうかを報告します。
また、Keyboard
のインデクサーおよび Key
には、モディファイアキーの組み合わせを表す以下の 3 つの シンセティック コントロールがあります。
Control | 説明 |
---|---|
shiftKey |
leftShiftKey 、rightShiftKey 、またはその両方が押されたときに押されるボタン。 |
ctrlKey |
leftCtrlKey 、rightCtrlKey 、またはその両方が押されたときに押されるボタン。 |
altKey |
leftAltKey 、rightAltKey 、またはその両方が押されたときに押されるボタン。 |
テキスト入力
ベストプラクティスとして、キー押下によるテキスト入力を手動で変換するために、キーに対応する文字を連結しようとしないでください。代わりに、テキスト入力をリッスンするために Keyboard.onTextInput
をフックします。この方法により、プラットフォームによって報告される入力を文字単位で取得できます。これには、on-screen キーボードからの入力も含まれます。
テキスト入力 API では、完全に合成された文字列は提供されないため、GC メモリは割り当てられません。
IME
一部の東アジア言語など、複雑な表記体系を持つ言語では、キーボード上の個々のキーだけですべての文字を表すことができません。このようなレイアウトでは、オペレーティングシステムに IME (入力方式エディター) が実装され、通常とは異なる方法で入力文字列を構築できるようになっています。例えば、複数のキーを入力することで 1 つの文字を生成します。テキスト入力用の Unity の UI フレームワークでは、追加設定なしで IME がサポートされています。テキスト入力用に独自の UI をビルドする場合は、Keyboard
クラスの以下の API を使用して、IME からの入力を操作することができます。
imeSelected
は、IME によるテキスト処理が有効になっているかどうかを報告する仮想入力 Control です。SetIMEEnabled()
は、IME の処理をオンまたはオフにするメソッドです。通常、IME の処理は、ユーザーがテキストを編集するときには便利ですが、キーボードを使用してゲームを制御するときにはあまり役に立ちません。SetIMECursorPosition()
。IME により、ユーザーが入力テキストをインタラクティブに編集できるシステムウィンドウが開かれることがあります。通常、これは、テキスト編集 UI の横に表示されます。SetIMECursorPosition()
メソッドを使用すると、この位置を OS に指示することができます。onIMECompositionChange
は、IME 合成文字列に対するあらゆる更新を受け取るためにサブスクライブできるイベントです。合成文字列とは、現在、ユーザーが IME を使用して編集しているテキスト入力です。通常、テキスト入力を扱う UI では、現在のテキスト入力のカーソル位置に、このテキストが表示されます (このとき、アクティブに編集中であることを示す視覚効果が適用されます。通常は下線が付けられます)。
キーボードレイアウト
現在のキーボードレイアウトの名前は、Keyboard.keyboardLayout
を使用して照会できます。レイアウト名はプラットフォーム固有です。
アプリケーションからキーボードレイアウトを設定することはサポートされていません。
キーボードレイアウトの変更を監視するには、InputSystem.onDeviceChange
をフックし、Keyboard
デバイスの InputDeviceChange.ConfigurationChanged
を調べます。
特定の表示文字列に対応するキーコントロールを見つけるには、Keyboard.FindKeyOnCurrentKeyboardLayout
を呼び出します。
// 現在のキーボードレイアウトで "q" 文字を生成するキーを見つけます。
Keyboard.current.FindKeyOnCurrentKeyboardLayout("q");