Вы можете использовать desiredVelocity
, чтобы найти, в каком направлении он движется, а затем Vector3.Project
, чтобы разложить его на то, как он движется вперед / вправо.
Vector3 normalizedMovement = nav.desiredVelocity.normalized;
Vector3 forwardVector = Vector3.Project(normalizedMovement, transform.forward);
Vector3 rightVector = Vector3.Project (normalizedMovement, transform.right);
Получите величину (которая, потому что мы проецировалинормализованное движение, будет плавать между -1 и 1) и использовать Vector3.Dot
, чтобы определить знак величины в каждом компоненте:
// Dot(direction1, direction2) = 1 if they are in the same direction, -1 if they are opposite
float forwardVelocity = forwardVector.magnitude * Vector3.Dot(forwardVector, transform.forward);
float rightVelocity = rightVector.magnitude * Vector3.Dot(rightVector, transform.right);
Теперь вы можете назначить их для вашей анимации, преобразовавдиапазон от [-1,1] до [0,1] с использованием Mathf.InverseLerp
:
anim.SetFloat("Enemy Z", Mathf.InverseLerp(-1f, 1f, forwardVelocity));
anim.SetFloat("Enemy X", Mathf.InverseLerp(-1f, 1f, rightVelocity));