NooXRii

Üye
11 Ara 2020
96
28
18
(6) Ankara
nightcrewlab.github.io
Merhaba arkadaşlar. Multiplayer bir oyun yapmaktayım. Oyunda 4 kişi olacak. 1 kişi Server diğer 3 kişi Client. Oyunda bir harita var ve bu haritada bir tava bulunmakta. Bu tavanın içinde bir değişken var. Oyundaki herhangi bir oyuncu Server da olabilir Client da olabilir. Bu tava ile etkileşime girdiğinde Sadece kendisinde bir Widget oluşuyor ve bu Widget'a bu tavayı referans olarak ekliyor. Widget'ın içinde 3 tane buton var. Bu butonlar bu tavanın içindeki değeri değiştiriyor. Fakat server bunu yaptığında herkeste değişiyor ama bir client yaptığında hiç kimse de kendisi dahil değişmiyor. Aşağıda resimleri sıralı şekilde atacağım. Oradan bakıp yardımcı olursanız sevinirim.

SS1
Sorun1 resmi



SS2
Sorun 2 resmi


SS3
Sorun 3 resmi



ÇÖZÜM: Bir altta bulunan "erginegider" isimli arakadaşın söylemiş olduğu şekilde yaptım ve sorun çözüldü.
 
Resimlerdeki bazı kırmızı yazıları okuyamadım. Ayrıca sistem baya karışık ama neden olmadığı açıkça belli.
1. RPC eventler yani RunOnServer Multicast vb. bütün eventler widgetlerda ya da bir actor üzerinde gibi anlıyorum. Widgetlar bu iş için kullanılamaz. Bu networking komutlarının çalışacakları yer PlayerCharacter ya da playercontroller olması lazım. Yoksa arada bir iletişim olmaz.
 Şuraya bir göz at: https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/Networking/Actors/OwningConnections/

2. Client tan diğerlerine bir şey gitmesi için sistemi şöyle kurman gerekiyor. Clientlarda serverda her kim olursa olsun oradaki değeri serverda değiştirecek. Sadece serverda değiştirecek. Sonradan bu serverdan değişen değer ya replication  ile zaten clientlara gidecek ya da Multicast fonksiyon ile clientlarda da uygun şekilde set edilecek. Duruma göre. Başka türlü client ların bir şey değiştirmesi diğer client ların da bunu görmesi asla söz konusu olamaz.

3. Birinci maddede anlatıığım gibi  bütün bu veri gidiş gelişi ya da event gidiş gelişi player character ya da player controllerda olması lazım. Aslında actor de kullanılabilir ama verdiğim link te göreceğin gibi ownership olayını halletmen gerekir. Oda kafanı daha çok karıştırabilir şu aşamada.