まず、Unityで新しい2Dプロジェクトを作成し、プレイヤーオブジェクトをシーンに配置します。以下の手順に従って、プレイヤーがマウスの方向に回転するスクリプトを作成しましょう。
1. プレイヤーオブジェクトの作成
- ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
- 「3D Object」→「Sprite」を選びます。
- 新しいスプライトを「Player」と名前を付けます。
- プレイヤーオブジェクトにRigidbody2Dコンポーネントを追加します。これは、物理演算を適用するために必要です。
- プレイヤーの画像は以下のアセットを使用しました

2. スクリプトの作成
次に、プレイヤーがマウスの方向に向くようにするためのスクリプトを作成します。
- プロジェクトウィンドウで右クリックして「Create」→「C# Script」を選択し、スクリプトに「PlayerMove」と名前を付けます。
- 以下のコードをスクリプトにコピペします。
コード全体の説明
このスクリプトは、Unityで作成されたゲーム内のプレイヤーキャラクターを動かすためのものです。プレイヤーはキーボードの矢印キーやWASDキーを使って移動し、マウスの位置に向かって回転します。
各部分の説明
- 変数の宣言
moveSpeed
: プレイヤーの移動速度を表します。rb
: プレイヤーに付けられたRigidbody2Dコンポーネントの参照です。物理演算を使用して移動や回転を行うために使います。movement
: プレイヤーの移動方向を表す2次元ベクトルです。mousePos
: マウスの現在位置をワールド座標で表す2次元ベクトルです。camera
: マウスの位置をワールド座標に変換するためのカメラの参照です。
Update
メソッドmovement.x
とmovement.y
: キーボードの入力を受け取って移動方向を設定します。Input.GetAxisRaw("Horizontal")
は左右の入力、Input.GetAxisRaw("Vertical")
は上下の入力をそれぞれ取得します。mousePos
: マウスのスクリーン座標をワールド座標に変換して取得します。
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. スクリプトのアタッチ
- プレイヤーオブジェクトを選択します。
- 作成した「PlayerMove」スクリプトをプレイヤーオブジェクトにドラッグ&ドロップします。
- Rigidbody2DコンポーネントとCameraコンポーネントをスクリプトのインスペクタで指定します。

動作確認
ゲームを再生して、プレイヤーキャラクターがキーボードの入力で移動し、マウスの方向に向くことを確認してください。
これで、プレイヤーがマウスの方向に回転するようになりました。
よくある質問
Q1: プレイヤーがマウスの方向に向かない場合、どうすればいいですか?
A1: スクリプトのインスペクタでCameraコンポーネントが正しく指定されているか確認してください。また、Rigidbody2Dコンポーネントがプレイヤーオブジェクトに追加されていることを確認してください。
Q2: プレイヤーの移動速度を変更するにはどうすればいいですか?
A2: moveSpeed
変数の値を変更することで、プレイヤーの移動速度を調整できます。例えば、moveSpeed = 10;
にすると、移動速度が2倍になります。
Q3: プレイヤーの回転速度を変更することはできますか?
A3: 現在のスクリプトでは回転速度は固定されていますが、回転速度を調整するための変数を追加し、rb.rotation = Mathf.LerpAngle(rb.rotation, angle, rotationSpeed * Time.fixedDeltaTime);
のようにコードを変更することで、回転速度を調整できます。