【Unity2D】2Dキャラクターを動かす方法!

Unity

最近は、2Dでゲームを作ることが多かったので、そこで学んだことを記述していこうと思います。

今回は2Dゲーム制作第一弾ということで、2Dキャラクターを動かす方法を解説していきたいと思います。

準備

まずは、プレイヤーとなるオブジェクトを用意しましょう。

最初にやるのは、プレイヤーのビジュアルとなるものの用意です。

私は「Capsule」をプレイヤーのビジュアルにしました。

次に、「Player」という名前の空のオブジェクトを作り、その中にプレイヤーのビジュアルになるものを入れます。

空のオブジェクトの中にキャラクターのビジュアルを入れることで、アニメーションを作るときに楽になるので、キャラクターを作るときはこの手順で作ることをお勧めします。

次に、プレイヤーにCollider2DとRigidbody2Dを追加します。

プレイヤーの準備は以上です。

次は、適当にステージを作っておきます。

これで準備は完了です。

スクリプト

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

public class playerMovement : MonoBehaviour
{

    [SerializeField] float speed;

    void Update()
    {
        MovementHandler();
    }

    private void MovementHandler() 
    {
        Vector3 inputVector = new Vector3(0,0,0);

        if (Input.GetKey(KeyCode.D)) 
        {
            inputVector.x = 1;
        }

        if (Input.GetKey(KeyCode.A)) 
        {
            inputVector.x = -1;
        }

        inputVector = inputVector.normalized;
        transform.position += inputVector * speed * Time.deltaTime;

    }
}

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

「inputVector」という変数にベクトルを格納し、その値によってキャラクターが動く向きが決まります。

Dボタンを押したら右に移動してほしいのでXベクトルに「1」

Aボタンを押したら左移動してほしいのでXベクトルに「-1」を入れています。

これらの値を「inputVector」に入れて、「inputVector」に「speed」と「Time.deltaTime」をかけてプレイヤーの移動を行っているということですね。

それでは、このスクリプトを「Player」にアタッチしましょう。

Speedという項目がありますので好きな値を入れてみましょう。

これで実行をすると

Aで左へ、Dで右にプレイヤーが動けるようになりました!

しかし、プレイヤーが進んでいる方向に向いていませんですね。

これを直していきましょう。

スクリプトをこのように更新しましょう。

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

public class playerMovement : MonoBehaviour
{

    [SerializeField] float speed;

    int directionScale = 1; //←この行を追加

    void Update()
    {
        MovementHandler();
    }

    private void MovementHandler() 
    {
        Vector3 inputVector = new Vector3(0,0,0);

        if (Input.GetKey(KeyCode.D)) 
        {
            inputVector.x = 1;
            transform.localScale = new Vector2(directionScale,1); //←この行を追加
        }

        if (Input.GetKey(KeyCode.A)) 
        {
            inputVector.x = -1;
            transform.localScale = new Vector2(-directionScale,1); //←この行を追加
        }

        inputVector = inputVector.normalized;
        transform.position += inputVector * speed * Time.deltaTime;

    }
}

これらの追加した行で、プレイヤーオブジェクトのローカルスケール(画像の大きさ)を変えています。

つまり、Aを押せば画像のスケールは「-1 (左向き)」になり、Dを押せば画像のスケールは「1 (右向き)」になります。

これで実行しますと

進んでいる方向にプレイヤーが向くようになりました!

まとめ

いかがだったでしょうか?

次回はジャンプを実装していこうと思います。

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