Kamera Takip Mekanizması: Smooth Follow ve Lerp Implementasyonu
Oyunda kameranın oyuncuyu yumuşak bir şekilde takip etmesi oyun hissini büyük ölçüde etkiler. Aniden hareket eden veya titreyen kamera oyuncuyu rahatsız eder. Çözüm, kamera pozisyonunu hedef pozisyona doğru kademeli olarak hareket ettirmektir. Bunu Lerp (Linear Interpolation) fonksiyonuyla yapabilirsin.
Lerp, iki değer arasında yumuşak bir geçiş sağlar. 0 ile 1 arasında bir değer alır; 0 başlangıç, 1 hedef anlamına gelir. 0.5 ise tam ortası demektir. Kamerayı her frame'de Lerp kullanarak hedefe yaklaştırırsan, smooth bir takip efekti elde edersin.
1using UnityEngine;23public class SmoothCameraFollow: MonoBehaviour4{5public Transform target; // Takip edilecek nesne (oyuncu)6public float smoothSpeed = 0.125f; // Düşük = daha yavaş, yüksek = daha hızlı7public Vector3 offset = new Vector3(0, 5, -10); // Kameranın hedeften uzaklığı89void LateUpdate()10{11if (target == null) return;1213// Hedef pozisyonu hesapla14Vector3 desiredPosition = target.position + offset;1516// Mevcut pozisyondan hedef pozisyona doğru Lerp yap17Vector3 smoothedPosition = Vector3.Lerp(18transform.position,19desiredPosition,20smoothSpeed21);2223// Kamerayı yeni pozisyona taşı24transform.position = smoothedPosition;2526// Kamerayı oyuncuya doğru çevir27transform.LookAt(target.position + Vector3.up * 1.5f);28}29}Bu kod LateUpdate() içinde çalışır. LateUpdate() Update'ten sonra çalıştığı için kamera hareket sonrasında oyuncuyu takip eder; bu da titremeleri engeller.
smoothSpeeddeğeri çok önemli. 0.01 gibi düşük bir değer kamerayı çok yavaş takip eder ve gecikme hissi verir. 0.3 gibi yüksek bir değer ise neredeyse anında takip eder ve yumuşaklık kaybolur. Çoğu oyunda 0.1 ile 0.2 arası iyi sonuç verir.
Eğer kamera hedefin etrafında dönmesi gerekiyorsa, offset vektörünü dinamik olarak hesaplayabilirsin. Örneğin oyuncu sağa bakıyorsa kamera sağ arkasına, sola bakıyorsa sol arkasına gelsin. Bunu oyuncunun yönüne göre offset'i döndürerek yapabilirsin.
Sık yapılan hata: Update() içinde Lerp yapmak. Eğer frame rate değişirse (60 FPS'den 30 FPS'ye düşerse) kamera hızı değişir. Bunu önlemek için Time.deltaTime ile çarpman gerekir. Ama basit Lerp için LateUpdate() yeterli.
Bir diğer ipucu: Kamera sarsıntısı eklemek istersen, Perlin noise kullanarak rastgele küçük offset'ler ekle. Explosion anında kamerayı biraz sarsarsan oyun daha etkileyici olur.
0 yorum