Unity3d: как улучшить анимацию в режиме ожидания
Хорошо, я почти закончил свою 2d rpg click to move game. У меня есть только одна проблема, видите ли, у меня есть проблемы с моей анимацией, когда дело доходит до оси Y. Позвольте мне объяснить подробнее. Если вы посмотрите на это видео[^]вы сможете увидеть, что когда я нажимаю вперед своего игрока, как только он попадает в свою позицию, он смотрит в неправильном направлении, а не прямо на игроков. Чтобы сделать себя более ясным, это изображение[^] листа спрайта, который я сейчас использую, как вы можете видеть, он имеет 8 направлений. Когда вы нажимаете кнопку здесь[^] (в игре) мой игрок шел бы вниз и сталкивался с этим направление[^] или это направление[^], а не сталкиваться с этим направление[^] (нормальное / предпочтительное положение). Это также происходит, когда я нажимаю здесь[^] (в игре) мой игрок подошел бы и столкнулся бы с этим направление[^] или столкнись с этим лицом к лицу направление[^], а не сталкиваться с этим направление[^]. Как я могу убедиться, что мой игрок смотрит в правильном направлении, как только он достигнет места назначения? Опять же, это происходит только в пределах оси Y, поэтому ходить по оси X нормально.
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; if (movementDirection.sqrMagnitude > 0) { // 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); if (movementDirection.x < 0) { anim.SetFloat ("LastMoveX", -1f); } else if (movementDirection.x > 0) { anim.SetFloat ("LastMoveX", 1f); } else { anim.SetFloat ("LastMoveX", 0f); } if (movementDirection.y > 0) { anim.SetFloat ("LastMoveY", 1f); } else if (movementDirection.y < 0) { anim.SetFloat ("LastMoveY", -1f); } else { anim.SetFloat ("LastMoveY", 0f); } } } else { if (Mathf.Approximately (transform.position.x, target.x) && Mathf.Approximately (transform.position.y, target.y)) { touched = false; anim.SetBool ("walking", false); } else { transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime); } } } }
Что я уже пробовал:
Я попытался использовать debug. log, но он не давал мне реальных результатов, которые я мог бы использовать.
Я также посмотрел этот учебник: https://www.youtube.com/watch?v=7URRg8J6mz8, но на самом деле он не показал мне, как исправить эту ошибку!!