UnityにおけるFPSカメラの基本設定
FPSカメラの設定は、プレイヤーの視点にカメラを固定することから始まります。
FPS(First Person Shooter)視点では、カメラがプレイヤーキャラクターの頭部に相当する位置に配置され、キャラクターが見る方向に連動して動くのが一般的です。
-
カメラの配置
プレイヤーオブジェクトに「Main Camera」をドラッグし、頭部の位置に固定します。特にCapsule Colliderなどの形状でプレイヤーを表現する場合は、カメラをCapsuleの上部に配置することで自然な視点が得られます。
-
カメラの角度とフィールドオブビューの設定
カメラのField of View(視野角)を調整することで、視界の広さや臨場感を調整できます。一般的に、60~75度の範囲がFPSゲームに適しています。
FPSカメラのマウス操作設定
FPSカメラにマウスの動きを連動させ、視点を自由に動かせるように設定するには、スクリプトを使った実装が効果的です。
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);
}
}
-
このスクリプトにより、マウスの上下でカメラが垂直に回転し、左右でプレイヤーオブジェクトが水平に回転します。
-
マウス感度の調整
mouseSensitivity変数を調整することで、カメラの回転速度を変更できます。プレイヤーが快適に操作できるよう、テストを重ねて最適な値に設定しましょう。
視点移動の制限と範囲設定
FPS視点のカメラには、視点の回転範囲を制限することが推奨されます。
特に、カメラが上下に無制限に回転してしまうと操作しづらくなるため、角度制限を設けることで操作性が向上します。
- 上下の視点制限
Mathf.Clamp()関数を利用して、xRotationが-90度から90度の範囲内でのみ回転するように設定しています。これにより、視点が真上や真下まで回転しすぎることを防ぎます。
一人称視点での歩行・移動の設定
一人称視点では、視点移動に合わせてキャラクターが移動できることが求められます。
次に、プレイヤーの基本的な移動方法を解説します。
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);
}
}
-
このスクリプトでは、
CharacterControllerを使用して移動の物理演算を処理します。WASDキーの入力に応じてキャラクターの位置を変更し、一人称視点の歩行を実現しています。
-
移動速度の調整
speed変数を調整してキャラクターの移動速度を設定できます。スピードを変えることで、リアルな動きやプレイスタイルに合わせた調整が可能です。
マウスによる視点移動の応用テクニック
基本的な視点移動を設定したら、さらに臨場感を高めるために、追加の操作を実装できます。
-
マウスホイールによるズームイン・アウト
ゲーム内でズーム機能を追加する場合、マウスホイールを使って視野角を動的に変更します。以下のスクリプトで実現できます。
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);
}
-
Mouse ScrollWheelの値で視野角を調整し、ズームイン・アウトを可能にしています。 -
右クリックでのフォーカス切り替え
右クリックで視点を固定し、特定のオブジェクトにフォーカスさせることで、プレイヤーが特定の視点に注意を集中させることができます。UnityのRaycast機能と併用して、特定のアイテムをピックアップしたり、カメラの視点を一時的に固定することも可能です。
まとめ
UnityでのFPSカメラの設定は、基本的な視点移動から応用的な操作まで、幅広いカスタマイズが可能です。
ここで解説した技術を使うことで、一人称視点のカメラとキャラクター移動の実装が実現でき、さらに自由度の高いカメラ操作が可能になります。
この先、カメラの回転や移動をよりスムーズにするための補間処理や、視点変更のエフェクト追加なども取り入れることで、よりリアルで臨場感のあるゲーム体験を提供できるでしょう。
さらに深く学びたい場合は、Unityのオンラインチュートリアルや、スクリプトに関するドキュメントも参考にするとよいです。