Лучшим способом было бы проверить скорость, если ваш персонаж перемещается по физике. Если ваш персонаж движется с чем-то, где скорость не выполняет задание, вы должны сохранить последнюю позицию и проверить ее с новой, как ваша первая идея.
Скорость
Так же, как я Сказав, что когда ваш персонаж движется с физикой, вы можете проверить направление следующим образом:
public RigidBody rb; // Add the rigidbody of your Player to your script
void Update() {
// What ever your code is here
Vector3 vel = transform.rotation * rb.velocity;
if(vel.z > 0) {
// forward
} else if(vel.z < 0) {
// backwards
}
if(vel.x > 0) {
// right
} else if(vel.x < 0) {
// left
}
}
Позиция
Вы также можете проверить движение по позиции. Для этого вам нужно сравнить не только старый Pos и новый Pos, но также старый Rotation и новый Rotation. Я мог бы подумать: (не проверено)
Vector3 oldPos;
Quaternion oldRot;
Update() {
Vector3 movement = oldRot * (transform.position - oldPos));
if(movement.z > 0) {
// forward
} else if(movement.z < 0) {
// backwards
}
if(movement.x > 0) {
// right
} else if(movement.x < 0) {
// left
}
oldPos = transform.position;
oldRot = transform.rotation;
}