Jessca Stone Ответов: 0

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, но на самом деле он не показал мне, как исправить эту ошибку!!

0 Ответов