いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

Unityで左シフトキー、スペースキー、右方向キーを同時に認識できなかった話

 Unityで、押されているキーを検出します。

Input.GetKey(KeyCode.LeftShift) (左シフトキー)

Input.GetKey(KeyCode.RightArrow) (右方向キー)

Input.GetKey(KeyCode.Space) (スペースキー)

というコードで、押されているなら true、押されていないなら false が返ってきます。これで判定できます。「これら3つが押されている」と判定できないと困ることがあります。実際、ぼくがそうでした。右方向のキーは照準を右へ移動、スペースキーが押されている間は弾を撃つ、そこへシフトキーをさらに押すと照準でなく視点(カメラ)の位置を変える、とするつもりでした。……そのはずだったんですが、うまくいきません。実験してみると方向キーを認識していないようです。2つのキーならちゃんと認識するのです。3ついっぺんだと無理らしい。

 ネットで調べたらどうやらキーボードの構造で、2つまでしか判定できないものもあるらしいのです。なるほど、と思いました。つまり完全にバラバラに認識するのではなく、構造上キーたちがブロックに分かれており、同じブロック内の2つのキーは別々には認識できない、みたいな。

 結局、シフトでなく、コントロールキーを使うようにしたら3つを認識できました。どっち道スマホアプリにするつもりだから、まあよいわけですが(スマホアプリだと自分でボタンを配置しなければならないので)。

 前にPCのゲームを書いたときはUnityもなく、マシンも違っていて、3つのキーをきちんと認識していました。そのつもりでいて、今回考えたとおりにプログラムが動かないので「??」と思ったのです。誰かが困っているかも知れないので記録に残しておきます。