🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

1526閲覧

【Unity】FPSカメラの描画ブレに関して

Y0241-N

総合スコア1066

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2021/03/11 05:53

発生している問題・実現したいこと

現在、カメラ単体を移動、視野回転出来る状態(FPSCam)を目指しています。
問題は通常移動、視野回転別々であれば描画に何ら問題がないのですが、移動+視野回転となると、静止物体の描画にブレ(コマ落ちのような状態)が生じます。

色々と調べ、スクリプトの実行順序であったり(カメラの描画処理を最後に回す)、プロジェクトのFPSを見直したり(60FPS、FPS制限なしの切り替え)、Unityのバージョンを変更してみたり、別PCで作業なども試してみたのですが、解決に至らず悩んでいます。

カメラの移動をtrasform.positionで変更しているので、これが原因なのかなとも思っていますが、Rigidbodyはなしでオブジェクトを貫通して移動できるようにしたいため、他の移動方法が分かりません。

どなたか同じ症状に陥った方などはいらっしゃらないでしょうか?
解決策をお待ちしております。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class FirstPersonCam : MonoBehaviour 6{ 7 Vector3 startPos; 8 private Camera Cam; 9 public float AddSpeed; 10 [SerializeField] private float m_TiltMax = 60f; 11 [SerializeField] private float m_TiltMin = 50f; 12 Vector3 InputMoveValue; 13 void Start() 14 { 15 Cam = this.gameObject.GetComponent<Camera>(); 16 if(Cam == null)return; 17 InputMoveValue += transform.position; 18 } 19 20 void Update() 21 { 22 CamMoves(); 23 } 24 25 void LateUpdate() 26 { 27 if(Input.GetMouseButton(1)) 28 { 29 rotateCmaeraAngle(); 30 } 31 } 32 33 void CamMoves()//カメラ移動 34 { 35 startPos = transform.position; 36 37 InputMoveValue += transform.right * Input.GetAxis("Horizontal") * AddSpeed * Time.deltaTime; 38 InputMoveValue += transform.forward * Input.GetAxis("Vertical") * AddSpeed * Time.deltaTime; 39 transform.position = Vector3.Lerp(startPos,InputMoveValue,5f * Time.deltaTime); 40 } 41 42 private void rotateCmaeraAngle()//カメラ回転 43 { 44 Vector3 angle = new Vector3( Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * 2f; 45 46 if(Cam.fieldOfView <= 40.0f) 47 { 48 angle.y = angle.y * 0.6f; 49 } 50 transform.eulerAngles += new Vector3(-angle.y, angle.x); 51 float angle_x = 180f <= transform.eulerAngles.x ? transform.eulerAngles.x - 360 : transform.eulerAngles.x; 52 angle_x = Mathf.Clamp(angle_x, -m_TiltMin, m_TiltMax); 53 54 transform.eulerAngles = new Vector3 (angle_x, transform.eulerAngles.y, 0); 55 } 56}

補足情報(FW/ツールのバージョンなど)

Unity 2019.4.13f1 LTS版

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

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

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

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

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

guest

回答1

0

自己解決

transform.eulerAnglesで回転値を変更するのではなく、Quaternion.Eulerで予めQuaternion値に変換した値をtransform.rotationで変更すると上手くいきました。

投稿2021/05/25 01:22

Y0241-N

総合スコア1066

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問