Aşağıdaki kodu kullanarak oyun karakterimi hedefe izlemek için döndürüyorum:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion, yeni bir hedef verildiğinde karakterin geçerli dönüşüdür.
lookQuaternion, karakterin bakması gereken yöndür ve şu şekilde ayarlanır:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
turningNormalizer sadece Time.deltaTime
artırılır ve turningSpeed
editörde verilen statik bir değerdir.
Sorun şu ki, karakter çoğu zaman olması gerektiği gibi dönerken, 180 dereceye yakın olması gerektiğinde problemleri var. Sonra zaman zaman dönmeyi sallar ve yansıtır:
Bu zayıf çizilmiş görüntüde karakter (sağda) soldaki daireye doğru dönmeye başlar. Sadece sola veya sağa çevirmek yerine bu "ayna dansı" nı başlatır:
- Yeni yüze doğru dönmeye başlar
- Sonra aniden aynı açıya ancak diğer tarafa oturur ve dönmeye devam eder
Hedefe bakana kadar bu "yansıtma" yı yapar. Bu kuaterniyonlar, slerping / lerping veya başka bir şeyle mi ilgili?
EDIT1: Görünüşe göre sorun döndürmenin kendisinden kaynaklanmıyor. Daha olası olan konu, karakterin dönerken yüzeye doğru hareket etmesidir. Açıyı sınırlandırmak için, yüz ve hedef arasında, karakterin hareket etmesine izin verildiğinde, titreşim / yansıtma dönüşünü azaltır ve bazen ortadan kaldırır.
Bu elbette daha fazla soru getiriyor, karakter neden aynı anda hareket edip döndüremiyor? Hareket için kullanılan kod:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);