UnityUnityメモ

【Unity2D】プレイヤーをマウスの方向に回転させる方法!初心者向け解説

Unity

1. はじめに

Unityで2Dゲームを作るとき、プレイヤーキャラをマウスの方向に向けて動かしたいことはよくあります。例えば、ツインスティックシューターのようなシューティングゲームでは、プレイヤーはキーボードで移動しながら、マウスの方向に向かって弾を撃つことが求められます。

この記事では、プレイヤーオブジェクトをマウスの方向に回転させる方法を解説します。具体的には、Rigidbody2D を使ってスムーズに回転させる方法と、Camera.ScreenToWorldPoint を利用してマウスの位置を取得する方法を学びます。

また、C#スクリプトを使ってマウスの向きを取得し、それに応じてプレイヤーの回転を調整する実装を行います。初心者向けに詳しく解説するので、Unityの基本操作が少しわかる方なら誰でも簡単に実装できます!

最終的には、キーボードで移動しながら、マウスの方向を向くプレイヤーキャラクターを作成します。それでは、さっそくプレイヤーの作成から始めましょう!



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

まずは、マウスの方向に回転するプレイヤーオブジェクトを作成しましょう。UnityのHierarchy(ヒエラルキー)ウィンドウを使ってスプライトを配置し、プレイヤーの基本的な設定を行います。


① プレイヤーのスプライトを作成する

  1. Hierarchyウィンドウ右クリックします。
  2. **「3D Object」→「Sprite」**を選択します。
  3. 作成したスプライトの名前を 「Player」 に変更します。

このスプライトがプレイヤーキャラクターの見た目になります。あとで好きな画像を適用できますが、今回はデフォルトの白い四角(Sprite)でもOKです。


② Rigidbody2Dコンポーネントを追加

プレイヤーをスムーズに動かすために、Rigidbody2Dコンポーネントを追加します。

  1. 「Player」オブジェクトを選択します。
  2. Inspector(インスペクター)ウィンドウで「Add Component」ボタンをクリックします。
  3. **「Rigidbody2D」**を検索して追加します。
  4. 以下の設定を変更して、重力の影響を受けないようにします。
    • Gravity Scale(重力の影響)0
    • Constraints(制約) → 「Freeze Rotation Z」にチェックを入れる(プレイヤーが意図しない回転をしないように)

③ プレイヤーの見た目を変更(任意)

デフォルトのスプライトのままでも問題ありませんが、よりゲームらしくするためにプレイヤーの見た目を変更してみましょう。

  1. 好きな2Dスプライト画像を用意します。(Unity Asset Storeの無料アセットを使ってもOK)
  2. Projectウィンドウにドラッグ&ドロップしてインポートします。
  3. 「Player」オブジェクトの「Sprite Renderer」コンポーネントで、「Sprite」の項目を変更します。
  4. お好みでサイズや色を調整してください。

ここまでで、マウスの方向に回転するプレイヤーオブジェクトの準備が完了しました!
次は、C#スクリプトを作成してプレイヤーを回転させる処理を実装していきます。




3. スクリプトの作成

次に、プレイヤーをマウスの方向に回転させるスクリプトを作成します。
C#スクリプトを使って、マウスの位置を取得し、プレイヤーの向きを変更できるようにします。


① 新しいスクリプトを作成

まずは、C#スクリプトを作成しましょう。

  1. Projectウィンドウで右クリックします。
  2. **「Create」→「C# Script」**を選択します。
  3. スクリプトの名前を 「PlayerMove」 に変更します。

② スクリプトにコードを入力

次に、「PlayerMove」スクリプトを開き、以下のコードを入力します。

using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    float moveSpeed = 5; // 移動速度
    [SerializeField] Rigidbody2D rb; // Rigidbody2Dの参照

    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;
    }
}

③ コードの解説

このスクリプトでは、以下のような処理を行っています。

  1. キーボードの入力を取得して移動
    Input.GetAxisRaw("Horizontal")Input.GetAxisRaw("Vertical") を使って、プレイヤーの移動方向を取得します。
  2. マウスの位置を取得
    camera.ScreenToWorldPoint(Input.mousePosition) を使い、マウスの画面上の座標をワールド座標に変換します。
  3. プレイヤーをマウスの方向に回転
    • Vector2 lookDir = mousePos - rb.position; でプレイヤーとマウスの位置の差分を求めます。
    • Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg を使い、角度を求めます。
    • rb.rotation = angle; でプレイヤーを回転させます。

これで、プレイヤーの移動とマウスの方向を向く処理ができました!
次は、このスクリプトをプレイヤーに適用して、動作確認を行います。




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

作成した PlayerMove スクリプトを プレイヤーオブジェクトに適用 して、動作させる準備をしましょう。


① スクリプトをプレイヤーに適用

  1. 「Hierarchy」ウィンドウで「Player」オブジェクトを選択 します。
  2. 作成した「PlayerMove」スクリプトを「Player」オブジェクトにドラッグ&ドロップ します。
    → これでスクリプトがアタッチされました!

② Rigidbody2D をスクリプトに設定

スクリプト内で Rigidbody2D を参照するので、インスペクターから手動で設定 します。

  1. 「Player」オブジェクトの「Inspector」ウィンドウ」を開く
  2. PlayerMove スクリプトの中に 「Rb」(Rigidbody2D) の項目があることを確認
  3. 「Rb」欄に「Player」の Rigidbody2D をドラッグ&ドロップ

③ Camera をスクリプトに設定

マウスのワールド座標を取得するために、カメラの参照を設定します。

  1. 「Player」オブジェクトの「Inspector」ウィンドウ」を開く
  2. PlayerMove スクリプト内の 「Camera」項目を確認
  3. 「Camera.main」をドラッグ&ドロップ(または MainCamera を手動で設定)

④ 設定の最終チェック

  • 「Player」オブジェクトに Rigidbody2D が追加されているか
  • 「PlayerMove」スクリプトが正しくアタッチされているか
  • 「Rigidbody2D」と「Camera」の参照が設定されているか

これでスクリプトの設定は完了しました!
次は、実際にゲームを実行して、プレイヤーがマウスの方向を向くか確認 してみましょう。




5. 動作確認

ここまでで、プレイヤーオブジェクトの作成とスクリプトの設定が完了しました。
最後に、ゲームを実行してプレイヤーがマウスの方向を向くかを確認しましょう。


① ゲームを実行

  1. Unityエディター上部の「▶(再生ボタン)」をクリック してゲームを実行します。
  2. キーボード(WASDキー or 矢印キー)で移動 できるか確認します。
  3. マウスを動かして、プレイヤーがマウスの方向を向くか確認 します。

② 正常な動作のチェック

プレイヤーがスムーズに移動する
マウスを動かすと、プレイヤーがその方向に回転する
プレイヤーの動きに違和感がない(回転が滑らかである)

③改善ポイント(応用編)

  • スムーズな回転を実装する
     → Quaternion.Lerp() を使うことで、より滑らかに回転させることができます。
  • 移動アニメーションを追加する
     → Animator を使って、移動時にアニメーションを適用できます。
  • クリックで攻撃できるようにする
     → Instantiate() を使って弾を発射するスクリプトを追加すれば、シューティングゲームの基礎が作れます。

まとめ

プレイヤーがマウスの方向に回転するスクリプトが動作した!
キーボードで移動しながら、マウスで方向を調整できた!

これで、Unity2Dでプレイヤーをマウスの方向に回転させる方法が完成しました!
この仕組みを活用すれば、ツインスティックシューティングやアクションゲームを簡単に作ることができます。

これでプレイヤーをマウスの方向に回転させる処理が完成しました!
次のステップとして、シューティング機能を追加 すれば、より本格的なゲームになります。
自作するのもいいですが、「Easy Shooting」 ならクリックで攻撃機能を簡単に実装できます!
🎯 Easy Shootingをチェックする



よくある質問(FAQ)

Q
プレイヤーがマウスの方向を向かないのですが?
A

Camera の参照が正しく設定されているか確認してください。また、Rigidbody2DRotation が有効になっているかチェックしましょう。

Q
プレイヤーが移動しない場合の対処法は?
A

Rigidbody2DGravity Scale を 0 に設定し、スクリプトの moveSpeed 値が適切に設定されているか確認してください。

Q
カメラをメインカメラ以外に変更するには?
A

Camera.main を使用するか、インスペクタで Camera を手動でアタッチしてください。

おすすめのアセット

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