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); }