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

 

Unity C# Script プログラミング 入門
ゲームオブジェクトをキーで操作してみよう
Copyright (C) 2016 by Nobuhide Tsuda

 

※ イラスト提供:かわいいフリー素材集「いらすとや」様

キー押下状態チェック

ゲームでは、プレイヤーのキー操作にしたがって、自機を移動したり、ミサイルを発射する処理が必要だ。
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);」と記述してもよいぞ。

演習問題:

  1. (0, 0, 0) にキューブを配置し、「←」が押されている間は -X 方向に、「→」が押されている間は +X 方向にキューブを移動させるプログラムを書き、動作チェックを行いなさい。
  2. 上記「←」「→」に加え、「↑」が押されている間は +Y 方向に、「↓」が押されている間は -Y 方向にキューブを移動させるプログラムを書きなさい。
  3.     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() はよく混同される関数なので、違いをちゃんと理解し、しっかり覚えておこう。

演習問題:

  1. (0, 0, 0) にキューブを配置し、「←」が押された時は -X 方向に、「→」が押された時は +X 方向にキューブを移動させるプログラムを書き、動作チェックを行いなさい。
  2. 上記「←」「→」に加え、「↑」が押されたは +Y 方向に、「↓」が押されたは -Y 方向にキューブを移動させるプログラムを書きなさい。
  3.     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);
            }
        }
    

まとめ