【Unity】InputManager・InputSystemで一部のキーボード入力が反応しないまたは違う
入力周りを見ているとき、Unity入力システムには入力用の変数名と
実際の入力に相違があるものがあることに気づきました。
例えば以下のコード。
新しい方の入力、InputSystemを使って、
キーボードの「 ] 」の入力をさせるコードです。
using UnityEngine; using UnityEngine.InputSystem; public class InputTest : MonoBehaviour { private void Update() { // これは反応しない if (Keyboard.current[Key.RightBracket].wasPressedThisFrame) { Debug.Log("Hello!"); } // これは反応する if (Keyboard.current[Key.Backslash].wasPressedThisFrame) { Debug.Log("World!"); } } }
Keyの変数名が「Key.RightBracket」では反応せず、
「Key.Backslash」が反応します。
これは、日本語のキーボードと英語のキーボードが物理的に違うことが原因です。 qa.elecom.co.jp
私が今使っているキーボードはWindows 109日本語キーボード。
このキーボードを基準として、入力の変数名と相違があるものの対応表は以下の通り。
日本語キーボード(JIS 109) | UnityEngine.KeyCode | UnityEngine.InputSystem.Key |
---|---|---|
全角/半角 | なし | Key.Backquote |
キーボード0~9 | KeyCode.Alpha【任意の数字】 | Key.Digit【任意の数字】 |
~ ^ へ | KeyCode.Quote | Key.Equals |
| ¥ | KeyCode.Backslash | なし |
` @ | KeyCode.BackQuote | |
{ 「 [ | KeyCode.LeftBracket | Key.RightBlaket |
Enter | KeyCode.Return | Key.Enter |
CapsLock | なし | Key.CapsLock |
* : け | KeyCode.Semicolon | Key.Quote |
} 」 ] む | KeyCode.RightBracket | Key.Backslash |
_ \ ろ | KeyCode.Backslash | Key.OEM2 |
Windowsキー | KeyCode.LeftApple | Key.LeftWindows |
無変換 | なし | なし |
変換 | なし | なし |
カタカナ ひらがな | なし | なし |
右Alt | KeyCode.AltGr | Key.AltGr |
アプリケーションキー | なし | Key.ContextMenu |
大体は右側の記号関連。
ゲーム中にこの位置の操作をするものは限定的かもしれない。
でも、デバッグキーなどを入れるときに使うかもしれないので意識しておこう!
私は数時間詰まっちゃった
参考にしたもの
・KeyCode - Unity スクリプトリファレンス
・Enum Key | Input System | 1.5.1
・キーボードの種類を知りたい/106、109キーボードとは?/英語、日本語キ...