Obracam swoją postać gry, aby obserwować cel, używając następującego kodu:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion to bieżąca rotacja postaci, gdy zostanie podany nowy cel.
lookQuaternion to kierunek, w którym postać powinna patrzeć i jest ustawiony następująco:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
TurningNormalizer jest tylko Time.deltaTime
zwiększany i turningSpeed
jest wartością statyczną podaną w edytorze.
Problem polega na tym, że chociaż postać obraca się tak, jak powinna przez większość czasu, ma problemy, gdy musi zrobić blisko 180 stopni. Potem czasami drży i odzwierciedla obrót:
Na tym źle narysowanym obrazie postać (po prawej) zaczyna obracać się w kierunku koła po lewej. Zamiast po prostu skręcić w lewo lub w prawo, zaczyna się ten „lustrzany taniec”:
- Zaczyna się obracać w kierunku nowej okładziny
- Potem nagle zaskoczy pod tym samym kątem, ale z drugiej strony i obraca się
Robi to „odbicie lustrzane” tak długo, aż spojrzy na cel. Czy to coś z czwartorzędami, slerpingiem / lerpowaniem czy coś innego?
EDYCJA 1: Najwyraźniej problem nie wynika z samego obrotu. Bardziej prawdopodobne jest to, że postać obraca się w kierunku twarzy. Ograniczenie kąta między twarzą a celem, gdy postać może się poruszać, zmniejsza, a czasem eliminuje rotację drgań / odbicia lustrzanego.
To oczywiście rodzi więcej pytań, dlaczego postać nie może się poruszać i obracać jednocześnie bez problemów? Kod użyty do przemieszczenia:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);