Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Unity】InputSystemで日本語キーボードでの一部キーが取得できません

解決したいこと

Unity の InputSystem (従来の Input でも同じ問題があるかは未確認)で、キーボード入力の練習アプリを作ろうと情報を集めております。
詳しく書くと、キー名と日本語名との対応表を ScriptableObject で作ろうとしています。
その一環で、入力したキー名(InputControl.name)を収集することをやっておりますが、いくつか取得できないキーが存在しています。

おそらく、Unity 内部では英語キーボードしか想定していないのではと考えられますが、皆さんはどのように解決していらっしゃいますでしょうか?

当方が知りたいキーの情報は以下の4つです。

  • バックスラッシュ(¥)キー
  • 無変換キー
  • 変換キー
  • カタカナ・ひらがなキー

当方の環境は以下のとおりです。

OS: Windows 10 64bit
Keyboard: CORSAIR K60
Unity: 2022.1.23f1
DirectX: 11

自分でやったこと

Updateメソッド内に、キーを押されたらその情報をTextコンポーネントに表示させるスクリプトを作って表示させています。

        if (Keyboard.current != null)
        {
            string[] keyNames = Keyboard.current.allKeys.Where(x => x.isPressed).Select(x => x.name).ToArray();
            logLabel.text = $"[{string.Join(",", keyNames)}]";
        }
0

2Answer

バックスラッシュ(¥)キー

OSのキーボードレイアウト設定が正しければ認識できそうに思えます。
OSが101キーレイアウトに設定されている場合は、USキーボードのバックスラッシュは認識しますが、日本語キーボードの円記号は認識できないと思います。
Windows + InputManagerの組み合わせでは認識できました。

無変換キー
変換キー
カタカナ・ひらがなキー

UnityのInputManager/InputSystemでは認識できなさそうです。

是が非でもこれらのキー入力が必要な場合、
アセットストアのツール/入出力管理カテゴリには、マルチプラットフォーム対応のキーボード/コントローラ入力をサポートするアセットがあるようです。
Windowsのみで良ければ、SharpDXなどを導入してDirectInputを使うことも選択肢になると思います。

1Like

ご回答ありがとうございます。

なるほど、網羅しようとすると、更に色々考える必要があると。
ふと思い立って、TextMeshProのInputFieldで試してみると¥キーは対応していました。
ということは、Unityでは英語キーボードに
ちなみに、反応しなかったのは|の方の¥キーで、_の方の¥キーは106キーボードでも反応いたしました。

当方の作るアプリの方向性として、無理にすべてのキーを対応させることを考えずに開発していいったほうが無理なくできそうと考えたのでその方向で進めていきます。

0Like

Your answer might help someone💌