FPSにて、横方向の視点移動の時のみかくつく問題
現在FPSゲームの視点移動の実装をし、試運転しました。マウスを縦方向に動かした場合はCameraをX軸中心に回転させ、マウスを横方向に動かした場合はPlayer本体をY軸中心に回転させています。しかし、横方向の視点移動がフレームが飛んだかのようにカクついてしまいます。
発生している問題・エラーメッセージ
横方向の視点移動がカクつく
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MouseLook2 : MonoBehaviour 6{ 7 public static float lookSensitivity = 5;//マウス感度 8 Transform playerTr; 9 float mouseX, mouseY; 10 float rotationXcamera; 11 Transform transformCamera; 12 13 void Start() 14 { 15 playerTr = transform.root.gameObject.GetComponent<Transform>(); 16 transformCamera = Camera.main.transform; 17 rotationXcamera = transformCamera.localEulerAngles.x; 18 } 19 20 void Update() 21 { 22 moveExecution(); 23 } 24 void moveExecution() 25 { 26 mouseX = Input.GetAxis("Mouse X"); 27 mouseY = Input.GetAxis("Mouse Y"); 28 //マウスの左右移動に応じてプレイヤーのY軸を回転 29 playerTr.eulerAngles = new Vector3(0, playerTr.rotation.eulerAngles.y + mouseX * lookSensitivity * Time.deltaTime * 100.0f, 0); 30 //マウスの上下移動に応じてカメラのX回転角の値を決める。+-方向90度までに制限をかける。 31 rotationXcamera = Mathf.Clamp(rotationXcamera - mouseY * Time.deltaTime * lookSensitivity * 100.0f, -90, 90); 32 //カメラのX回転角を設定 33 transformCamera.localEulerAngles = new Vector3(rotationXcamera, 0, 0); 34 } 35}
試したこと
Player本体を回転させる際、なめらかに回転せずに所々でフレーム飛んだようにかくつくことがあります。フレームレートを確認しても300~60で推移していたのでフレーム飛びでもなさそうです。
もし原因がわかる方いらっしゃいましたらよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
カクつきは水平方向だけで発生するのでしょうか?
ご提示のコードをちょっと試してみた限りでは、フレームレート変動対応の仕方にちょっと疑問を感じたものの("Mouse X"や"Mouse Y"がフレームレートの影響を受けるのにもかかわらず、Time.deltaTimeの項を設けるのはいかがなものか...参考: https://sleepygamersmemo.blogspot.com/2017/08/unity-mouse-input.html )、水平方向だけにカクつきを生じそうな要素は見当たりませんでした。
マウスの移動量変化が急激すぎてカクついているように感じることはあったものの、これは水平方向にも垂直方向にも起こる現象でした。画面構成の関係上垂直方向のカクつきが目立たない(たとえば周りの景色の構成要素が地面に対して直立した縦長の物体が主体であれば、水平方向への視点回転は映像の変化が大きくてカクつきが目立ちやすい...といった可能性があるでしょう)というわけではなく、本当に水平方向だけで明確にカクつくということでしょうか?
可能であれば、そのカクつき現象を撮影してご提示いただけませんでしょうか。もしかするとカクつきの様子から何かしらの手がかりが得られるかもしれません。
ご返答ありがとうございます。実はつい先日解決いたしまして、原因としましては曇ガラスのシェーダースクリプトに不備があり、ゲーム自体がガックガクになってました。水平方向のみカクつくと誤認したのは、恐らくテストの際に垂直方向の視点移動をあまりしてなかったからだと思います。プロファイラーで見る限り、スパイクは発生しているものの、ビルドすればヌルヌル動くようになったため改善したと思います。
Time.deltatimeは視点移動に組み込まないほうが良いのですね!勉強になりました、わざわざリンクまで頂いてありがとうございました。
なるほど、原因が特定できましたようで安心しました。お時間のあるときにでも、解決の概要を自己解決回答として投稿いただくといいかと思います。
回答1件
あなたの回答
tips
プレビュー