【Unity】右クリック+マウスで視点を回そう!自由視点カメラの作り方入門

笑顔で手を振る女の子キャラクターとパソコン画面。Unityの開発風景を背景にした明るいアイキャッチ画像

Unityでゲームを作っていると「キャラクターの周りをぐるっと見渡したいな」と思うこと、ありませんか?

今回ご紹介するのは、右クリック+マウス移動でカメラを回転させる“自由視点カメラ”の作り方です。
アクションやTPSゲームでよく見かける視点操作を、シンプルなスクリプトで実現してみましょう!

Unity初心者の方でも大丈夫。前回の「追従カメラ」の仕組みをベースに進めていきますので、ぜひ一緒にトライしてみてください!

目次

おさらい:前回作った追従カメラについて

前回作成した追従カメラの動作例。Cubeオブジェクトを斜め後ろから追いかけるメインカメラ

前回は、Cube(プレイヤー)オブジェクトを追いかける追従カメラを作りました。
カメラとプレイヤーの相対位置(オフセット)を保ちながら、カメラが自然に追いかけてくる仕組みでしたね。

この仕組みは、カメラの基本中の基本。今回の「自由視点カメラ」でも、この追従処理が土台になります。

すでに前回のプロジェクトを使っている方は、CubeとMain Cameraがセットになった状態からスタートしてOKです!

自由視点カメラとは?

広がる空の下で視点を回転させるような演出に囲まれたキャラクター。自由視点カメラのイメージにぴったりのビジュアル

ゲームの中で、キャラクターの周囲をぐるぐると見渡せるカメラって見たことありませんか?

これは「自由視点カメラ」や「TPS視点カメラ」と呼ばれ、プレイヤーの背後にカメラを置いたうえで右クリック+マウス移動で視点を操作できるようにする仕組みです。

たとえば『ゼルダの伝説』や『原神』のようなアクションゲームでは、カメラを自分で回して周囲を見渡す操作が当たり前になっていますよね。

このカメラ操作は、プレイヤーの周囲を中心にカメラだけが回転する構造になっており、ゲームへの没入感を高めてくれます。

今回はこの仕組みを、シンプルなスクリプトで再現していきます!

カメラ回転スクリプトを作ろう

Unityのような開発環境でコードを入力しているキャラクターの後ろ姿。2画面のモニターにスクリプトが表示されている

ここからは、自由視点カメラの回転処理をスクリプトで実装していきます。
ポイントは「右クリックを押している間だけ、マウスの動きでカメラが回転する」ようにすることです。

スクリプトの動作イメージ

  • 右クリックを押している間:マウスのX/Y移動量を取得
  • 横方向(X軸):プレイヤーの周囲をぐるっと回転
  • 縦方向(Y軸):上下方向にカメラを首振り(上限・下限あり)

スクリプトを書く

新しいスクリプト FreeLookCamera.cs を作成します。

using UnityEngine;

public class FreeLookCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 5.0f;
    public float xSpeed = 120.0f;
    public float ySpeed = 80.0f;

    public float yMinLimit = -20f;
    public float yMaxLimit = 80f;

    private float x = 0.0f;
    private float y = 0.0f;

    void Start()
    {
        Vector3 angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;

        Cursor.lockState = CursorLockMode.None;
        Cursor.visible = true;
    }

    void LateUpdate()
    {
        if (Input.GetMouseButton(1)) // 右クリック中
        {
            x += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;
            y -= Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;

            y = Mathf.Clamp(y, yMinLimit, yMaxLimit);
        }

        Quaternion rotation = Quaternion.Euler(y, x, 0);
        Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

        transform.rotation = rotation;
        transform.position = position;
    }
}

このスクリプトは、プレイヤー(target)を中心に、カメラがぐるっと回転するように制御するスクリプト文なります。次は実際に動作確認をしてみましょう!

スクリプトをアタッチして動作確認しよう

スクリプトの記述が完了したら、Unityエディター上で実際に動作を確認してみましょう!

Main Cameraにスクリプトをアタッチ

UnityのMain CameraにFreeLookCameraスクリプトをアタッチし、Cubeオブジェクトをtargetに設定しているインスペクター画面
  1. Main Camera を選択
  2. 作成した FreeLookCamera.cs をドラッグ&ドロップ
  3. targetCube(プレイヤー)オブジェクト を指定します
インスペクターからC#ファイルコンポーネントを削除する

前回の CameraFollow スクリプトがアタッチされている場合は、今回の FreeLookCamera と同時にアタッチしないように注意しましょう!
メインカメラにはどちらか一方のみアタッチしてください。CameraFollow削除または無効化しておきましょう!

プレイモードで確認してみよう

Unityを再生し、右クリックを押したままマウスを動かしてみてください。

  • プレイヤーの周囲をぐるっと見渡せるようになっていればOK!
  • 上下にも動くはずですが、「上に行きすぎて逆さを向いてしまう…」という方は、次のセクションで角度制限をかけましょう。

視点の動きを調整してみよう

FreeLookCameraスクリプトのパラメータ設定。xSpeedとySpeedの数値調整で操作感が変わる

自由視点カメラの基本的な動作ができたら、次は「操作感のチューニング」をしていきましょう。

特に意識したいのは以下の2つです。

上下の回転角度を制限する

FreeLookCameraスクリプトで設定された回転角度のパラメータを示すインスペクター画面

マウスをぐいっと上に動かすと、カメラが真上まで回り込みすぎてしまうことがありますよね?
これを防ぐには、yMinLimit / yMaxLimit を設定して上下の首振りを制限します。

プロパティ設定例
Y Min Limit-20f
Y Max Limit80f

この設定により、見下ろしや見上げの限界を調整できます。
「真上から覗くような視点は禁止したい」など、ゲームの雰囲気に合わせてカスタマイズしてみましょう。

感度・回転スピードを調整する

FreeLookCameraスクリプトで設定された回転速度のパラメータを示すインスペクター画面

プレイヤーによっては、カメラの回転が速すぎたり遅すぎたりと感じることがあります。
そのときは、xSpeedySpeed の値を調整してみてください。

プロパティ設定例
XSpeed120.0f
Yspeed80.0f

たとえば回転が早すぎるなら数値を小さく、ゆっくりすぎるなら大きくしてみましょう。

おまけ:カメラの回転中心を変えてみよう

同じキャラクターが異なる角度から描かれた3体構図。視点の高さや回転中心の違いをイメージできる比較図。

※このセクションは少し発展的な内容です。
基本のカメラ回転ができていれば、数値を変えるだけでも試せる内容なので、
興味がある方はぜひ挑戦してみてください!

ここまでで、自由にカメラを回せるようになりました!
ですが、カメラの“回転の中心”を変えることで、見え方や操作感がぐっと変わるのをご存じでしょうか?

たとえばこんな変化ができます

  • キャラクターの真後ろを中心に回転(標準)
  • 少し高めの位置を中心に回転 → 俯瞰視点に近くなる
  • キャラクターの足元を中心に回転 → 下から見上げるような視点も可能に

回転中心を調整するには?

以下のように、target.position にオフセットを加えるだけでOKです。

// 少し上からの視点にする例(キャラの頭上を中心に回転)
Vector3 offsetTarget = target.position + new Vector3(0, 1.5f, 0);
Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + offsetTarget;

オフセットを +Y方向 に変えることで、視点が少し高いところからキャラクターを見るようになります。

オフセット値回転中心の位置見え方の特徴
(0, 0, 0)キャラの中心(通常)標準的なTPS視点
(0, 1.5, 0)少し上(頭のあたり)軽い俯瞰・操作しやすい
(0, -1.0, 0)足元を中心キャラを下から見上げる視点

まとめ

笑顔で親指を立てている女の子キャラクター。草原と青空を背景に達成感のあるポーズをとっているUnity学習のまとめ用イメージ

今回は、右クリック+マウス操作でカメラを回転させる「自由視点カメラ」の作り方を実装しました。

プレイヤーの周囲を見渡せるようになるだけで、ゲームの臨場感や没入感がぐっと高まりますよね!

今回学んだポイントをふりかえり

  • プレイヤーを中心にカメラを回す仕組み(TPS視点の基礎)
  • マウス入力の取得とカメラ回転の実装
  • 回転角度や感度の調整
  • オフセットで回転の中心を変える発展テクニック

自由視点カメラは、アクション・アドベンチャー・RPGなどさまざまなジャンルで使われている超基本かつ応用度の高いカメラ手法です。
このカメラが使えるようになると、ゲーム表現の幅が一気に広がります

次回は、マウスホイールによるカメラのズームイン・ズームアウトに挑戦してみましょう!
カメラの距離感を自由に調整できるようになると、視点の自由度がさらにアップしますよ。

それでは、また次の記事でお会いしましょう😊

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次