En tercera persona, normalmente WASD mueve al personaje según la orientación de la cámara.
Vector3 forward = camara.forward;
Vector3 right = camara.right;
Eliminar el eje Y:
forward.y = 0f;
right.y = 0f;
forward.Normalize();
right.Normalize();
Vector2 input = moveAction.action.ReadValue<Vector2>();
Vector3 direccion =
forward * input.y +
right * input.x;
Normalizar:
if (direccion.sqrMagnitude > 1f)
{
direccion.Normalize();
}
controller.Move(
direccion * velocidad * Time.deltaTime
);
if (direccion.sqrMagnitude > 0.001f)
{
Quaternion objetivo =
Quaternion.LookRotation(direccion);
transform.rotation = Quaternion.Slerp(
transform.rotation,
objetivo,
velocidadRotacion * Time.deltaTime
);
}
direccion =
camara.forward * input.y +
camara.right * input.x;
Acordate de eliminar Y antes de usar forward/right.