x座標が一定時間ごとに変化するオブジェクトをキャラクターにmovetowardsで移動させています
キャラクターは待機中、左移動、(左移動のアニメーションをflipで反転させた)右移動の三種類のアニメーションを持っており、
キャラクターのx座標とランダムに決定されるオブジェクトのx座標をupdate関数にて比較、
ランダムのx座標<キャラクターのx座標ならばキャラクターは左に動くことになるので左移動のアニメーションを、逆ならば右、という具合でアニメーションを実行しています
この時負の方向、左への移動の場合はアニメーションは問題なく行われるのですが、正の方向、右への移動の場合は、右移動のアニメーションがされながらも一定間隔で一瞬だけ待機アニメーションが実行されるという問題にぶつかっています
・この不具合の発生中、アニメーターウィンドウでは右移動と待機のステートが猛スピードで切り替わっています
・アニメーションウィンドウからの再生では問題なく右移動のアニメーションのみが実行されているのでキーの配置には問題がないように思えます
・右移動のアニメーションは左移動のものを反転させているのですが、この一瞬だけ実行される待機アニメーションも反転しています
・一瞬だけ実行される待機アニメーション中もキャラクターの座標移動は恐らく止まっていないです
エラーメッセージもなくどうしたらいいかわからない状態です、どうかお助けください
座標の変化するオブジェクトのスクリプト
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class tage : MonoBehaviour 6 7{ 8 public static float vectx; 9private float time; 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 vectx=0; 15 transform.position = new Vector3(0f,2.6f,-2f); 16 17 StartCoroutine(esa()); 18 } 19 20 // Update is called once per frame 21 void Update() 22 { 23 24 } 25 private IEnumerator esa() 26 { 27 while(true) 28 { 29 yield return new WaitForSeconds(8f); 30 vectx=Random.Range(-1.5f,1.5f); 31 this.transform.position=new Vector3(vectx,2.6f,-2); 32 } 33 } 34} 35
追いかけるキャラクターのスクリプト
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ugoki2a : MonoBehaviour 6{ 7 8 public int speed=1; 9 public GameObject kotti; 10 Vector3 position; 11 float x; 12 13 public Animator animator; 14 15 16 // Start is called before the first frame update 17 void Start() 18 { 19 float x =transform.position.x; 20 transform.position = new Vector3(0f,2.6f,-2f); 21 22 23 24 kotti =GameObject.Find("esa(Clone)"); 25 StartCoroutine(ugoku()); 26 Animator animator = GetComponent<Animator>(); 27 28 29 30 31 32 } 33 34 // Update is called once per frame 35 void Update() 36 { 37 if(tage.vectx<x) 38 { 39 animator.SetBool ( "walker", true );//左に移動するアニメーション 40 41 Debug.Log("ano"); 42 x =transform.position.x; 43 } 44 if(tage.vectx>x) 45 { 46 animator.SetBool ( "walkerRIGHT", true );//右に移動するアニメーション 47 Debug.Log("saa"); 48 x=transform.position.x; 49 } 50 if(tage.vectx==x) 51 { 52 animator.SetBool ( "walker", false ); 53 animator.SetBool ( "walkerRIGHT", false ); 54 55 Debug.Log("Choi"); 56 x =tage.vectx; 57 } 58 59 } 60 61 private IEnumerator ugoku() 62 { 63 while(true) 64 { 65 //Debug.Log("oioi"); 66yield return new WaitForSeconds(0f); 67 68this.transform.position=Vector3.MoveTowards(this.transform.position,kotti.transform.position,speed*Time.deltaTime); 69 70//float x =position.x; 71 } 72 } 73 74} 75
あなたの回答
tips
プレビュー