Hareket Ettiğin Yöne Dön
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 42 / 63.
transform.LookAt bakılacak bir noktaya ihtiyaç duyar. Çoğu zaman elindeki şey bunun yerine bir yöndür: hız, rüzgâr, bir şeyin hareket ettiği yön. Quaternion.LookRotation(direction), nesnenin yukarısını dünyanın yukarısına dönük tutarak, ileri yönü (mavi z oku) bu doğrultuyu gösterecek dönüşü döndürür. Havaya fırlatılan bir ok önce yukarıyı gösterir ve düşerken eğilir, çünkü hızı da böyle değişir:
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 yüzden LookRotation(Vector3.zero), Look rotation viewing vector is zero mesajını günlüğe yazar ve nesneyi +z yönüne döndüren Quaternion.identity değerini döndürür. Okun önce kontrol edilmesinin 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ı veya aşağı eğer. Eğimli bir yokuşu çıkan yürüyen bir karakter gibi dik durması gereken bir şey için, önce yönün y değerini 0 yap; böylece nesne yalnızca y ekseni etrafında döner. İkinci bir argüman olan LookRotation(direction, Vector3.up), yukarının hangi yön olduğunu belirtir; Vector3.up, bunu belirtmediğinde varsayılan olarak kullanılan değerdir.
Görev
OrtaArı çiçekten çiçeğe uçar. Hazır Mover betiği, yolda yükselip alçalırken arıyı düz çizgilerde uçurur ve her çiçekte 1 saniye dinlendirir; Mover'ı olduğu gibi bırak. Arının uçtuğu yöne bakmasını sağlayacak şekilde FaceMotion yaz:
- Yukarıdan bakıldığında, son kareden beri hareket ettiği yöne bakar.
- Dik kalır: yükselirken veya alçalırken burnunu yukarı ya da aşağı kaldırmaz.
- Dinlenirken baktığı yönü korur ve hiçbir şey günlüğe kaydedilmez.
Kod LateUpdate() içine yazılır; böylece Mover bu karede arıyı zaten hareket ettirmiş olur. Play'e, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Arıyı, son kareden bu yana hareket ettiği yöne döndür.
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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 Duvar