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.
Görev
OrtaKameranın sabit bir yükseklikten oyuncuyu yumuşak bir şekilde takip etmesini sağla.
Vector3 velocity;alanını ekle.LateUpdate()içinde, bir zıplamanın görüntüyü hareket ettirmemesi içinVector3 target = new Vector3(player.position.x, height, player.position.z - back);oluştur.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
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