ฉันหมุนตัวละครเกมของฉันเพื่อดูที่เป้าหมายโดยใช้รหัสต่อไปนี้:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion เป็นการหมุนปัจจุบันของตัวละครเมื่อกำหนดเป้าหมายใหม่
lookQuaternion เป็นทิศทางที่ตัวละครควรมองและมันก็เป็นแบบนี้:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
TurningNormalizer เพิ่งTime.deltaTime
เพิ่มขึ้นและturningSpeed
เป็นค่าคงที่ที่กำหนดในตัวแก้ไข
ปัญหาคือในขณะที่ตัวละครเปลี่ยนตามที่ควรจะเป็นส่วนใหญ่มันมีปัญหาเมื่อมันต้องเข้าใกล้ 180 องศา จากนั้นในบางครั้งก็กระวนกระวายใจและสะท้อนการหมุน:
ในภาพที่วาดไม่ดีตัวละคร (ด้านขวา) จะเริ่มหันไปทางวงกลมทางด้านซ้าย แทนที่จะแค่หมุนไปทางซ้ายหรือขวามันเริ่มต้น "mirror dance" นี้:
- มันเริ่มหมุนไปทางด้านหน้าใหม่
- จากนั้นมันก็หันไปที่มุมเดียวกันทันที แต่อยู่อีกด้านหนึ่งและหมุนไปเรื่อย ๆ
มันเป็นการ“ ทำมิเรอร์” นาน ๆ จนกว่ามันจะมองไปที่เป้าหมาย นี่คือสิ่งที่มี quaternions, slerping / lerping หรืออย่างอื่น?
แก้ไข 1: เห็นได้ชัดว่าปัญหาไม่ได้เกิดจากการหมุนของตัวเอง ปัญหาที่เป็นไปได้มากขึ้นคือตัวละครเคลื่อนไปทางด้านหน้าขณะที่มันหมุน เป็นการ จำกัด มุมระหว่างใบหน้าและเป้าหมายเมื่อตัวละครได้รับอนุญาตให้เคลื่อนที่ลดและในบางครั้งจะช่วยลดการหมุนของการหมุนวน / การสะท้อน
หลักสูตรนี้ทำให้เกิดคำถามเพิ่มเติมทำไมตัวละครไม่สามารถเคลื่อนไหวและหมุนในเวลาเดียวกันโดยไม่มีปัญหา รหัสที่ใช้สำหรับการเคลื่อนไหว:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);