質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2116閲覧

FPSにて、横方向の視点移動の時のみかくつく問題

Teis1n-5

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/02/14 14:23

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2021/02/17 19:34

カクつきは水平方向だけで発生するのでしょうか? ご提示のコードをちょっと試してみた限りでは、フレームレート変動対応の仕方にちょっと疑問を感じたものの("Mouse X"や"Mouse Y"がフレームレートの影響を受けるのにもかかわらず、Time.deltaTimeの項を設けるのはいかがなものか...参考: https://sleepygamersmemo.blogspot.com/2017/08/unity-mouse-input.html )、水平方向だけにカクつきを生じそうな要素は見当たりませんでした。 マウスの移動量変化が急激すぎてカクついているように感じることはあったものの、これは水平方向にも垂直方向にも起こる現象でした。画面構成の関係上垂直方向のカクつきが目立たない(たとえば周りの景色の構成要素が地面に対して直立した縦長の物体が主体であれば、水平方向への視点回転は映像の変化が大きくてカクつきが目立ちやすい...といった可能性があるでしょう)というわけではなく、本当に水平方向だけで明確にカクつくということでしょうか? 可能であれば、そのカクつき現象を撮影してご提示いただけませんでしょうか。もしかするとカクつきの様子から何かしらの手がかりが得られるかもしれません。
Teis1n-5

2021/02/17 19:43

ご返答ありがとうございます。実はつい先日解決いたしまして、原因としましては曇ガラスのシェーダースクリプトに不備があり、ゲーム自体がガックガクになってました。水平方向のみカクつくと誤認したのは、恐らくテストの際に垂直方向の視点移動をあまりしてなかったからだと思います。プロファイラーで見る限り、スパイクは発生しているものの、ビルドすればヌルヌル動くようになったため改善したと思います。 Time.deltatimeは視点移動に組み込まないほうが良いのですね!勉強になりました、わざわざリンクまで頂いてありがとうございました。
Bongo

2021/02/17 19:45

なるほど、原因が特定できましたようで安心しました。お時間のあるときにでも、解決の概要を自己解決回答として投稿いただくといいかと思います。
guest

回答1

0

自己解決

曇ガラスシェーダーのスクリプトに不備があり、プロファイラーでスパイクが大量発生してたのが原因でした。スクリプトを変更したところ、カクつきはなくなりました。皆さんありがとうございました。

投稿2021/02/17 19:44

Teis1n-5

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問