efee00

Yeni üye
15 Ara 2024
6
0
1
Merhaba,

Sorunum:
Bir prop hunt oyununda fizik sistemiyle ilgili bir sorun yaşıyorum. Oyunumda prop'lar (oyuncuların kontrol ettiği objeler) fizik sistemine bağlı hareket ediyor. Static Mesh'i prop olarak kullanıyorum ve bu yüzden bir Character Movement Component ekleyemiyorum. Hareket mantığım şu şekilde:

  1. Hareket:
    Client tarafında bir hareket komutu alıyorum (örneğin AddForce) ve bunu Run on Serverbir event ile server'a iletiyorum. Ancak bu hareketi hem client hem de server'da işlediğim için bazı sorunlarla karşılaşıyorum:
    • Bazı client'ler hareket etmekte zorlanıyor.
    • Bazı client'ler çok hızlı hareket ediyor.
    • Bu durum genelde server'daki hareketlerde sorun yaratmıyor, ancak client'lerde ciddi tutarsızlıklar oluşuyor.
  2. Daha Fazla Sorun:
    • Replicate Physics to Autonomous Proxies ayarını kapatınca hareket kısmen serbestleşiyor, ancak client birkaç saniye hareket ettikten sonra sanki "9999 ping" varmış gibi başlangıç pozisyonuna geri dönüyor.
    • Server-side reconciliation eksikliği olduğunu düşünüyorum ama bunu nasıl doğru bir şekilde uygulayabileceğimden emin değilim.

Sormak İstediğim:​

  • Client-side prediction ve server-side reconciliation'ı nasıl efektif bir şekilde uygulayabilirim?
  • Fizik sistemiyle çalışan bir Prop Movement için önerileriniz nelerdir?
  • Static Mesh kullandığım için hareket komponenti ekleyemiyorum. Bu durumda client'ların server'dan bağımsız ama senkronize hareket edebilmesi için ne gibi bir yol izlemeliyim?

Ek Notlar:

  • Oyunu Steam üzerinden test ediyorum, her şey çalışıyor ancak client'ler fiziksel hareket konusunda tutarsız davranışlar sergiliyor.
  • Blueprint tabanlı bir proje kullanıyorum. Kod veya plugin önerileri varsa onlara da açığım.
  • Prop hareketleri sırasında Launch Character veya alternatif yöntemler kullanmak mantıklı mı? Bunun yerine fiziksel bir çözüm bulmalı mıyım?
Yardımcı olursanız çok sevinirim, şimdiden teşekkürler! 😊

Blueprintimi paylaşabilirim.
 
  • Client-side prediction ve server-side reconciliation'ı nasıl efektif bir şekilde uygulayabilirim?
    Anlattıklarına bakılırsa overloaded replication uyguluyorsun, tüm oyun motorları için replication sistemi başlı başına bir iş kolu sayılır, neyi neden ne kadar replicate etmek gerektiğine hakim olman lazım açıkçası. Burada replication dersi verecek durumda tabii ki değilim ama tahminlerime dayanarak yaptığın hataları söylüyorum, zorunluluk yoksa server event reliable olmamalıdır, multicast neredeyse asla kullanmaman gereken bir RPC türüdür (tüm server a bilgi aktarman gereken chat veya boss event.. gibi durumlar harici). Client tarafında yapacağın hareketi kendine geri replicate etmen gerekmez (local to server - COND_SkipOwner), gereksinim yoksa replicate yok kuralı her zaman geçerlidir (çok zorunda kalmadıkça tick type event ile replicate uygunlanmaz overload oluşur, zorunda kaldığın durumlarda öncesinde yazdığım kural geçerlidir). Advanced steam plugin de yanlış hatırlamıyorsam 9999 ping gösterme sorunu çok önceden beri var, cpp bilgin varsa kendi steam yazılımını oluştur. Değerlerini "stat NET" ile kontrol edebilirsin, In/Out Rate ortalama 500-5000 aralığında olmalıdır, oyunun en çıldırmış haliyle bile 10k yı geçmemelidir.

    Lütfen yanlış anlama ama bu yazdıklarımdan sonra soracağın sorular sorunun kaynağını bulmaya değil direk kodu başkasına yazdırmaya girecektir. Sana tavsiyem replication sistemini çok iyi araştırman, youtube tutoriallar da anlatılanların bazı kısımları doğru ancak %95' i yanlış desek yeridir. Ücretli-tavsiye edilen kursları almanı öneririm.

  • Fizik sistemiyle çalışan bir Prop Movement için önerileriniz nelerdir?
    Fizik açıksa "Replicate Movement" açmak zorunda kalırsın, bu da extra maliyettir, mümkünse fake physics kullan, illaki fizik açık kalmak zorunda ise de yukarıda yazdıklarıma ek olarak "Sleep Threshold" değerini olabildiğince yüksek tutman gerekir ki en hızlı şekilde replicate dursun. Daha akıcı hareket elde etmek için de Min/Max update frequency değerlerini değiştirebilirsin 33/66 genellikle yeterlidir (önceki sorunda anlattığım gibi overloaded replication durumun varsa bu sana extra yük olarak döner).

  • Static Mesh kullandığım için hareket komponenti ekleyemiyorum. Bu durumda client'ların server'dan bağımsız ama senkronize hareket edebilmesi için ne gibi bir yol izlemeliyim?
    İlk soruda söylediğim gibi local to server mantığı geçerlidir, hareketin serverdan dönmesinden ziyade local çalıştırıp server a gönder unut mantığıyla çalışmalısın.

    Kolaylıklar dilerim.
 
Söylenmesi gereken her şey söylenmiş ama bende şöyle bir katkıda bulunayım. Physics sisteminin Unreal Engine içerisinde default olarak replicate edecek bir sistem henüz yok benim bildiğim. Bir sistem üzerine çalışıyorlardı ama ne oldu bilmiyorum. Bunun bir sebebi var: Çünki physics replicate etmek çok maliyetli ve çok iyi bir yolu yok. Olsaydı emin ol epic games bunu default yapan sistemleri zaten koyardı. Dolayısı ile bence olayı baştan düşünüp yukarda anlatıldığı gibi fake bir sistem kurmalısın. Bu PhysicAnimComponent la mı olur rigid body node ile mi olur o derin bir konu. Ama ben senin yerinde olsam physics replicate olayına hiç girmezdim.
 
Yorumlarınız için teşekkürler fakat şu an
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.
bu durumdayım çözebildiğim için.Sorun tamamen latency ile alakalıymış ve sürtünme ile alakalıymış aslında replication'da bir eksiğim yok şu an sorunsuz bir şekilde hem replication yapabiliyorum proplar'da hareket edebiliyor fazla pingli bir oyuncu bile neredeyse sorunsuz replike edebiliyor görüntüyü yine de çok teşekkürler yorumlarınız için.