【Unity初心者向け】作りながら覚えるゲーム制作講座 #3 オブジェクトをキーボードで移動させる

前回の記事は、スクリプトでオブジェクトが自動的に右に移動するようにしました。
今回は、 キーボードの方向キーを押したときに、その方向に移動するようにします!

まず、先に完成形をお見せします。

https://twitter.com/karakuri_colla/status/1360965121900564484?s=20

前回の変数と四則演算に比べると、今回は割とサクっと終わります。
では、早速やっていきます!

↓この記事の内容は動画でも解説しています↓

条件分岐

今回は、「キーボードが押されている」という条件によって処理を分岐させる必要があります。
条件によって処理を分岐させるには「if文」というものを使います。

if文 の使い方

if文 は、このように書きます。

if (/* 判定したい条件 */)
{
    /* 条件を満たしたときに行う処理 */
}

まず、() の中に書かれた条件を見てしているかが判定されます。
条件を満たしているときは {} の中の処理が実行されます。
これが if文 の基本的な処理です!
このように、 if () から {} までがワンセットになります。

今回は if文 を使って「キーボードが押されているとき」という条件で処理を行わせます。

if文 には変数の値を条件にする使い方や、条件を満たしていない場合の処理を別に書く方法などがあるのですが、そのあたりは追々説明します。

キーボードの入力判定

if文 を使って、実際にキーボードが入力されているときだけ処理を実行するようにします。
キーボードの入力は Input.GetKey(/* 取得したいキー */) と書くと取得できます。

右矢印キーで右に移動させる

まずは、前回作った右に移動する処理を右矢印キーを押しているときだけ実行するようにしてみます。
右矢印のキーは KeyCode.RightArrow で表します。

これを if文 の () の中に入れ、右に移動させる処理を {} の中に入れてみましょう。

変更前

x += 3.0f * Time.deltaTime;

変更後

if (Input.GetKey(KeyCode.RightArrow))
{
    x += 3.0f * Time.deltaTime;
}

これで、何も押していない時はCubeが動かず、右矢印を押しているときだけ動くようになりました!

左矢印で左に移動させる

次に、左矢印キーで左に移動するようにします。
右矢印キーの処理をコピーして、必要な部分を変えていきます。

条件を左矢印にするため、 KeyCode.RightArrowKeyCode.LeftArrow に変更します。
座標をプラスしているところをマイナスに変更します。

if (Input.GetKey(KeyCode.RightArrow))
{
    x += 3.0f * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
    x -= 3.0f * Time.deltaTime;
}

これで、キーボードの左右で移動できるようになりました!

実際に操作してみると、移動速度が3だと少し遅い気がしたので、これ以降のサンプルでは5に変更してあります。
みなさんも好きな速度に変更してみてください!

ソースコードにコメントを追加する

プログラムの中に処理が増えてくると、後から見たときに何の処理をしているか分からなくなってしまうことがあります。
なので、ソースコードの中にメモ書を残しておこうと思います!

メモ書きを残すには「コメント」という専用の書式で書く必要があります。
コメントの書き方には二通りあります。

/* と */ を使う

コメントにしたい文字を /**/ で囲むと、その部分がコメントになります。
次の例では「右に移動」という部分がコメントです。

/* 右に移動 */
x += 5.0f * Time.deltaTime;

複数行をまとめてコメントにすることもできます。
次の例では、「毎秒 ~ させる。」という部分がコメントです。

/* 毎秒 5.0 の速さで
   右に移動させる。 */
x += 5.0f * Time.deltaTime;

// を使う

2つ連続でスラッシュを書くと、その行内でそれより右の部分が全てコメントになります。
次の例では「右に移動」という部分がコメントです。

// 右に移動

今回は // を使ってコメントを書いてみます。
例えば、今回のプログラムにコメントを書くとしたらこんな感じです。

    // 毎フレーム実行される
    void Update()
    {
        // 右矢印が押されている場合
        if (Input.GetKey(KeyCode.RightArrow))
        {
            // 右に移動
            x += 5.0f * Time.deltaTime;
        }
        // 左矢印が押されている場合
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            // 左に移動
            x -= 5.0f * Time.deltaTime;
        }

        // 位置を更新
        transform.localPosition = new Vector3(x, 0, 0);
    }

コメントは、 あとから見て何の処理をしているかが分かるように 書いてください!

まとめ

今回は、キーボードで自機を移動できるようになりました!
これで、今回のゲームで必要な「自機」「障害物」「ゴール」のうち、
自機」が完成したことになります!

ただ、自機の形がシンプルなのもあって画面が少し寂しいですね。
次回は、少し背景の見た目を充実させていきます!