【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文と組み合わせて使用します。
1 2 3 | if (Input.GetKey(KeyCode.Space)){ Debug.Log( "Spaceキーを押した" ); } |
■もうひとつはstring型の文字列を引数にとります。
GetKey()の中にキーの名前を直接記述します。戻り値は同じくbool型です。
1 2 3 | if (Input.GetKey( "Space" )){ Debug.Log( "Spaceキーを押した" ); } |
上記の2つのメソッドは、どちらもキーの押しっぱなしに対応しています。
キーが押されている間は常にtrueが返り続けます。
■キーが押された瞬間を検知したい場合は、Input.GetKeyDown()を使用します。
1 2 3 | if (Input.GetKeyDown( "Space" )){ Debug.Log( "Spaceキーを押した" ); } |
こちらはキーを押しっぱなしにしても、trueは一度しか返りません。
■キーが離された瞬間を検知したい場合は、Input.GetKeyUp()を使用します。
1 2 3 | if (Input.GetKeyUp( "Space" )){ Debug.Log( "Spaceキーを離した" ); } |
こちらも押しっぱなしには対応していません。
Input.GetButton
■GetButton系のメソッドは、引数がstring型のみとなっています。
1 2 3 | 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型で返します。
1 2 3 4 5 | 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型です。
1 2 3 4 5 6 7 8 9 | 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ゲーム開発