Menu
CoddyTech

Yumuşak Takip

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 47 / 71.

LateUpdate() içinde oyuncunun konumuna bir ofset ekleyerek kopyalayan bir kamera, oyuncunun her sarsıntısını görüntünün de sarsıntısına dönüştürür. Vector3.SmoothDamp(current, target, ref velocity, smoothTime), sönümlü bir yayın hareketine benzer şekilde target konumuna doğru ilerleyen bir konum döndürür: hızlanır, hedefe yaklaştıkça yavaşlar ve hedefi aşmadan ulaşır. Bu kamera oyuncuyu 3 birim yukarıdan ve 6 birim geriden, biraz gecikmeli takip eder:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;

void LateUpdate()
{
    Vector3 target = player.position + offset;
    transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}

ref, SmoothDamp'e değişkenin bir kopyasını değil, değişkenin kendisini verir; böylece yöntem bu değişkeni değiştirebilir. SmoothDamp, kameranın üç eksendeki mevcut hızını velocity içinde tutar ve bir sonraki karede bu değere yeniden ihtiyaç duyar; bu yüzden değişken bir alandır. LateUpdate() içinde tanımlansaydı, her karede sıfırdan başlar ve kamera her karede yolun yaklaşık yüzde yarısı kadar ilerleyerek ağır ağır hareket ederdi. Kameranın yakınlaştırması gibi tek bir sayı için Mathf.SmoothDamp, float türünde bir hız değişkeniyle aynı şekilde çalışır.

smoothTime, kameranın ne kadar geriden geleceğini belirler: 0.3 değeriyle ani bir sıçramanın yaklaşık %60'ını 0.3 saniyede kateder ve 1 saniye sonra hedefe neredeyse ulaşır. Daha küçük bir değer, hedefi daha yakından takip etmesini sağlar. SmoothDamp, Time.deltaTime değerini kendisi okur; bu nedenle çağrıdaki hiçbir şey bu değerle çarpılmaz.

challenge icon

Görev

Orta

Kameranın sabit bir yükseklikten oyuncuyu yumuşak bir şekilde takip etmesini sağla.

  1. Vector3 velocity; alanını ekle.
  2. LateUpdate() içinde, bir zıplamanın görüntüyü hareket ettirmemesi için Vector3 target = new Vector3(player.position.x, height, player.position.z - back); oluştur.
  3. transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime); ayarını yap.

“Oyna” düğmesine bas, koş ve zıpla: kamera biraz geriden gelir ve asla yukarı aşağı sallanmaz. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class TopDownCamera : MonoBehaviour
{
    public Transform player;
    public float height = 12f;
    public float back = 5f;
    public float smoothTime = 0.25f;

    void LateUpdate()
    {
        // Sabit bir yükseklikte, player'ın üstündeki (x) ve onun back birim arkasındaki (z) konuma yumuşakça yaklaş.
    }
}

Fizik ve Oynanış bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground