ゲームプログラミング独学ブログ

ゲームプログラミングを初心者・未経験から独学で身に着けるための情報をまとめていきます。Unityを使った2D・3Dゲームの開発方法やゲームクリエイターになるための情報もまとめていきます。

UnityでFPSカメラを設定する方法|一人称視点カメラと視点移動を自由にカスタマイズ

【必見】ゲームプログラミング初心者向けのUnityを使ったゲームプログラミング講座サイト「Unity入門の森」の講座ショップ。RPG、アクションゲーム、ノベルゲーム、タワーディフェンス、FPS、レースゲーム、ローグライクゲームと盛りだくさんの講座サイトです。ここで独学でゲーム開発できるようになりました。

UnityにおけるFPSカメラの基本設定

FPSカメラの設定は、プレイヤーの視点にカメラを固定することから始まります。

FPSFirst Person Shooter)視点では、カメラがプレイヤーキャラクターの頭部に相当する位置に配置され、キャラクターが見る方向に連動して動くのが一般的です。

  1. カメラの配置
    プレイヤーオブジェクトに「Main Camera」をドラッグし、頭部の位置に固定します。

    特にCapsule Colliderなどの形状でプレイヤーを表現する場合は、カメラをCapsuleの上部に配置することで自然な視点が得られます。

  2. カメラの角度とフィールドオブビューの設定
    カメラのField of View(視野角)を調整することで、視界の広さや臨場感を調整できます。

    一般的に、60~75度の範囲がFPSゲームに適しています。

FPSカメラのマウス操作設定

FPSカメラにマウスの動きを連動させ、視点を自由に動かせるように設定するには、スクリプトを使った実装が効果的です。

  1. スクリプトでの回転制御
    以下のようなスクリプトをCameraオブジェクトに追加することで、マウスの動きに応じたカメラ回転が可能になります。

 

 

using UnityEngine;

public class CameraControl : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    private float xRotation = 0f;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        transform.parent.Rotate(Vector3.up * mouseX);
    }
}

  1. このスクリプトにより、マウスの上下でカメラが垂直に回転し、左右でプレイヤーオブジェクトが水平に回転します。

  2. マウス感度の調整
    mouseSensitivity変数を調整することで、カメラの回転速度を変更できます。

    プレイヤーが快適に操作できるよう、テストを重ねて最適な値に設定しましょう。

視点移動の制限と範囲設定

FPS視点のカメラには、視点の回転範囲を制限することが推奨されます。

特に、カメラが上下に無制限に回転してしまうと操作しづらくなるため、角度制限を設けることで操作性が向上します。

  • 上下の視点制限
    Mathf.Clamp()関数を利用して、xRotationが-90度から90度の範囲内でのみ回転するように設定しています。

    これにより、視点が真上や真下まで回転しすぎることを防ぎます。

     

一人称視点での歩行・移動の設定

一人称視点では、視点移動に合わせてキャラクターが移動できることが求められます。

次に、プレイヤーの基本的な移動方法を解説します。

  1. プレイヤーオブジェクトの移動スクリプト
    以下のようにスクリプトを追加し、WASDキーでキャラクターが移動するように設定します。

 

 

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public CharacterController controller;
    public float speed = 12f;

    void Update()
    {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 move = transform.right * x + transform.forward * z;

        controller.Move(move * speed * Time.deltaTime);
    }
}
  1. このスクリプトでは、CharacterControllerを使用して移動の物理演算を処理します。

    WASDキーの入力に応じてキャラクターの位置を変更し、一人称視点の歩行を実現しています。

  2. 移動速度の調整
    speed変数を調整してキャラクターの移動速度を設定できます。

    スピードを変えることで、リアルな動きやプレイスタイルに合わせた調整が可能です。

マウスによる視点移動の応用テクニック

基本的な視点移動を設定したら、さらに臨場感を高めるために、追加の操作を実装できます。

  1. マウスホイールによるズームイン・アウト
    ゲーム内でズーム機能を追加する場合、マウスホイールを使って視野角を動的に変更します。

    以下のスクリプトで実現できます。

 

public float zoomSpeed = 2f;
private Camera cam;

void Start()
{
    cam = GetComponent();
}

void Update()
{
    float scroll = Input.GetAxis("Mouse ScrollWheel");
    cam.fieldOfView -= scroll * zoomSpeed;
    cam.fieldOfView = Mathf.Clamp(cam.fieldOfView, 20f, 60f);
}
  1. Mouse ScrollWheelの値で視野角を調整し、ズームイン・アウトを可能にしています。

  2. 右クリックでのフォーカス切り替え
    右クリックで視点を固定し、特定のオブジェクトにフォーカスさせることで、プレイヤーが特定の視点に注意を集中させることができます。

    UnityのRaycast機能と併用して、特定のアイテムをピックアップしたり、カメラの視点を一時的に固定することも可能です。

まとめ

UnityでのFPSカメラの設定は、基本的な視点移動から応用的な操作まで、幅広いカスタマイズが可能です。

ここで解説した技術を使うことで、一人称視点のカメラとキャラクター移動の実装が実現でき、さらに自由度の高いカメラ操作が可能になります。

この先、カメラの回転や移動をよりスムーズにするための補間処理や、視点変更のエフェクト追加なども取り入れることで、よりリアルで臨場感のあるゲーム体験を提供できるでしょう。

さらに深く学びたい場合は、Unityのオンラインチュートリアルや、スクリプトに関するドキュメントも参考にするとよいです。