mforge

Aktif üye
26 Kas 2018
275
2
53
28
Komut istemi ile Pc'yi Server olarak çalıstırdım. Daha sonra aynı yöntem ile Client1 ve client 2 ile Server'a 2 dk arayla giriş yaptım. Server'a ilk bağlanan Client1de bi degisiklik yaptım ve Sonradan baglanan Client2 bu değisikliği görmedi.
Clientlarda yapılan herhangi bi değisikliği Servarda tutup Bu değişiklikleri Server'a sonradan baglanan Client'lara bildirmem gerekiyor.
Çözüm önerileriniz nedir.?
 
Degistirdigin şeyi replicated  yaparsan sonradan da girilse o değişken replicate olacağı  için sorun olmayacaktır. Mesela bir şeyin rengini değiştiriyoruz diyelim. Bunu multicast 'le yaptıysan örneğin sonradan giren kişi bu multicast i alamayacaktır. Ancak eğer oradaki FColor değişkenini replicated yaptıysan aynı zamanda,  kişi sonradan da girse bu renk değişkenini doğru olarak alacaktır. Replication sistemini buna göre kurgulaman gerekli
 
Emin2045-
 GameState oldugunu biliyorum ama izleyecegim yol ne olmalı anlamında sordum Karakter ile gamestate aralarindaki Kod bağlantısı yani.

Erginegider-
Atadığım "E" tuşu ile Karakterin Mesh'ini değiştiriyorum.  Ikiside servara baglıylen değiştirdigimde sorun olmuyor ama sonradan server'a baglanan Client degisiklikten haberdar olmuyor Default Mesh'i görüyor. Dediğim gibi değişiklikleri Serverda tutmam ve sonradan gelcek olan Clientları bilgilendirmem gerekiyor. Bildiğim kadarıyla Bunun için GameState kullanmam gerekiyor ama kodlamayı nasil yapcağm konusunda kafam karıştı
 
İkiside bağlıyken meshi değiştirdiğinde bir sorun olmadığından emin mısın. Benim tahminim öyle de sorun olduğu yönünde. Eğer ikiside bağlıyken de sıkıntı oluyorsa ona göre konu başka demektir
 
Hocam Test etmesem sorun yok dememki. Denedim test ettim kesinlikle sorun yok, sen de deneyebilirsin istersen.
Sonradan bağlanan Client gormüyor hicbir sekilde. Tabi "baglandiktan sonra" E tusuna tekrar basınca o zaman görüyor. Bunun da sonrasında 3. bi client ile girsem o da aynı şekilde görmüyor.
Yapılan etkinlik Serverda tutulmalı ki yeni Clientlar giriş yaptığnda Server clientlara "Arkadaşlar Client1, siz gelmeden önce Mesh'ini değistirdi ve Meshi "Şu" demesi gerekiyor. :)
 
Bana göre dolambaçlı bir çözüme gerek yok. Bunun için kullanabileceğin fonksiyonlar mevcut. Bence şu game mode da Post login fonksiyonuna bir göz at. Aynı şekilde playercontroller da OnPossess var. Bunlardan ikisinden birini kullanabilirsin. PostLogin fonksiyonu yeni bağlanan oyuncu için game mode da çağırılan fonksiyondur. Yani her zaman serverda çağrılır. Bu fonksiyonu override yaparak yeni birisi geldiğinde tüm server mesh lerinin update edilmesini sağlayarak herkesin düzeltilmesini sağlayabilirsin. Yada burda yeni giren player controller için bu fonksiyon son çağrıldığından beri değişen meshleri update edebilirsin. 
https://docs.unrealengine.com/en-US/API/Runtime/Engine/GameFramework/AGameMode/PostLogin/index.html
İkinci yol  PlayerController::OnPossess fonksiyonu. Bu da bir pawn ile playercontroller eşleştiğinde çağrılır. Birisi oyuna yeni girdiğinde bu fonksiyonun çağrıldığıda bir önceki gibi kesindir. Burada aynı şekilde mesh lerin doğru gelmesi için update edilmesini sağlayabilirsin.
https://docs.unrealengine.com/en-US...mework/APlayerController/OnPossess/index.html
 En kötü ihtimalle bu fonksiyonlar çağrıldığında gerekli fonksiyonların tekrar çağrılmasını sağlarsan her hangi bir sorun olmayacaktır.
 
Elimde ne yazıkki bir C++ örnek var bu konuda ama oda senin yaptığın şey değil. Ama şöyle açayım. OnPostLogin sadece serverda çalıştığından ve sadece birisi oyuna girdiğinde çalıştığından o gamemode hangisi ise onu aç sol tarafta override events miydi functions mıydı BP de tam hatırlamıyorum şimdi oradan OnPostLogini seç ve böyle ce onu override etmiş olacaksın. Burada önce parent OnPostLogini çalıştırsın. Sonra GetAllClassOfActors la tüm karakterleri for loop a sokarak zaten üzerlerinde olan mesh i alıp tekrar yine kendilerine atarsan tüm clientlar güncellenmiş olur. Tabi aslında sadece değişen karakteri yapmak daha da mantıklı ama kafanı karıştırmak istemiyorum. 
 Bu sistemle OnPostLogin sadece serverda olduğundan serverdaki tüm meshler tekrar atanmış olacağından her kişi bağlandığında replikasyon yeniden yapılmış olacaktır.
 
Anladım. Tahminimce bu dediğin geçici bir çozüm.Aslnda mesh değişikliği bir örnekti karakterlerin Sağlıkları, hasar değerleri veya puanları vs. gibi başka durumları da var henüz onları karakterlere eklemedim ve eminim aynı sıkıntılar onda da yaşanacak. Bu çözüm performans veya herhangi bir konuda sorun çkarmadan çalışcaksa sorun yok tabi. Denicem bakalım

(C++ Kodunu Özelden atabilirsen sevinirim. Elimde bulunsun)
 
Normal değişkenler için falan bu sayfada birinci cevabımda ki gibi düşünürsen zaten problem çıkmayacaktır. Senin durumda mesh değiştirdiğin için onu sürekli replicate yapmanın direk bir yolu olmadığından böyle dolandık. (Varsa da ben bilmiyorum )Yoksa normal herhangi bir değişken zaten replicated olabildiği için sonradan giren kişilerede replicated olacağından sıkıntı olmayacaktır. Bu konuda birinci cevaba tekrar bakabilirsen iyi olur.

 
Basit şeyler bile bazen aklımdan çıkıyor. Aslnda evet değişkenleri replicated yaptğmzda sorun olmuyordu unutmuşum. Dolayisiyla Hasar HP veya Puan gibi durumlarda sorun çkmayacaktır. Ama Mesh olduğu icin skntı cktı. BP kısmı için önerdiğin çözumleri denicem. Olmadı en son C++ Kısmına geçerim. Baktım ama anladığm kadaryla Koddaki bazı ifadeleri değiştrmem gerekecek. Örn. Sende Testgamemod yazıyor bu ve bunun gibi kısımlara bende olan şeylerin adlarını yazmam gerekyor.  Sağol yardımın için denicem hepsini