実現したいこと
Quaternion.Eulerを用いて現在のRotationの数値に加算して回転を実行したい。
発生している問題
キャラクターをキー入力で操作した後、マウスでカメラを回転する際に一度Rotationが(0,0,0)
となってから回転が始まるため、キャラクターが回転してしまう。
該当のソースコード
変更したい部分は赤字で強調した箇所です。
using System; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; namespace FPC { public class FPS : MonoBehaviour { public Transform target; [Range(0f, 10f)] [SerializeField] private float m_TurnSpeed = 3f; // ユーザー入力からリグが回転する速度。 [SerializeField] private float m_TurnSmoothing = 5f; // マウスの回転のぎこちなさを軽減するために、回転入力にどの程度のスムージングを適用するか。 [SerializeField] private float m_TiltMax = 50f; // カメラのX軸回転の最大値。 [SerializeField] private float m_TiltMin = 50f; // カメラのX軸回転の最小値。 private float m_LookAngle; // リグのy軸回転。 private float m_TiltAngle; // リグのX軸回転。 private Quaternion m_TransformTargetRot; private Transform m_transform; protected void Start() { m_TransformTargetRot = transform.localRotation; m_transform = this.transform; } protected void Update() { if (Input.GetMouseButton(0)) HandleRotationMovement(); } private void HandleRotationMovement() { if(Time.timeScale < float.Epsilon) return; // ユーザー入力の設定 var x = CrossPlatformInputManager.GetAxis("Mouse X"); var y = CrossPlatformInputManager.GetAxis("Mouse Y"); // 回転速度と水平方向の入力に比例した量だけ、視角を調整します。 m_LookAngle += x*m_TurnSpeed; m_TiltAngle -= y*m_TurnSpeed; // リグ(ルートオブジェクト)をY軸のみの周りに回転させます。 m_TransformTargetRot = Quaternion.Euler(Mathf.Clamp(m_TiltAngle,-m_TiltMin,m_TiltMax), Mathf.Clamp(m_LookAngle,0,0), 0f); 'target.transform.rotation = Quaternion.Euler(0f,m_LookAngle,0f);' if (m_TurnSmoothing > 0) { transform.localRotation = Quaternion.Slerp(transform.localRotation, m_TransformTargetRot, m_TurnSmoothing * Time.deltaTime); } else { transform.localRotation = m_TransformTargetRot; } } } }
試したこと
=を+=にしてみた
➡エラー:演算子 '+ ='は、タイプ 'Quaternion'および 'Quaternion'のオペランドには適用できません。
Quaternion.EulerではなくRotateにしてみた
➡回転が不安定に、キー入力を行うと過剰回転してしまう
Ver2018.3使用

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/13 23:40
2019/06/14 04:15 編集