Jessca Stone Ответов: 0

Unity3d: как вернуть мой плеер обратно в состояние ожидания анимации


У меня возникла проблема с возвращением анимации состояния ожидания в моей игре. Этот видео[^ это пример того, в чем заключается моя проблема. Мой плеер не возвращается к анимации состояния ожидания, которую я попытался добавить в свой код:

anim.SetBool ("walking", false); 

(Это помещено ближе к концу моего код[^])

Но это происходит[^]. А это совсем не то, чего я хочу. В первый[^] видео, которое я вам показывал, показывает, как я нажимаю кнопку шагающий параметр выключен[^] так что я могу показать вам, как будет выглядеть моя анимация, если мой игрок остановится, как только достигнет пункта назначения.На видео вы можете видеть, что мой плеер повернулся не в ту сторону после того, как спустился и поднялся, он столкнулся с этим путь[^] и что путь[^], который я тоже хотел бы исправить, но понятия не имею, как это сделать. Так что может ли кто-нибудь помочь мне с обеими моими проблемами, а именно:

Возвращение обратно в режим ожидания анимации, как только мой плеер достигнет места назначения.
И убедившись, что мой игрок смотрит в правильном направлении, как это и должно быть. Спрайт моего игрока изображение[^]


Вот мой код:

<pre lang="C#">	
        
        private Animator anim;
	public float speed = 15f;
	private Vector3 target;
	private bool touched;
	private bool playerMovementRef;
	
	
	
	void Start () {
		target = transform.position;
		anim = GetComponent<Animator> ();
	}
	
	
	void Update () {

			if (Input.GetMouseButtonDown (0)) {
				Vector3 mousePosition = Input.mousePosition;
				mousePosition.z = 10; // distance from the camera
				target = Camera.main.ScreenToWorldPoint (mousePosition);
				target.z = transform.position.z;
			
				var movementDirection = (target - transform.position).normalized;
				Vector3 animDirection = Vector3.zero;
				// Use >= to default to horizontal on both being equal
			
			if (movementDirection.x > movementDirection.y) 
				animDirection.x = 1;
			else
				animDirection.y = 1;

				anim.SetBool ("walking", true);
				anim.SetFloat ("SpeedX", movementDirection.x);
				anim.SetFloat ("SpeedY", movementDirection.y);

				Debug.LogFormat ("X: {0}, Y: {1}", movementDirection.x, movementDirection.y);
				
				if (movementDirection.x > 0) {
					anim.SetFloat ("LastMoveX", 1f);
				} else if (movementDirection.x < 0) {
					anim.SetFloat ("LastMoveX", -1f);
				} else {
					if (movementDirection.y > 0) {
						anim.SetFloat ("LastMoveY", 1f);
					} else if (movementDirection.y < 0) {
						anim.SetFloat ("LastMoveY", -1f);
					} else {
						anim.SetFloat ("LastMoveY", 0f);
					} 
				}
		} else {
				transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
		}
	}
}



Что я уже пробовал:

Я попытался добавить это в свой код (в обновлении), но это произошло случаться[^]

if(transform.position == target)
{
 anim.SetBool ("walking", false);
}

0 Ответов