はじめに
今回はUnityでFPS風の視点移動を実装する方法を説明したいと思います。以下が最終的にイメージしているものです。マウス操作で視点移動とPlayerの向きを変更させ、wasdで移動です。
準備するもの
まず以下の画像のようにcubeでplayerを作り、そのオブジェクト配下にメインカメラを置きます。(今回はカメラの挙動がわかりやすいようにcubeをplayer配下に置き、その中にMainCameraを置いています。)
C#スクリプト
今回はプレイヤーとカメラに一つずつスクリプトつけようと思います。
以下がプレイヤーにつけるスクリプトです。
ここではプレイヤーの移動と左右の視点移動を実装しています。
player.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
private float speed=30.0f;
void Update()
{
// Playerの前後左右の移動
float xMovement = Input.GetAxis("Horizontal") * speed * Time.deltaTime; // 左右の移動
float zMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime; // 前後の移動
transform.Translate(xMovement, 0, zMovement); // オブジェクトの位置を更新
//マウスカーソルで左右視点移動
float mx = Input.GetAxis("Mouse X");//カーソルの横の移動量を取得
float my = Input.GetAxis("Mouse Y");//カーソルの縦の移動量を取得
if (Mathf.Abs(mx) > 0.001f) // X方向に一定量移動していれば横回転
{
transform.RotateAround(transform.position, Vector3.up, mx); // 回転軸はplayerオブジェクトのワールド座標Y軸
}
}
}
注意
public class 〇〇 : MonoBehaviour
〇〇の部分がスクリプト名と異なる場合、エラーの原因となるので注意!
補足
transform.RotateAround(回転の中心, 回転の軸(Vector3.upは(0,1,0)のことなのでy軸を軸としている), 変化量);
次にMainCameraにつけるスクリプです。以下がそのスクリプトです。ここでは縦方向にカメラを移動させるための実装を書いています。
camerarotation.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class camerarotation : MonoBehaviour
{
public GameObject player;//playerのゲームオブジェクトを入れる変数を設定
void Update()
{
float my = Input.GetAxis("Mouse Y");//マウスの縦方向の移動量を取得
if (Mathf.Abs(my) > 0.001f)// Y方向に一定量移動していれば縦回転
{
transform.RotateAround(player.transform.position, Vector3.right, -my);
}
}
}
補足
transform.RotateAround(player.transform.position, transform.right, -my);
playerを中心としてx軸を回転の軸として回転する。
まとめ
今回はFPSのような視点を使ったゲームを作ろうと思ったので調べながら実装を行いました。アセットなども使わずに簡単に実装できたので良かったです。これからも学習したことを載せていきます。