UnityUnityメモ

【Unity】2Dゲーム制作必見!キャラクターの向きを進行方向に変える実装方法

Unity

はじめに

この記事では、Unity2Dゲーム開発でよく使う「キャラクターの進行方向によって向きを変える仕組み」の作り方を解説します!この機能を使えば、キャラクターが右に進むときは右を向き、左に進むときは左を向く自然な動きを作れます。

初心者でもわかりやすい手順で進めていくので、ぜひゲーム開発に役立ててくださいね!


必要な準備

1. キャラクター画像を用意する

まず、キャラクターとして使う画像(PNG形式など)を準備してください。ネットで無料の素材をダウンロードするか、オリジナルで作成したものを使いましょう。

2. Unityプロジェクトにインポート

  1. ダウンロードした画像ファイルをプロジェクトの「Assets」フォルダにドラッグ&ドロップします。
  2. その画像を「ヒエラルキー(Hierarchy)」ウィンドウにドラッグ&ドロップして、ゲームオブジェクトとして配置します。

キャラクターに物理挙動を追加する

次に、キャラクターに動きや物理的な要素を追加します。

  1. リジッドボディ2Dを追加
    • ヒエラルキーウィンドウでキャラクターオブジェクトを選択します。
    • **インスペクター(Inspector)**ウィンドウの「Add Component」をクリック。
    • 「Rigidbody2D」を検索して追加します。
  2. 設定を変更
    • Rigidbody2Dの「Body Type」を「Kinematic」に変更します。
      ※この設定により、キャラクターは物理的な衝突には影響されず、自分でプログラムした動きだけをします。

キャラクターを動かすスクリプトを作成する

キャラクターの動きを制御するスクリプトを作成します。

  1. 新しいスクリプトを作成
    • プロジェクトウィンドウを右クリックし、「Create」→「C# Script」を選びます。
    • スクリプト名を「PlayerMove」とします。
  2. スクリプトをキャラクターにアタッチ
    • 作成した「PlayerMove.cs」をドラッグ&ドロップして、キャラクターオブジェクトに追加します。
  3. スクリプトを記述 以下のコードを「PlayerMove.cs」に記述してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    Rigidbody2D rb2d;
    private float speed;

    void Start()
    {
        speed = 5;
        rb2d = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        float input = Input.GetAxisRaw("Horizontal");
        rb2d.velocity = new Vector2(input * speed, rb2d.velocity.y);

        // 進行方向へ向きを変える
        if (input < 0)
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
        }
        else if (input > 0)
        {
            transform.eulerAngles = new Vector3(0, 180, 0);
        }
    }
}


スクリプトの解説

  1. 変数の設定
    • Rigidbody2D rb2d:キャラクターの動きを制御する物理コンポーネントを格納します。
    • speed:キャラクターが動く速さを設定します。
  2. Startメソッド
    • ゲーム開始時にRigidbody2Dを取得し、速度を設定します。
  3. Updateメソッド
    • 毎フレームで入力を取得し、キャラクターを左右に移動します。
    • Input.GetAxisRaw("Horizontal")でプレイヤーの入力(右=1、左=-1、何もしない=0)を取得。
    • 入力に応じてキャラクターの向きを変える処理をtransform.eulerAnglesで実装しています。

1. 宣言部分

Rigidbody2D rb2d;
private float speed;
  • Rigidbody2D rb2d;
    • キャラクターに物理的な動きを付けるために使います。Rigidbody2Dは2Dゲームの物理演算(重力や衝突)を管理するコンポーネントです。
    • このコードでは、キャラクターを動かすときに使います。
  • private float speed;
    • キャラクターの移動速度を保存するための変数です。
    • floatは小数点が使える数字の型です。

2. Startメソッド

void Start()
{
speed = 5;
rb2d = GetComponent<Rigidbody2D>();
}
  • speed = 5;
    • キャラクターの移動速度を5に設定しています。数値を変えることで、キャラクターの速さを調整できます。
  • rb2d = GetComponent<Rigidbody2D>();
    • このオブジェクトにアタッチされているRigidbody2Dを取得して、rb2dという変数に代入しています。
    • こうすることで、このrb2dを通じて物理的な操作ができるようになります。

3. Updateメソッド

void Update()
{
float input = Input.GetAxisRaw("Horizontal");
rb2d.velocity = new Vector2(input * speed, rb2d.velocity.y);

// 進行方向へ向きを変える
if(input < 0)
{
transform.eulerAngles = new Vector3(0, 0 ,0);
}
else if(input > 0)
{
transform.eulerAngles = new Vector3(0, 180, 0);
}
}
  • Input.GetAxisRaw("Horizontal")
    • キーボードの左右矢印キー(またはA/Dキー)を押したときの入力を取得します。
    • 左キーを押すと-1、右キーを押すと1、何も押していないときは0を返します。
  • rb2d.velocity = new Vector2(input * speed, rb2d.velocity.y);
    • ここでキャラクターを左右に動かします。
    • input * speed: 入力(-1, 0, 1)に速度を掛けて移動速度を決定します。
    • rb2d.velocity.y: 上下方向の速度はそのままにして、横方向だけを変更します。
  • 向きを変える部分
    • if(input < 0)
      • 左に移動しているとき(inputが負の値のとき)、キャラクターを元の向き(0度)に戻します。
      • transform.eulerAngles: オブジェクトの回転を指定します。
    • else if(input > 0)
      • 右に移動しているとき、キャラクターを180度回転させます。

全体の動き

  1. ゲームが始まると、移動速度が5に設定されます。
  2. 毎フレーム、プレイヤーの入力(左右のキー)を読み取ります。
  3. 入力に応じて、Rigidbody2Dを使ってキャラクターを左右に動かします。
  4. 入力方向に応じてキャラクターの向きを変えます。

動きを確認する

  1. ゲームプレイを開始 Unityエディタの「Play」ボタンを押してゲームを開始します。
  2. キャラクターを操作 キーボードの左右矢印キーまたはA/Dキーでキャラクターを動かしてみてください。
    • 右に進むとキャラクターが右を向きます。
    • 左に進むとキャラクターが左を向きます。

よくある質問

Q
キャラクターが動かない場合はどうしたらいいですか?
A

以下を確認してください。

  • スクリプトがキャラクターオブジェクトに正しくアタッチされているか。
  • Rigidbody2Dコンポーネントが追加され、Body Typeが「Kinematic」に設定されているか。
  • スクリプト内のコードにエラーがないか。
Q
キャラクターの動きが速すぎたり遅すぎたりします。
A

スクリプト内のspeed変数の値を調整してください。例えば、speed = 3;にすると少し遅くなります。

Q
スプライトの向きが反転しない場合は?
A

スプライトの向きが最初から逆向きの場合、transform.eulerAnglesの値を確認し、適宜変更してください。

まとめ

この記事では、Unity2Dでキャラクターの向きを進行方向に合わせる仕組みを作る方法を解説しました。このテクニックはゲーム制作の基本ですが、習得すれば自分だけのオリジナルゲームを作る大きな一歩となります!

Unityを使ったゲーム開発は、実際に手を動かして学ぶことでどんどん楽しく、スキルもどんどん向上します。しかし、「もっと本格的に学びたい」「プロのクリエイターにアドバイスをもらいたい」と思ったことはありませんか?

そんな方におすすめなのが、バンタンゲームアカデミー!

バンタンゲームアカデミーでは、Unityやゲーム制作を基礎から実践的に学べるカリキュラムが充実しています。さらに、業界で活躍するプロの講師から直接指導を受けられるので、効率よくスキルアップすることが可能です。初心者の方でも安心して学べる環境が整っていますよ!

資料請求は無料でできるので、気になる方はぜひ公式サイトをチェックしてみてください。プロを目指す一歩を踏み出してみましょう! 😊

自分のゲーム制作スキルを次のステージに進めるために、学びの場を活用するのも良い選択肢ですね!

(バンタンゲームアカデミー 資料請求はこちら)