以下の内容はhttps://hakase0274.hatenablog.com/entry/2019/11/09/200000より取得しました。


Unity 以前作ったFPSカメラに縦方向の制限を付けた

あいさつ

どうも、はかせです。

以前UnityでFPSっぽいカメラを作ってみました。
hakase0274.hatenablog.com

概ねの動きは上記の記事で問題ないと思うのですが、
一部問題と言うか一般的なFPSゲームのカメラの動きと
異なる部分がありました。

今回はその修正の話です。

異なる点

私が作ったものはマウスの動きに追従して
カメラの上下左右の回転を行うものでした。

動き自体はこれでいいんですが、
よくあるFPSゲームの動きと違う点が一つ。

それは
縦方向の動きに制限がないこと

ようは首が縦方向に360度回転しちゃうってことですね。
ゲームによっては問題ないかもなんで
問題ではなく異なる点と表現しましたが、
普通に人間がプレイヤーなら大問題ですね。

角度制限を付ける

360度回っちゃうのはまずいので直します。

と言ってもそこまで難しいことをするわけではなく
素直に現在の回転角度もってきて、
制限外に出る場合反映しないようにするだけです。

ではコード

using UnityEngine;

public class MouseCamera : MonoBehaviour
{
    [Header("首の横の動きをさせるオブジェクト")]
    public Transform YAxis;
    [Header("首の縦の動きをさせるオブジェクト")]
    public Transform XAxis;

    [Header("首の横の動きの感度")]
    public float XSpeed = 1.0f;
    [Header("首の縦の動きの感度")]
    public float YSpeed = 1.0f;

    [Header("首の縦の動きの限界角度")]
    public float LimitXAxizAngle = 30;

    //首の縦の動きを反映させるためのvector3
    private Vector3 mXAxiz;
    private void Start()
    {
        //カーソルをロックする
        Cursor.lockState = CursorLockMode.Locked;
        //カーソルを見えなくする
        Cursor.visible = false;

        //初期角度を取得して置く
        mXAxiz = XAxis.localEulerAngles;
    }

    // Update is called once per frame
    void Update()
    {
        //首の横の動きを計算
        float X_Rotation = Input.GetAxis("Mouse X") * XSpeed * Time.deltaTime;
        //反映
        YAxis.transform.Rotate(0, -X_Rotation, 0);

        //首の縦の動きを計算
        float Y_Rotation = Input.GetAxis("Mouse Y") * YSpeed * Time.deltaTime;
        var x = mXAxiz.x + Y_Rotation;
        //角度検証
        if (x >= -LimitXAxizAngle && x <= LimitXAxizAngle)
        {
            //問題無ければ反映
            mXAxiz.x = x;
            XAxis.localEulerAngles = mXAxiz;
        }
    }
}

一応親子関係とか初期回転が掛かってるとか考えて
Startで角度とってきてます。

後はUpdateで角度を計算し
角度制限を設けて反映するようにしました。

制限と言ったらMathf.Clampが真っ先に思いつきますが、
角度が内部的に負の値と正の値を行ったり来たりして
Clampでやるのがめんどくさいなと思ったので
素直にif文でやってます。
(いい方法あったら教えてください)

実行結果

www.youtube.com
上下の移動が途中で止まってるのが確認できるかと思います。

あと横方向には360度行けます。
(横方向は本体が回転すればいいからね)

あとがき

今回は以前作ったFPSカメラの修正でした。

FPSゲームって実は全くやらないんで
カメラの動きに気付かなかったんですよね。

ただたまに友人のFPSプレイとか見たりしてて
その時に
「そういやあんま上とか下とかに行き切らないような」
と思い今回の修正を行いました。

今回の記事が良ければスターやコメント等よろしくお願いします。
それでは今回はこの辺でノシ




以上の内容はhttps://hakase0274.hatenablog.com/entry/2019/11/09/200000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14