NooXRii

Üye
11 Ara 2020
96
28
18
(6) Ankara
nightcrewlab.github.io
Steam altyapısı ile çalışan online bir oyun üzerinde çalışıyorum. Unreal Engine 4 teki "Physics Handle" sistemi ile taşıma sistemi yaptım. Server ve sunucular arası nesne taşımasında bir sıkıntı yok.

Sıkıntı gecikmede. Host olan kişide herhangi bir gecikme olmuyor fakat bağlanan kişiler "PhysicsHandle" sistemi ile taşıma yaptığında taşıdığı nesne çok geriden geliyor. Pingli olarak geliyor. Ama normal kendi yaptığım "Attach" ederek taşındığında bir gecikme yaşanmıyor. Bunun bir ipucu, bilmediğim bir püf noktası var mıdır? Yanlış yaptığım bir şey var mıdır? 


--------> Blueprint Ekran görüntüsü
 
Hocam projeni bana da atabilir misin default halini ? Şu online işini önceden yapıyordum çalışıyordu şimdi sunucu kurulduğunda kimse giremiyor kafayı yiyecem ya.
Ben mi yanlış yapıyorum acaba anlamadım ki. Sadece sunucuya bağlanma kısmını bana atabilir misin? Ya da istemiyorsan tw vereyim hızlı bir şekilde taslak yapalım...
Teşekkürler.

Bu arada şuan UE5 mi kullanıyorsun ?

O gecikme olayı büyük ihtimalle Rate olayından dolayı oluyor orayı bir kurcala, o nesnelerin rate ayarı falan varya.
 
UE4 kullanıyorum. UE5' in henüz ciddi bir iş anlamında hazır olmadığını düşünüyorum.

"Advanced Session" kullanıyorum. Standart oda kurma mantığı ile çalışıyorum. Youtube'da bir çok videoda olduğu gibi. Eğer UE5 kullanıyorsan büyük ihtimal o ile ilgili olabilir. Sonuçta daha "Preview" sürüm.

Eğer ciddi bir iş yapıyor isen çok tavsiye etmem UE5'i. Daha 1-2 ayı var daha stabil olması için. Ama işim daha bekleyebilir dersen tabii ki çalışmaya devam edebilirsin. Ama test aşamalarında sıkıntılar yaşarsın.

Rate ayarlarına bir bakarım teşekkür ederim tavsiyen için.
 
Teşekkür ederim 4.27 de de çalıştıramıyorum... Online bağlantı sağlayamıyorum kullandığım AppID 480
Senin ki de 480 mi ?

Ayrıca development modunda mı package ediyorsun ? Oyunu paketledikten sonra steam açık bir şekilde oyuna girince steam arayüzü geliyor fakat session kurmuyor bile.Çıldırmaya az kaldı... Tek yaptığım şey button koyup GameInstance ile create session yapmak o bile çalışmıyor şuan. Sezon kurmuyor.
 
Ben Steam Direct' ten oyun için gerekli ödemeyi yaptım. Oyunun kendi ID' sini kullanıyorum. Test ederken Steam'e yüklüyorum o şekilde test ediyorum.

Ama Editor üzerinde test yapabiliyorum. Ama tabi LAN kullanmış oluyor öyle. O yüzden testler sağlıklı olmuyor.

Online proje ile uğraşıyor isen kesinlikle Steam üzerindeki işlemleri halledip Steam'e yükleyerek test et. Editor içinde veya dışarı paketlediğinde çalışan şey oraya yükleyip test ettiğinde aynı sonucu veremeyebiliyor.

"Project Launcher" ile paketleme yapıyorum. "Shipping" olarak. Steam kullanacak isen "Project Launcher" ile paketleme öneririm. Youtube'da anlatımları var. Gğncelleme gerektiğinde sıfırdan dosya yüklememek için çok iyi bir seçenek oluyor. Sadece yaptığın değişiklikler ve eklediklerini yüklüyorsun. Youtube'da detaylı şekilde anlatımlar var.

UE 4.26 kullanıyorum bu arada.
 
Peki ben sana senin konunla ilgili bir şey sorayım öyleyse. Sen bu nesneyi taşıyorsun ya.
Diyelim ki A konumundan B konumuna taşıdın fakat sonradan bağlanan oyuncu bunu A konumunda olarak görüyor. Serverdeki o bilgi ona tekrardan iletilemiyor yani. Bu sorunu nasıl çözüyorsunuz ?

Yaptığımız her şeyi tek tek kayıt altına alıp playerlere mi ileteceğiz amele gibi. Umarım böyle saçma bir şey değildir yoksa acayip korkunç. Düşünsene yaptığın her işlemi senkronize edip yeni katılanlara iletip kontrol ettiriyorsun arkada.
 
Böyle bir sıkıntı yaşamadım. Bağlananlar nesne o sırada nerede ise o şekilde gördüler. Sadece nesnenin "Replication" ve "Replication Movement" seçeneklerini aktif ettim.

Zaten nesneyi taşırken Hem "Run on Server" hem de "Multicast" ile server ve sunuculara gönderiyorum. Server'da değiştiği için sonradan bağlanan kişide bilgiyi Serverdan simüle ettiği için öyle bir sıkıntı yaşamadım.

Sadece Efektlerde ve mesela dolap var ve kapağı açık. Sonradan bağlanan kişide bu gözükmeyebiliyordu. Onu da kişi login olduğunda tekrar check ettiriyorum. "Gamemode" içindeki "On Login" eventi ile yapıyorum.

Ama dediğim gibi bu sadece ilk girişteki görünüm için geçerli. Sonradan bağlanan kişi o dolap ile temas ettiğinde açık ise kapanıyor ve bağlanan kişide sıkıntısız görünüyor.
 
Sonradan bağlanan oyuncunun değişiklikleri görmesi ile ilgili : Advanced Sessions plugin i hakkında bilgim yok. Ancak genel olarak sonradan da görülmesini istediğin değişiklikler için "replicated variables" ve "OnRepNotify"  lar kullanılır. Bu değişkenler sürekli olarak (relevance larına göre)  replicate edildiklerinden oyuncu sonra dan girmiş olsa da her zaman doğru değeri görecektir.


Nesne taşıma gecikme sorunu ile ilgili :  Sorun replication sisteminden kaynaklanıyor. Sen hareketi client a replicate edebiliyorsun ancak bu işlem bizim istediğimiz kadar sık ve hızlı olmadığı için client geriden geliyor. Bu yapmaya çalıştığın şey ile movement replication aynı şey aslında. İkiside çok sık ve hızlı replication gerektiriyor. Replication frekansını arttıracak ayarlar mevcut ancak bu derece arttırmak ya mümkün değildir ya da mümkün olsa bile sistemi boğup diğer replication sistemlerini engeller. Yapman gereken movement component ta yapıldığı gibi "Client Prediction" kullanmak. İnternette aramaya başla bir sürü bilgi bulacaksındır.