Yumuşak Takip
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 45 / 63.
LateUpdate() içinde oyuncunun konumunu bir ofsetle kopyalayan kamera, oyuncunun her sarsıntısını görüntüye de yansıtır. Vector3.SmoothDamp(current, target, ref velocity, smoothTime), sönümlü bir yayın hareketine benzer şekilde target yönünde ilerleyen bir konum döndürür: hızlanır, hedefe yaklaştıkça yavaşlar ve hedefi aşmadan varır. Bu kamera oyuncuyu 3 birim yukarıdan ve 6 birim geriden, hafif bir gecikmeyle 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 bir kopyasını değil, değişkenin kendisini verir; böylece yöntem değişkeni değiştirebilir. SmoothDamp, kameranın üç eksendeki mevcut hızını velocity içinde tutar ve sonraki karede bu değere yeniden ihtiyaç duyar; bu yüzden velocity bir alandır. LateUpdate() içinde tanımlansaydı her karede sıfırdan başlar ve kamera kare başına yolun yaklaşık yüzde yarısı kadar ilerleyerek ağır ağır hareket ederdi. Kamera yakınlaştırması gibi tek bir sayı için Mathf.SmoothDamp, float hız değeriyle aynı şekilde çalışır.
smoothTime, kameranın ne kadar geriden geleceğini belirler: 0.3 değerinde, ani bir sıçramanın yaklaşık %60'ını 0.3 saniyede tamamlar ve 1 saniye sonra neredeyse hedefe ulaşır. Daha küçük bir değer, hedefi daha yakından takip etmesini sağlar. SmoothDamp, Time.deltaTime değerini kendisi okur; bu yüzden çağrıdaki hiçbir şey bu değerle çarpılmaz.
Görev
OrtaKamera, oyuncuya sabit bir yükseklikten yukarıdan bakar. Vector3.SmoothDamp ve smoothTime (0.25) ile bu noktaya doğru yumuşakça takip etmesini sağlayın:
- x: oyuncunun x'i;
- z: oyuncunun -z yönünde
back(5) birim gerisi; - y: oyuncunun kendi yüksekliği ne olursa olsun daima
height(12). Boşluk tuşu oyuncunun zıplamasını sağlar ve kamera hareket etmemelidir.
Play'e basın, koşup zıplayın, ardından Check'e basın.
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 üzerindeki (x) ve onun back birim gerisindeki (z) konuma yumuşakça yaklaş.
}
}
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