Unity入門 - キーボードやゲームパッドなどの入力を取得しよう, Input Manager -
Index
キーボードの入力を取得する
まずは、キーボードの入力を取得してみます。Input.GetKeyを用いることで入力を取得することができます。今回は、スペースキーを押してオブジェクトを動かしてみます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //TextはUIのため追加 public class InputScript : MonoBehaviour { //入力中か否か画面に表示するためのText //画面にTextを表示しないのであればいらない //画面にTextを表示するのであれば, Textに関する部分をアンコメントし, インスペクターからTextをアタッチしてください //public GameObject JudgeinputText; //Text judgeinput; void Start() { //TextのComponentを取得 //judgeinput = JudgeinputText.GetComponent<Text>(); } void Update() { if (Input.GetKey(KeyCode.Space)) //スペースキーが押されているとtrueを返す { this.transform.position += new Vector3(0.1f, 0.0f, 0.0f); //入力中か否か画面に表示するためのTextを操作する // judgeinput.text = "スペースキーを入力中"; } //else //{ //入力中か否か画面に表示するためのTextを操作する //judgeinput.text = "スペースキーは入力していない"; //} } }
実行してみましょう。
スペースキーが押されていることが取得できました。
Input GetKeyについて
InputGetKeyには、次の3種類あります。それぞれ取得するタイミングが異なります。
名前 | 内容 |
---|---|
InputGetKey | キーを押している間はずっとtrueを返す |
InputGetKeyDown | キーが押されていない状態から押された瞬間だけtrueを返す |
InputGetKeyUp | キーが押されている状態からキーを離した瞬間だけtrueを返す |
キーコードについて
InputGetKeyを使うには、キーコードが必要になります。さきほどはスペースキーのキーコードであるSpaceを使いました。
よく使うキーコードは、矢印キーでしょうか。
名前 | 内容 |
---|---|
左矢印キー | LeftArrow |
右矢印キー | RightArrow |
上矢印キー | UpArrow |
下矢印キー | DownArrow |
他のキーコードについては、こちらにまとめてありますので、リンク先をご覧ください。
Input Managerについて
キーボードの入力は取得できました。しかし、ゲームパッドやジョイスティックにはキーは存在しません。そこで、様々なデバイスに対応するために、Input Managerがあります。
Input Managerの開き方
Edit→Project Settings→Input Managerの順にクリックすると開くことができます。
Axis(軸)のなかに、Horizontal(水平方向)やVertical(垂直方向)などの項目が並んでいます。
Horizontalを見てみると、次のようになっています。
Negative Button、Alt Negative Buttonはそれぞれ左矢印キー、Aキーが割り当てられています。Altは"他の"のような意味なので、どちらのキーを押しても同じ働きをします。Negativeと書いてあるので、左矢印キーかAキーを押すとHorizontalに負の数を返すことになります。
逆に、Positive Button、Alt Positive Buttonが割り当てられている右矢印キー、Dキーを押すとHorizontalに正の数を返します。
-1 から 1までの実数を返すのですが、ジョイスティックなどの場合、小数が返ってくることもあります。キーボードのキーであれば、-1か1の整数が返ってきます。
また、割り当てるキーは自分で変更可能です。
Input Managerを使ってみる
Input Managerを使って、オブジェクトを動かしてみます。先ほど、Sphereにアタッチしたスクリプトを次のように変更してみます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //TextはUIのため追加 public class InputScript : MonoBehaviour { //入力中か否か画面に表示するためのText //画面にTextを表示しないのであればいらない //画面にTextを表示するのであれば, Textに関する部分をアンコメントし, インスペクターからTextをアタッチしてください //public GameObject JudgeinputText; //Text judgeinput; void Start() { //TextのComponentを取得 //judgeinput = JudgeinputText.GetComponent<Text>(); } // Update is called once per frame void Update() { if (Input.GetAxis("Horizontal") > 0) //HorizontalのPositive Buttonが押されたら { this.transform.position += new Vector3(0.1f, 0.0f, 0.0f); //入力中か否か画面に表示するためのTextを操作する //judgeinput.text = "Horizontalがプラス"; } else if(Input.GetAxis("Horizontal") < 0) //HorizontalのNegative Buttonが押されたら { this.transform.position += new Vector3(-0.1f, 0.0f, 0.0f); //入力中か否か画面に表示するためのTextを操作する //judgeinput.text = "Horizontalがマイナス"; } if(Input.GetAxis("Jump") > 0) //JumpのPositive Buttonが押されたら { this.transform.position += new Vector3(0.0f, 0.2f, 0.0f); //入力中か否か画面に表示するためのTextを操作する //judgeinput.text = "Jumpがプラス"; } //if(Input.GetAxis("Horizontal") == 0 && Input.GetAxis("Jump") == 0) //{ //judgeinput.text = "何も押されていない"; //} } }
実行してみると、次のようになります。
今回はキーボードでの操作しかしておりませんが、Input Managerを使えば、入力デバイスに関係なく操作できることが分かりました。
最後に
入力を取得する方法を学びました。Input Managerと呼ばれる便利な機能があることを覚えておけばなんとかなると思います。