▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
Unityのキー入力まとめ ~Inputクラス~
UnityのInputクラスについて使用頻度の高いものをまとめておきます。
[Unity_317×90]
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が開きます。
上の方にあるJumpの中のNameのプロパティに”Jump”とあります。
また、Positive Buttonのプロパティに”space”とあります。
これにより”Jump”という文字列と”space”キーの紐づけがされていると確認できます。
他のInputクラスのメソッド同様、
Input.GetButtonDown()で押した瞬間に、
Input.GetButtonUp()で離した瞬間に処理が実行されます。
Input.GetAxisRaw
■Input.GetAxis系のメソッドも引数にはstring型の文字列をとります。
GetKey系やGetButton系との違いは、戻り値がfloat型であることです。
移動速度などの変数と掛け合わせて使用する場合が多いです。
Input.GetAxisRaw()は、入力された軸に補正をかけず、-1か0か1でを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】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発