Giro mi personaje del juego para mirar al objetivo usando el siguiente código:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion es la rotación actual del personaje cuando se le da un nuevo objetivo.
lookQuaternion es la dirección que debe mirar el personaje y está configurado de esta manera:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
turnNormalizer solo se Time.deltaTime
incrementa y turningSpeed
es un valor estático dado en el editor.
El problema es que mientras el personaje gira como debería la mayoría de las veces, tiene problemas cuando tiene que hacerlo cerca de 180 grados. Luego, a veces se agita y refleja la rotación:
En esta imagen mal dibujada, el personaje (a la derecha) comienza a girar hacia el círculo a la izquierda. En lugar de simplemente girar hacia la izquierda o hacia la derecha, comienza este "baile de espejo":
- Comienza a girar hacia el nuevo revestimiento.
- Luego, de repente, se ajusta al mismo ángulo pero en el otro lado y sigue girando
Hace este "reflejo" tanto tiempo hasta que mira al objetivo. ¿Es esto una cosa con cuaterniones, slerping / lerping u otra cosa?
EDITAR1: Aparentemente, el problema no surge de la rotación misma. El problema más probable es que el personaje se mueva hacia la cara mientras gira. Al limitar el ángulo, entre la orientación y el objetivo, cuando se permite que el personaje se mueva, se reduce y, a veces, se elimina la rotación de fluctuación / reflejo.
Por supuesto, esto plantea más preguntas, ¿por qué el personaje no puede moverse y rotar al mismo tiempo sin problemas? Código utilizado para el movimiento:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);