皆さんこんにちは、内山です。
今回の記事では、
Unityで一人称視点カメラを作る方法を解説したいと思います!
FPSゲームではもちろん、
他のゲームを開発する時でも使えるテクニックになっているので
この機会に習得してしまいましょう!
カメラが向いている方向に、移動する方法も解説します!
UnityでFPS視点カメラを作る方法
実はカメラを1人称視点にするのは非常に簡単です。
下記のようにMainCameraとPlayerのオブジェクト(今回はCapsule)の
Positionを0にしてあげてください!
そうしたら次に、メインカメラを選択してMoveツールを用いて
MainCameraを上に動かしていきましょう!
動かせたらMainCameraをPlayerオブジェクトの配下にしてあげましょう。(ドラッグ&ドロップでできます)
こうすることで、Playerオブジェクトが動くとカメラも同じように動いてくれます。
FPS視点カメラのコード記述
まずはFPSControllerというスクリプトを作成して、
Playerオブジェクトにアタッチします。
アタッチしたらFPSControllerに下記コードを記述してください。
FPSController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FPSController : MonoBehaviour
{
float x, z;//キーボード入力受け取り用の変数
float speed = 0.1f;//移動スピード調整用の変数
public GameObject cam;//カメラ格納
//カメラのQuaternionを格納、キャラのQuaternionを格納
Quaternion cameraRot, characterRot;
float Xsensityvity = 3f, Ysensityvity = 3f;//エイム感度調整用変数
bool cursorLock = true;//ゲームプレイ中にカーソルの表示非表示を切り替える判定に用いる変数
float minX = -90f, maxX = 90f;//角度の制限用
// Start is called before the first frame update
void Start()
{//回転を変数に格納する
cameraRot = cam.transform.localRotation;
characterRot = transform.localRotation;
}
// Update is called once per frame
void Update()
{
//変数を宣言しつつ、マウスの動き×感度調整用の数値を格納
float xRot = Input.GetAxis("Mouse X") * Ysensityvity;
float yRot = Input.GetAxis("Mouse Y") * Xsensityvity;
//現在の回転に上記変数の値をかける(回転の場合は+ではなく×)
cameraRot *= Quaternion.Euler(-yRot, 0, 0);
characterRot *= Quaternion.Euler(0, xRot, 0);
//視点角度に制限をつける関数を呼ぶ
cameraRot = ClampRotation(cameraRot);
//制限されている角度内に丸められた数値を現在の回転に代入する
cam.transform.localRotation = cameraRot;
transform.localRotation = characterRot;
//マウスの表示非表示を切り替える関数
UpdateCursorLock();
}
private void FixedUpdate()
{
//初期化
x = 0;
z = 0;
//キーボード入力(w,s,a,dまたは矢印)×スピード変数を変数に代入する
x = Input.GetAxisRaw("Horizontal") * speed;
z = Input.GetAxisRaw("Vertical") * speed;
//現在のポジションに入力されている数値を足す。
//カメラの正面方向×Zの変数、カメラの横方向× xの変数
transform.position += cam.transform.forward * z + cam.transform.right * x;
}
//マウスの表示非表示関数
public void UpdateCursorLock()
{
//Escapeが押されたら判定を切り替える
if(Input.GetKeyDown(KeyCode.Escape))
{
cursorLock = false;
}
//マウスの左クリックで判定を切り替える
else if(Input.GetMouseButton(0))
{
cursorLock = true;
}
//cursorLockがtrueならカーソルを非表示にする
if (cursorLock)
{
Cursor.lockState = CursorLockMode.Locked;
}
//cursorLockがfalseならカーソルを表示する
else if(!cursorLock)
{
Cursor.lockState = CursorLockMode.None;
}
}
//角度制限関数
public Quaternion ClampRotation(Quaternion q)
{
//q = x,y,z,w (x,y,zはベクトル(量と向き):wはスカラー(座標とは無関係の量))
q.x /= q.w;
q.y /= q.w;
q.z /= q.w;
q.w = 1f;
float angleX = Mathf.Atan(q.x) * Mathf.Rad2Deg * 2f;
angleX = Mathf.Clamp(angleX,minX,maxX);
q.x = Mathf.Tan(angleX * Mathf.Deg2Rad * 0.5f);
return q;
}
}
コード記述後Playerオブジェクトを選択して、MainCameraをアタッチしてあげましょう!
(スクショ撮影の問題でMainCameraがPlayerオブジェクト配下に無いですが、
気にしないでください)
これでマウスでの視点移動ができ、
向いている方向に動かせるようになりました!
これは他のゲームでも使いまわせるコードになっているので、
ぜひ覚えておいてください‼︎
FPSゲームの作り方
今回のテクニックを使った
本格FPSゲームの作り方講座をYouTubeに無料公開しています。
FPSの作り方を体系的かつ効率的に学びたい人はぜひ視聴してみてください!
その他のUnityオススメ講座
私が初心者の頃にやったオススメ講座を紹介している記事です。
Unity初心者の人でも挫折する心配をせずに、
取り組める講座を中心に紹介をしていますので
初心者の人はぜひ一度覗いてみてください!
↧