キー押下状態チェック
ゲームでは、プレイヤーのキー操作にしたがって、自機を移動したり、ミサイルを発射する処理が必要だ。
Input.GetKey(キー名)はそのための関数で、コールされた時点で指定キーが押下されている状態かどうかを判定することができる。
指定キーが押下されている状態であれば true を、押下されていない状態であれば false を返すぞ。
キー名としては、"up", "down", "left", "right" で上下左右カーソルキーを、"a"~"z" , "0"~"9" 等でそのキー自身を指定できるぞ。
通常は、定期的にコールされる Update() の中で、以下のように使用する。
void Update() { if( Input.GetKey(キー名) ) { 指定キーが押されている時の処理 } }
例えば、左カーソルキーが押されているときは -X 方向に、右カーソルキーが押されているときは +X 方向にゲームオブジェクトを移動させるプログラムは以下のようになる。
void Update() { if( Input.GetKey("left") ) { // 「←」が押されている場合 transform.position += Vector3(0.1f, 0, 0); } if( Input.GetKey("right") ) {// 「→」が押されている場合 transform.position -= Vector3(0.1f, 0, 0); } }
※ -X 方向に移動させる部分は「transform.position += Vector3(-0.1f, 0, 0);」と記述してもよいぞ。
演習問題:
- (0, 0, 0) にキューブを配置し、「←」が押されている間は -X 方向に、「→」が押されている間は +X 方向にキューブを移動させるプログラムを書き、動作チェックを行いなさい。
- 上記「←」「→」に加え、「↑」が押されている間は +Y 方向に、「↓」が押されている間は -Y 方向にキューブを移動させるプログラムを書きなさい。
void Start () { if( Input.GetKey("left") ) { // 「←」が押されている場合 transform.position += Vector3(0.1f, 0, 0); } if( Input.GetKey("right") ) {// 「→」が押されている場合 transform.position -= Vector3(0.1f, 0, 0); } if( Input.GetKey("up") ) { // 「↑」が押されている場合 transform.position += Vector3(0, 0.1f, 0); } if( Input.GetKey("down") ) { // 「↓」が押されている場合 transform.position -= Vector3(0, 0.1f, 0); } }
キー押下・リリースチェック
前章では、キーの押下状態を取得する Input.GetKey() を紹介したが、場合によっては押下状態ではなく、その瞬間(厳密にはそのフレーム内で)に押されたかどうかを知りたい場合がある。
そんなときは Input.GetKeyDown(キー名) を使うといいぞ。
同様に、その瞬間にキーがリリースされたかどうかを判定するには Input.GetKeyUp(キー名) を使用するんだぞ。
void Update() { if( Input.GetKeyDown(キー名) ) { 指定キーが押された時の処理 } if( Input.GetKeyUp(キー名) ) { 指定キーがリリースされた時の処理 } }
Input.GetKey() と Input.GetKeyDown() はよく混同される関数なので、違いをちゃんと理解し、しっかり覚えておこう。
演習問題:
- (0, 0, 0) にキューブを配置し、「←」が押された時は -X 方向に、「→」が押された時は +X 方向にキューブを移動させるプログラムを書き、動作チェックを行いなさい。
- 上記「←」「→」に加え、「↑」が押されたは +Y 方向に、「↓」が押されたは -Y 方向にキューブを移動させるプログラムを書きなさい。
void Start () { if( Input.GetKeyDown("left") ) { // 「←」が押された場合 transform.position += Vector3(0.1f, 0, 0); } if( Input.GetKeyDown("right") ) {// 「→」が押された場合 transform.position -= Vector3(0.1f, 0, 0); } if( Input.GetKeyDown("up") ) { // 「↑」が押されてた場合 transform.position += Vector3(0, 0.1f, 0); } if( Input.GetKeyDown("down") ) { // 「↓」が押された場合 transform.position -= Vector3(0, 0.1f, 0); } }
まとめ