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;
2
3public class SmoothCameraFollow: MonoBehaviour
4{
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ığı
8
9void LateUpdate()
10{
11if (target == null) return;
12
13// Hedef pozisyonu hesapla
14Vector3 desiredPosition = target.position + offset;
15
16// Mevcut pozisyondan hedef pozisyona doğru Lerp yap
17Vector3 smoothedPosition = Vector3.Lerp(
18transform.position,
19desiredPosition,
20smoothSpeed
21);
22
23// Kamerayı yeni pozisyona taşı
24transform.position = smoothedPosition;
25
26// Kamerayı oyuncuya doğru çevir
27transform.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.

smoothSpeed

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

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz