Dün gece, basit bir multiplayer mekanik üzerinde çalışıyordum. Oyuncunun bir butona basınca sahneye AmmoCrate adında bir kutu spawn etmesini istiyordum. Her şey harika çalışıyordu... ta ki kendim host olup, arkadaşımı client olarak davet edene kadar.
Host olarak butona bastım, kutu mükemmel bir şekilde önümde belirdi. Ses efekti, animasyon, her şey tamamdı. Arkadaşıma dönüp "Gel al mermilerini" dedim. Cevap: "Hangi mermi? Önünde hiçbir şey yok ki!" Kafayı yiyecektim. Konsolda hata yok, compile hatası yok. Meğerse sorun, Blueprint'teki o küçücük, masum görünen bir checkbox'taymış.
Hemen AmmoCrate actor'ünün Class Defaults'una baktım. Ve işte o lanet olası ayar:
Kod:
bReplicates = False
Evet, yanlış okumadınız. Actor'ü oluştururken Spawn Actor düğümüyle falan uğraşıyordum ama actor'ün kendi replication özelliği kapalıydı. Unreal Engine, bu actor'ü ağ üzerinden diğer client'lere hiç göndermiyordu. Sadece onu spawn eden (yani server/host) makinede vardı.
Düzeltmesi basitti tabii:
Kod:
bReplicates = True
Bu kutuyu işaretlediğiniz anda, actor otomatik olarak server'da spawn olup, tüm connected client'lere replike ediliyor. Bazen en basit şeyler, en çok canınızı sıkıyor.
Multiplayer projelerinde, sahneye dinamik olarak koyduğunuz her şeyin iki kere düşünün. Sadece spawn etmek yetmiyor, "acaba bu diğer herkese gidiyor mu?" diye sormak lazım. Replication olayını anlamak, Unreal multiplayer'inin temel taşı. Bu küçük checkbox, bana büyük bir ders verdi.
Siz de benzer bir "sadece host görüyor" saçmalığı yaşadınız mı? Ya da Actor Replication ile ilgili daha temiz, daha efektif bir yaklaşımınız var mı? Aşağıya yazın, birlikte ağlayalım.