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 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.

challenge icon

Görev

Orta

Arının dik dururken uçtuğu yöne bakmasını sağla.

  1. LateUpdate() içinde Vector3 direction = transform.position - lastPosition; ve direction.y = 0; ayarla.
  2. Yalnızca direction != Vector3.zero olduğunda transform.rotation = Quaternion.LookRotation(direction); ayarla; böylece dinlenen arı baktığı yönü korur.
  3. Son olarak transform.position değerini lastPosition iç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

Kendi başına pratik yap: Unity playground