下記のようなもので動かしているのですがアニメーションがおかしくなってしまい困っています。
不具合の正確な発生条件が分かっていないのですが、ずっとある方向に動かした後に違う方向に動かすと違う方向へと移動はするのですがアニメーションが最初に動かしていた方向のアニメーションになってしまいます。その際に一瞬だけ違う方向のアニメーションが再生しているようにも見えます。
どこを修正すればよいのか教えていただけたらと思います。
よろしくお願いします。
修正コード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour{ Vector3 MOVEX = new Vector3(0.32f, 0, 0); // x軸方向に1マス移動するときの距離 Vector3 MOVEY = new Vector3(0, 0.32f, 0); // y軸方向に1マス移動するときの距離 float step = 2f; // 移動速度 Vector3 target; // 入力受付時、移動後の位置を算出して保存 Vector3 prevPos; // 何らかの理由で移動できなかった場合、元の位置に戻すため移動前の位置を保存 Animator animator; // アニメーション // Use this for initialization void Start() { target = transform.position; animator = GetComponent<Animator>(); } // Update is called once per frame void Update() { // ① 移動中かどうかの判定。移動中でなければ入力を受付 if (transform.position == target) { SetTargetPosition(); } Move(); } // ② 入力に応じて移動後の位置を算出 void SetTargetPosition() { prevPos = target; if (Input.GetKey("down")) { SetAnimationParam(0); target = transform.position - MOVEY; return; } if (Input.GetKey("up")) { SetAnimationParam(1); target = transform.position + MOVEY; return; } if (Input.GetKey("right")) { SetAnimationParam(2); target = transform.position + MOVEX; return; } if (Input.GetKey("left")) { SetAnimationParam(3); target = transform.position - MOVEX; return; } } // WalkParam 0;下移動 1;上移動 2:右移動 3:左移動 void SetAnimationParam(int param) { this.animator.SetInteger("Move",param); } // ③ 目的地へ移動する void Move() { transform.position = Vector3.MoveTowards(transform.position, target, step * Time.deltaTime); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour{ Vector3 MOVEX = new Vector3(0.32f, 0, 0); // x軸方向に1マス移動するときの距離 Vector3 MOVEY = new Vector3(0, 0.32f, 0); // y軸方向に1マス移動するときの距離 float step = 2f; // 移動速度 Vector3 target; // 入力受付時、移動後の位置を算出して保存 Vector3 prevPos; // 何らかの理由で移動できなかった場合、元の位置に戻すため移動前の位置を保存 Animator animator; // アニメーション // Use this for initialization void Start() { target = transform.position; animator = GetComponent<Animator>(); } // Update is called once per frame void Update() { // ① 移動中かどうかの判定。移動中でなければ入力を受付 if (transform.position == target) { SetTargetPosition(); } Move(); } // ② 入力に応じて移動後の位置を算出 void SetTargetPosition() { prevPos = target; if (Input.GetKey("right")) { target = transform.position + MOVEX; SetAnimationParam(1); return; } if (Input.GetKey("left")) { target = transform.position - MOVEX; SetAnimationParam(2); return; } if (Input.GetKey("up")) { target = transform.position + MOVEY; SetAnimationParam(3); return; } if (Input.GetKey("down")) { target = transform.position - MOVEY; SetAnimationParam(0); return; } } // WalkParam 0;下移動 1;右移動 2:左移動 3:上移動 void SetAnimationParam(int param) { switch (param) { case 0: this.animator.SetTrigger("FrontTrriger"); break; case 1: this.animator.SetTrigger("RightTrriger"); break; case 2: this.animator.SetTrigger("LeftTrriger"); break; case 3: this.animator.SetTrigger("BackTrriger"); break; } } // ③ 目的地へ移動する void Move() { transform.position = Vector3.MoveTowards(transform.position, target, step * Time.deltaTime); } }
AnimatorController(モーションの遷移条件)の問題のように思います。スクリーンショットを貼るかTransition条件を記載してください。
AnimatorControllerとはこの画像で大丈夫ですか?
Right→Front間の矢印と、Front→Right間の矢印の詳細(条件設定)も載せて頂けますか?
条件設定とは?これで大丈夫でしょうか?
OKです、ありがとうございます。が、正直何故そう動くのか分かっていません……どの方向に動いた時も発生しますか? 細かい発生条件はありますか?(すごく高速にキー切り替えすると起こるとか)
どの方向でも発生します。速さ自体は関係なさそうなんですが、同一方向に続けて移動させた後に発生するようです。右右左などで最終的に右を向いてしまう
修正方法でなくてもより安定して動く方法があれば教えていただきたいです。

回答1件
あなたの回答
tips
プレビュー