cemkaraca

Bilgin
Katılım
26 Temmuz 2024
Mesajlar
3.098
Çözümler
13
Beğeniler
1.603
Merhaba, öncelikle 3D Subway Surfers tarzı bir oyun yapmaya çalışıyorum. Ben şu an bir camera follow script'i yazdım. O script sadece Player'ı takip edecek şekilde. Bu konuda sıkıntı yok, gayet iyi çalışıyor. Ama ben karakterin sağa sola dönmesini istediğimde ve onun script'ini yazdığımda kamera karaktere yetişemiyor. Karakter çok hızlı dönmese bile glitch yaşanıyor. Yani karakter düz giderken bile takıla takıla gidiyor, sanki 30 FPS gibi kare kare gidiyor. Sorun nerede tam olarak?
 
Hangi oyun motorunu kullanıyorsun?

Unity ise scriptlerle uğraşmadan doğrudan Cinemachine paketini kullan. Onun ayarlarında da damping mevzusu var, onları kısarsan daha hızlı takip eder ama smooth dönmesi bozulmaz.

Takılıyor gibi görünme işi de kamerayı doğrudan karaktere sabitlediysen ya da doğrudan onun transform'unu takip ediyorsa o yüzden olabilir. Kamerayı hedefi yumuşatmalarla takip eden bir hale getirmen gerekiyor, yoksa karakterin her ufak hareketinde takılma gibi şeyler yaşanır; biz de yarış oyunumuzda aynı sorunu yaşıyorduk.
 
Hangi oyun motorunu kullanıyorsun?

Unity ise scriptlerle uğraşmadan doğrudan Cinemachine paketini kullan. Onun ayarlarında da damping mevzusu var, onları kısarsan daha hızlı takip eder ama smooth dönmesi bozulmaz.

Takılıyor gibi görünme işi de kamerayı doğrudan karaktere sabitlediysen ya da doğrudan onun transform'unu takip ediyorsa o yüzden olabilir. Kamerayı hedefi yumuşatmalarla takip eden bir hale getirmen gerekiyor, yoksa karakterin her ufak hareketinde takılma gibi şeyler yaşanır; biz de yarış oyunumuzda aynı sorunu yaşıyorduk.
Unity kullanıyorum. O dediğiniz şeye bakacağım.

Peki nasıl yumuşatabilirim? Dediğiniz gibi direkt karakterin transformunu takip ediyor.
 
Unity kullanıyorum. O dediğiniz şeye bakacağım.

Peki nasıl yumuşatabilirim? Dediğiniz gibi direkt karakterin transformunu takip ediyor.

Transforma doğrudan kilitlenmek yerine lerp ile yumuşatabilirsin. Transform.position'a doğrudan snaplenmek yerine ona bir new Vector3 ata; X, Y, Z eksenleri için bir değişken oluştur ve o değişken de karakterin transform.position değerine lerplenen değerler olsun. Böylelikle her eksenin yumuşaklığını da ayrı ayrı kontrol edebilirsin.

Bu arada lerp fonksiyonu Mathf.Lerp(minimum, maximum, t) şeklinde yazılır ve iki farklı değer arasında belirlenen zaman hızında geçiş sağlar. Dokümantasyonu da aşağıya bırakıyorum.

Ama standart olarak bu işler için Cinemachine kullanılır, o yüzden amacın "her şeyi kendim yapıp öğrenmek istiyorum" değilse doğrudan ona yönel. Öğrenmekse amaç, dediğim şekilde yapabilirsin.

 
Transforma doğrudan kilitlenmek yerine lerp ile yumuşatabilirsin. Transform.position'a doğrudan snaplenmek yerine ona bir new Vector3 ata; X, Y, Z eksenleri için bir değişken oluştur ve o değişken de karakterin transform.position değerine lerplenen değerler olsun. Böylelikle her eksenin yumuşaklığını da ayrı ayrı kontrol edebilirsin.

Bu arada lerp fonksiyonu Mathf.Lerp(minimum, maximum, t) şeklinde yazılır ve iki farklı değer arasında belirlenen zaman hızında geçiş sağlar. Dokümantasyonu da aşağıya bırakıyorum.

Ama standart olarak bu işler için Cinemachine kullanılır, o yüzden amacın "her şeyi kendim yapıp öğrenmek istiyorum" değilse doğrudan ona yönel. Öğrenmekse amaç, dediğim şekilde yapabilirsin.

Proje için yaptığım bir oyun hocam. Dediğiniz Cinemachine olayına bakacağım teşekkür ederim.