重要なお知らせ:誠に勝手ながら当サイト(unityroom質問掲示板)は2021年10月31日をもちまして閉鎖させていただきます。ご利用誠にありがとうございました。

unityroom.com については引き続きご利用いただけます。

0 支持
42 閲覧

シーンが切り替わる瞬間当たりにマウスを上(?)に瞬発的に動かすと、切り替わった後のカメラが上下左右反転してしまうのを直したいです。

たまに発生していたFPSのカメラの反転のタイミングがシーンが切り替わるときにマウスが素早く(?)動いている時に起きる現象だとまでは分かりました。
[https://www.youtube.com/watch?v=Wqav1Cqel_U][1]
その後、カメラの回転軸を観察すると、通常は回転のz軸は0なのですが、反転すると不思議な数字と、ほぼ180になっています。
[https://www.youtube.com/watch?v=K0_p0wxlwrE][2]

初心者ながら検索してカメラの回転をリセットしたり、z軸を0から始めるスクリプトを書き加えたりしてみましたがダメでした。
タイミング会う時しか出ないバクなのですが、解決しないといけないものであるので、その方法を教えてください。
どうぞ宜しくお願い申し上げます。

ソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseCamera : MonoBehaviour
{
[SerializeField]
float viewAngle;
public float mousespeed;
float _inputX, _inputY;

// Start is called before the first frame update
void Start()
{
//カーソルをロックする
Cursor.lockState = CursorLockMode.Locked;
//カーソルを見えなくする
Cursor.visible = false;
}

// Update is called once per frame
void Update()
{
_inputX = Input.GetAxis("Mouse X");
_inputY = Input.GetAxis("Mouse Y");
Rotate(_inputXmousespeed, _inputYmousespeed*-1, viewAngle);
}

void Rotate(float _inputX, float _inputY, float limit)
{
float maxLimit = limit, minLimit = 360 - maxLimit;
//X軸回転
var localAngle = transform.localEulerAngles;
localAngle.x += _inputY;
if (localAngle.x > maxLimit && localAngle.x < 180)
localAngle.x = maxLimit;
if (localAngle.x < minLimit && localAngle.x > 180)
localAngle.x = minLimit;
transform.localEulerAngles = localAngle;
//Y軸回転
var angle = transform.eulerAngles;
angle.y += _inputX;
transform.eulerAngles = angle;
}
}
[1]: https://www.youtube.com/watch?v=Wqav1Cqel_U
[2]: https://www.youtube.com/watch?v=K0_p0wxlwrE

初心者 (220 ポイント)
編集 | 42 閲覧

ログインまたはユーザー登録してから回答してください。

関連する質問

0 支持
1 回答
0 支持
1 回答
ry 初心者 (120 ポイント) 9/16 質問 | 30 閲覧
0 支持
0 回答
gacchan11 初心者 (120 ポイント) 5/21 質問 | 49 閲覧
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

180 質問

161 回答

165 コメント

221 ユーザー