Developer

【初心者Unity】TPS視点のカメラ操作を雑に実装する方法
2022.09.26
Lv1

【初心者Unity】TPS視点のカメラ操作を雑に実装する方法

1.はじめに

本記事では初心者向けに、TPS視点のカメラ操作を雑に実装する方法を紹介します。
TPS視点と言っても実装方法はさまざまありますが、今回は Transform.RotateAround を使用した実装方法を紹介します。

2.準備

新規シーンを作って床(3D Object > Plane)とカプセル(3D Object > Capsule)を配置しておきます。
カプセルの名前は「Player」にしています。
床は見分けがつくようにマテリアルで色を変更していますが、特に変える必要はありません。

3.視点を移動させる方法

さっそく本題の視点移動の実装を行っていきます。
先に結果を書いてしまいますが、下記のスクリプトを記述して Main Camera にアタッチすれば完成です。

using UnityEngine;

public class CameraScript : MonoBehaviour
{
    [SerializeField] GameObject player;

    void Update()
    {
        // マウスの移動量を取得
        float mx = Input.GetAxis("Mouse X");
        float my = Input.GetAxis("Mouse Y");

        // X方向に一定量移動していれば横回転
        if (Mathf.Abs(mx) > 0.001f)
        {
            // 回転軸はワールド座標のY軸
            transform.RotateAround(player.transform.position, Vector3.up, mx);
        }

        // Y方向に一定量移動していれば縦回転
        if (Mathf.Abs(my) > 0.001f)
        {
            // 回転軸はカメラ自身のX軸
            transform.RotateAround(player.transform.position, transform.right, my);
        }
    }
}

変数の player には、Inspectorビューで Player を設定してください。

マウスを自由に動かしてみて、視点が動くことを確認しましょう。

以下解説になります。
下記の仕様で実装を行っています。

・水平、垂直方向ともに、プレイヤー位置を基準に円形にカメラが動く
・水平方向における軸はワールド座標のY軸方向
・垂直方向における軸はカメラのX軸方向

図にすると下図のようなイメージです。

水平方向はわかりやすいと思いますが、垂直方向がややわかりづらく、
中心はプレイヤーですが軸の向きはカメラのX軸を基準としています。
違いがイメージしづらい場合は、コードを書き換えて違いを見てみると良いかと思います。

次にスクリプトで使用する、Transform.RotateAround の使い方を確認しましょう。
(公式リファレンス)Transform.RotateAround

●メソッドの定義
public void RotateAround (Vector3 point, Vector3 axis, float angle);

●どんなメソッド?
ある対象を中心にある軸まわりにオブジェクトを回転させます

●引数の役割
 point → 回転の中心となる位置
 axis → 回転の軸
 angle → 回転の角度

コードを改めて眺めてみると、point と axis についてここまでの説明通りに実装がされているのが分かると思います。
残る引数の angle についてはマウスの横方向、縦方向それぞれの移動量を設定しています。

4.(おまけ)カメラをプレイヤーに追従させる

TPS や FPS視点では通常、カメラがプレイヤーに追従するように実装されています。
追従させるための一番簡単な方法は、カメラをプレイヤーの子要素にする方法です。

下記のように Main Camera を Player の子要素となるように設定します。

これだけで追従させることが可能ですが、これだけではカメラが近すぎたり遠すぎたりすると思いますので、位置や角度だけお好みで調整しておきましょう。

この状態でプレイヤーを移動させると、カメラが追従していることがわかります。

なお追従していることの確認ですが、下記の記事を参考にキー操作による移動のスクリプトを実装して確認を行っています。
【初心者Unity】オブジェクトをキー入力で移動させる方法

5.おわりに

TPS視点のカメラ操作をサクッと実装してみました。
かなり簡単に作っているので粗はありますが、とりあえずゲームを作って最低限のカメラ操作を実装したいときや、
Unityの勉強をはじめたばかりの方の役に立てば幸いです。

 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次