Unity 2Dでキャラクターを上下左右に移動する方法!(キャラクター反転)

Unity

今回はUnity 2Dでキャラクターをキーボードを使用し、上下左右に移動させてみます。
それと、右と左を押した時には、キャラクターの画像を反転させて押した方向を向くようにします。

検証に使用しているUnityのバージョンは’2021.1.19f’で、言語はC#を使っています。

PR

Unity 2Dでキャラクターを上下左右に移動する

今回はハリセンボンをキャラクターとして配置して、下記のようにキーボードの十字キーで上下左右に移動するようにします。
左を押したら左、右を押した時には右を向くようにして、画像反転の制御も入れます。

Unity 2Dでキャラクターを上下左右移動させる

作成するまでの手順は下記になります。

1. シーンに背景とキャラクターを配置する
2. キャラクターに対して、スクリプトを追加する
3. キャラクターのスクリプトを編集する

それでは、実際に実装する手順を確認していきましょう。

PR

キャラクターを上下左右に移動するまで

今回はシーンに対して、背景画像をひとつと動かすキャラクターをひとつ追加しました。
下記のような状態です。

Unity 2Dでハリセンボンと海背景を配置

その後にキャラクターに対して、スクリプトを追加します。
画面右のInspectorからAdd Componentをクリックして、New Scriptを選択します。

Unity 2Dでハリセンボンに対してスクリプト追加

そうすると、スクリプトの名前を入力できる状態になるので、スクリプト名を入力します。
今回はMoveCharactorControllerというスクリプト名にしてみました。

スクリプトの内容は下記になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveCharactorController : MonoBehaviour
{
    private float speed = 0.05f;

    void Start()
    {
    }

    void Update()
    {
        Vector2 position = transform.position;

        if (Input.GetKey("left"))
        {
            position.x -= speed;
        }
        else if (Input.GetKey("right"))
        {
            position.x += speed;
        }
        else if (Input.GetKey("up"))
        {
            position.y += speed;
        }
        else if (Input.GetKey("down"))
        {
            position.y -= speed;
        }

        transform.position = position;
    }
}

スクリプトの内容を解説します。

Updateメソッドの中に修正を加えています。
このメソッドは、ゲーム実行中に毎フレーム処理されるメソッドになります。

キーボードの入力などを瞬時に検知して処理することが可能です。
コードの中では最初に、下記のようにして、このスクリプトを紐付けたオブジェクト(ハリセンボン)の位置を取得しています。
取得した位置はposition変数に保持します。

Vector2 position = transform.position;

その後に、キーボード入力を検知して処理しています。
それぞれif文で判定していますが、下記の意味になります。

・`Input.GetKey(“left”)`で左の矢印が押された
・`Input.GetKey(“right”)`で右の矢印が押された
・`Input.GetKey(“up”)`で上の矢印が押された
・`Input.GetKey(“down”)`で下の矢印が押された

それぞれのif文がtrueになる場合に処理を行います。
左が押されたら、現在の位置から下記のようにして、横軸位置(x)をspeed変数から引いてposition変数の内容を変更しています。

position.x -= speed;

speed変数には0.05fをスクリプトの最初にいれて定義していました。

同じようにして右が押された場合には、現在の位置から、横軸位置(x)を足しています。

position.x += speed;

上矢印を押された場合には、縦軸位置(y)を足します。

position.y += speed;

同様に下矢印を押された場合には、縦軸位置(y)を引くといった形です。

position.y -= speed;

最後にオブジェクトのtransform.positionに変更を加えたposition変数を設定することで、オブジェクトの位置を変えています。

transform.position = position;
※下記のように直接変えようとするとエラーになるので、注意が必要です。
`transform.position.x -= speed;`

上下移動の動作確認をする

この状態で、動作確認をすると下記のようになります。
キャラクターの向きが変わらないまま、左右をチョロチョロ動いていますね。

Unity 2Dで上下移動したが、キャラクターの向きがおかしい

特に反転させる処理をしていないので、こうなってしまいました。
次に右を押したら右を向いて、左を押したら左を向くようにキャラクター画像を反転してみます。

矢印の方向にキャラクター画像を反転させる

キャラクター画像を反転させるには、Sprite RendererFlip項目に対して、trueを入力してあげるとOKです。
実際のスクリプトは下記のように修正しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveCharactorController : MonoBehaviour
{
    private float speed = 0.05f;
    //---ここから追加----
    private SpriteRenderer renderer;
    //---ここまで追加----

    void Start()
    {
        //---ここから追加----
        renderer = GetComponent<SpriteRenderer>();
        //---ここまで追加----
    }

    void Update()
    {
        Vector2 position = transform.position;

        if (Input.GetKey("left"))
        {
            position.x -= speed;
         //---ここから追加----
            renderer.flipX = false;
         //---ここまで追加----
        }
        else if (Input.GetKey("right"))
        {
            position.x += speed;
         //---ここから追加----
            renderer.flipX = true;
         //---ここまで追加----
        }
        else if (Input.GetKey("up"))
        {
            position.y += speed;
        }
        else if (Input.GetKey("down"))
        {
            position.y -= speed;
        }

        transform.position = position;
    }
}

追加したところだけ、解説します。
最初にSpriteRendererの変数を定義しています。

その後に、Startメソッドで、スクリプトを紐づけたオブジェクトのSpriteRendererを取得しています。

renderer = GetComponent<SpriteRenderer>();

SpriteRendererを取得できたら、あとは簡単です。
今回使用した画像はもともと左を向いているので、左を押している間はfalseを設定しています。

if (Input.GetKey("left"))
{
    position.x -= speed;
    renderer.flipX = false;
}

逆に右を押している間はtrueを設定するといった形です。

else if (Input.GetKey("right"))
{
  position.x += speed;
  renderer.flipX = true;
}

以上で、設定完了です。

反転するか動作確認する

実際に動作確認をすると、下記のように動いた方向にキャラクターが向くことが確認できます。

Unity 2Dで左右の画像反転の動作確認

コメント

タイトルとURLをコピーしました