Menu
CoddyTech

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.

challenge icon

Görev

Orta

Arı ç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.
    }
}
quiz iconKendini test et

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