Unityのキー入力まとめ ~Inputクラス~

この記事は2015年9月30日に書かれたものです。内容が古い可能性がありますのでご注意ください。


Unityのキー入力まとめ ~Inputクラス~


UnityのInputクラスについて使用頻度の高いものをまとめておきます。

Inputクラス


UnityのInputクラスにはキー入力やボタン入力を検知するメソッドが複数用意されています。
主要なところでは以下のものがあります。

Input.GetKey(キーボードからの入力)
Input.GetButton(インプットマネジャーで管理された入力)
Input.GetAxis(方向キーの入力)
Input.GetMouseButton(マウスボタンの入力)

それぞれ見ていきましょう。

Input.GetKey


GetKey系のメソッドは引数の渡し方が2種類あります。
■ひとつは列挙型を引数にとるケースです。
GetKey()の中にキーに対応するKeyCodeを指定します。
戻り値がbool型であるため、一般的にはif文と組み合わせて使用します。

if (Input.GetKey(KeyCode.Space)){
    Debug.Log("Spaceキーを押した");
}

■もうひとつはstring型の文字列を引数にとります。
GetKey()の中にキーの名前を直接記述します。戻り値は同じくbool型です。

if (Input.GetKey("Space")){
    Debug.Log("Spaceキーを押した");
}

上記の2つのメソッドは、どちらもキーの押しっぱなしに対応しています。
キーが押されている間は常にtrueが返り続けます。

■キーが押された瞬間を検知したい場合は、Input.GetKeyDown()を使用します。

if (Input.GetKeyDown("Space")){
    Debug.Log("Spaceキーを押した");
}

こちらはキーを押しっぱなしにしても、trueは一度しか返りません。

■キーが離された瞬間を検知したい場合は、Input.GetKeyUp()を使用します。

if (Input.GetKeyUp("Space")){
    Debug.Log("Spaceキーを離した");
}

こちらも押しっぱなしには対応していません。

Input.GetButton


■GetButton系のメソッドは、引数がstring型のみとなっています。

if (Input.GetButton("Jump")){
    Debug.Log("Jumpに対応するキーを押した");
}

Jumpに対応したキーを押すことで処理が実行されます。
この、キーと引数の文字列の紐づけはInputManagerで行われており、これは変更することも可能です。
UnityのEdit > Project Settings > Input を選択すると、インスペクターにInputManagerが開きます。

WS000219
上の方にあるJumpの中のNameのプロパティに”Jump”とあります。
また、Positive Buttonのプロパティに”space”とあります。
これにより”Jump”という文字列と”space”キーの紐づけがされていると確認できます。

他のInputクラスのメソッド同様、
Input.GetButtonDown()で押した瞬間に、
Input.GetButtonUp()で離した瞬間に処理が実行されます。

Input.GetAxisRaw


■Input.GetAxis系のメソッドも引数にはstring型の文字列をとります。
GetKey系やGetButton系との違いは、戻り値がfloat型であることです。
移動速度などの変数と掛け合わせて使用する場合が多いです。

Input.GetAxisRaw()は、入力された軸に補正をかけず、-101でをfloat型で返します。
Input.GetAxis()は、入力された軸に補正をかけて、-1から1の範囲をfloat型で返します。

float h = Input.GetAxisRaw("Horizontal");
Debug.Log(h);

float v = Input.GetAxis("Vertical");
Debug.Log(v);

GetAxis()では補正がかかるため、入力があってもすぐには1や―1が返らず、だんだんと1や-1に近づいていきます。

Input.GetMouseButton


■Input.GetMouseButton系のメソッドはマウスボタンの入力を受け取ります。
引数は0で左クリック、1で右クリック、0で中クリックを判定します。
戻り値はbool型です。

 if (Input.GetMouseButton(0)) {
     Debug.Log("左クリック");
 }
 if (Input.GetMouseButton(1)) {
     Debug.Log("右クリック");
 }
 if (Input.GetMouseButton(2)) {
     Debug.Log("中クリック");
 }

他のInputクラスのメソッド同様、
Input.GetMouseButtonDown()で押した瞬間に、
Input.GetMouseButtonUp()で離した瞬間に処理が実行されます。

まとめ


プレイヤーからの入力を受けるInputクラスには上記のような選択肢がありますが、
InputManagerを使用するGetButton系やGetAxis系のメソッドであれば、入力デバイスごとに処理を
記述したりする必要がないため、便利かと思います。
必要に応じて使い分けてみましょう。

今月の新着記事

【超簡単】UnityのSpriteで好きな画像を表示する方法
【コピペでいける】Unityでシーンを切り替える方法
【コピペでいける】UnityでクリックされたGameObjectを取得する方法
【スクリプトからも出来る】UnityでGameObjectの色を変更する方法

記事一覧にもどる

  • このエントリーをはてなブックマークに追加

PAGE TOP