解決したいこと
キャラクターの移動を一枚のスクリプトで行っています、移動の方法はAddForceで上下左右に平行移動させ、
これに回転を組み合わせています。
移動に関してはこちらの記事を参考にさせていただきました。
UnityでRigidBodyのAddForce()に速度制限をつけてすーっと動かしてすーっと止める
このスクリプトで左右の平行移動と回転を同時に行うと、若干ではあるのですがブレが発生してしまいます。
このブレが発生する原因を特定し、解消したいです。
色々と試した結果、他の物(カメラや他のスクリプトが原因かどうか)の影響は受けておらず、
この移動のスクリプトに問題があると思われるのですが、結局自力では解明できなかったので質問させていただきます。
カメラはUnityChanの子オブジェクトとして配置しているだけで制御していません。
このスクリプト以外は外しています。
参考GIF(わかりにくいですが、回転移動時に床の文字がブレています)
###Script
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { [SerializeField] private float m_TurnSpeed = 3f; // ユーザー入力からリグが回転する速度。 [SerializeField] private float m_TurnSmoothing = 0.0f; //カメラの追尾にどれだけディレイをかけるか private float m_LookAngle; // リグのy軸回転。 private Quaternion m_TransformTargetRot; private float h; private float v; public float moveSpeed; // 移動速度 public float moveForceMultiplier; // 移動速度の入力に対する追従度 private Rigidbody rb; private void Start () { m_TransformTargetRot = transform.localRotation; rb = GetComponent<Rigidbody> (); } void Update() { h = Input.GetAxis ("Horizontal"); v = Input.GetAxis ("Vertical"); Rotate(); } void FixedUpdate () { Moving(); } void Moving() { Vector3 moveVector = Vector3.zero; // 移動速度の入力 Vector3 Forward = this.transform.forward; Vector3 Right = this.transform.right; Forward.y = 0.0f; // 水平方向に移動させたい場合はy方向成分を0にする Right.y = 0.0f; moveVector = moveSpeed * (Right.normalized * h + Forward.normalized * v); rb.AddForce(moveForceMultiplier * (moveVector - rb.velocity)); } protected void Rotate() { var x = Input.GetAxis("Mouse X"); m_LookAngle += x*m_TurnSpeed; m_TransformTargetRot = Quaternion.Euler(0f, m_LookAngle, 0f); if (m_TurnSmoothing > 0) { transform.localRotation = Quaternion.Slerp(transform.localRotation, m_TransformTargetRot, m_TurnSmoothing * Time.deltaTime); } else { //今回の実行時はm_TurnSmoothingは0なのでここの処理を使用 transform.localRotation = m_TransformTargetRot; } } }
試したこと
もともと回転は別のスクリプトで分けていたのですが、この時から既にブレが発生していたので、
統合すれば解決するのではと思い、まとめてみるが変化なし。
回転をUpdateメソッドで行い、移動をFixedUpdateで行っていることが原因かと考え、
Update内でどちらも処理してみるが変化なし。
移動の方法に問題があるのかと思い、元々TransfromDirectionで移動処理を行っていたところ、
現在のAddForce形式に変更するが変化なし。
回転の方法に問題があるのでしょうか...?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。