Hareket Ettiğin Yöne Dön
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 44 / 71.
transform.LookAt bakılacak bir noktaya ihtiyaç duyar. Çoğu zaman elinde bunun yerine bir yön vardır: bir hız, rüzgâr ya da bir şeyin hareket ettiği yön. Quaternion.LookRotation(direction), ileri yönü (mavi z oku) bu yönü gösteren ve nesnenin yukarısını dünyanın yukarısına dönük tutan dönüşü döndürür. Havaya fırlatılan bir ok önce yukarıyı gösterir, sonra düşerken yana yatar; çünkü hızı da bunu yapar:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (rb.linearVelocity != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
}
}Önemli olan uzunluğu değil, yalnızca yöndür: (1, 0, 2) ve (3, 0, 6) aynı dönüşü verir. Sıfır vektörün bir yönü yoktur; bu nedenle LookRotation(Vector3.zero), Look rotation viewing vector is zero mesajını günlüğe yazar ve nesneyi +z yönüne baktıran Quaternion.identity değerini döndürür. Okun önce kontrol etmesinin nedeni budur: durduğunda, baktığı yönü korur. LookAt(target.position), LookRotation(target.position - transform.position) ile aynı dönüşü verir.
Yönün yukarı-aşağı bileşeni, ileri yönü de onunla birlikte yukarı ya da aşağı eğer. Eğimli bir yokuşu çıkan yürüyen bir karakter gibi dik durması gereken bir nesne için, önce yönün y değerini 0 yap; böylece nesne yalnızca y ekseni çevresinde döner. İkinci bir bağımsız değişken olan LookRotation(direction, Vector3.up), yukarının hangi yön olduğunu belirtir; bunu kullanmadığında varsayılan olarak Vector3.up kullanılır.
Görev
OrtaArının dik dururken uçtuğu yöne bakmasını sağla.
LateUpdate()içindeVector3 direction = transform.position - lastPosition;vedirection.y = 0;ayarla.- Yalnızca
direction != Vector3.zeroolduğundatransform.rotation = Quaternion.LookRotation(direction);ayarla; böylece dinlenen arı baktığı yönü korur. - Son olarak
transform.positiondeğerinilastPositioniçine kaydet.
“Oyna” düğmesine bas: arı, uçtuğu her çiçeğe doğru döner. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Arıyı, son kareden beri hareket ettiği yöne döndür.
}
}
Fizik ve Oynanış bölümündeki tüm dersler
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir DuvarKendi başına pratik yap: Unity playground