Unityゲームの作り方メモ

【Unity2D】プレイヤーをマウスの方向に回転させたい。

Unity

まず、Unityで新しい2Dプロジェクトを作成し、プレイヤーオブジェクトをシーンに配置します。以下の手順に従って、プレイヤーがマウスの方向に回転するスクリプトを作成しましょう。

1. プレイヤーオブジェクトの作成

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. 「3D Object」→「Sprite」を選びます。
  3. 新しいスプライトを「Player」と名前を付けます。
  4. プレイヤーオブジェクトにRigidbody2Dコンポーネントを追加します。これは、物理演算を適用するために必要です。
  5. プレイヤーの画像は以下のアセットを使用しました

2. スクリプトの作成

次に、プレイヤーがマウスの方向に向くようにするためのスクリプトを作成します。

  1. プロジェクトウィンドウで右クリックして「Create」→「C# Script」を選択し、スクリプトに「PlayerMove」と名前を付けます。
  2. 以下のコードをスクリプトにコピペします。

コード全体の説明

このスクリプトは、Unityで作成されたゲーム内のプレイヤーキャラクターを動かすためのものです。プレイヤーはキーボードの矢印キーやWASDキーを使って移動し、マウスの位置に向かって回転します。

各部分の説明

  1. 変数の宣言
    • moveSpeed: プレイヤーの移動速度を表します。
    • rb: プレイヤーに付けられたRigidbody2Dコンポーネントの参照です。物理演算を使用して移動や回転を行うために使います。
    • movement: プレイヤーの移動方向を表す2次元ベクトルです。
    • mousePos: マウスの現在位置をワールド座標で表す2次元ベクトルです。
    • camera: マウスの位置をワールド座標に変換するためのカメラの参照です。
  2. Update メソッド
    • movement.xmovement.y: キーボードの入力を受け取って移動方向を設定します。Input.GetAxisRaw("Horizontal") は左右の入力、Input.GetAxisRaw("Vertical") は上下の入力をそれぞれ取得します。
    • mousePos: マウスのスクリーン座標をワールド座標に変換して取得します。
  3. FixedUpdate メソッド
    • rb.MovePosition: 物理演算を使ってプレイヤーの位置を更新します。現在の位置に移動方向と速度を掛けた値を加えます。
    • lookDir: プレイヤーの位置からマウスの位置への方向ベクトルです。
    • angle: lookDir の角度を計算して、プレイヤーがその方向を向くように回転を設定します。Mathf.Atan2 は角度をラジアンで返し、Mathf.Rad2Deg で度に変換します。さらに -90f を引いて適切な方向に調整します。

全体の動き

このスクリプトを使うと、プレイヤーキャラクターは以下のように動きます。

  • キーボードの矢印キーやWASDキーを使って上下左右に移動できます。
  • マウスの位置に向かってキャラクターが回転します。
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    float moveSpeed = 5;
    [SerializeField] Rigidbody2D rb;

    Vector2 movement;
    Vector2 mousePos;
    //カメラの参照
    [SerializeField] Camera camera;
    
    void Update()
    {
        movement.x = Input.GetAxisRaw("Horizontal");

        movement.y = Input.GetAxisRaw("Vertical");
        //マウスの位置を取得
        mousePos = camera.ScreenToWorldPoint(Input.mousePosition);

    }

    private void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);

        //マウスの向きを取得
        Vector2 lookDir = mousePos - rb.position;
        //マウスの角度を取得する
        float angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg - 90f;
        rb.rotation = angle;
    }
}

3. スクリプトのアタッチ

  1. プレイヤーオブジェクトを選択します。
  2. 作成した「PlayerMove」スクリプトをプレイヤーオブジェクトにドラッグ&ドロップします。
  3. Rigidbody2DコンポーネントとCameraコンポーネントをスクリプトのインスペクタで指定します。

動作確認

ゲームを再生して、プレイヤーキャラクターがキーボードの入力で移動し、マウスの方向に向くことを確認してください。

これで、プレイヤーがマウスの方向に回転するようになりました。

よくある質問

Q1: プレイヤーがマウスの方向に向かない場合、どうすればいいですか?

A1: スクリプトのインスペクタでCameraコンポーネントが正しく指定されているか確認してください。また、Rigidbody2Dコンポーネントがプレイヤーオブジェクトに追加されていることを確認してください。

Q2: プレイヤーの移動速度を変更するにはどうすればいいですか?

A2: moveSpeed変数の値を変更することで、プレイヤーの移動速度を調整できます。例えば、moveSpeed = 10;にすると、移動速度が2倍になります。

Q3: プレイヤーの回転速度を変更することはできますか?

A3: 現在のスクリプトでは回転速度は固定されていますが、回転速度を調整するための変数を追加し、rb.rotation = Mathf.LerpAngle(rb.rotation, angle, rotationSpeed * Time.fixedDeltaTime);のようにコードを変更することで、回転速度を調整できます。

おすすめのアセット