ahtek07

Aktif üye
4 Nis 2018
276
45
28
24
(55) Samsun
ahmettekin.bitrix24.site
Merhaba arkadaşlar uzun bir zaman sonra tekrardan merhaba. 
Yaklaşık 5 yıldan beri kendimi UE tarafında geliştirmekteyim VR, Mobil, Desktop gibi platformlara birçok proje yaptım. Genel olarak BP mantığını anladığımı düşünüyorum ama çok büyük bir eksiğim var malesef hayatımda hiç multiplayer bir proje yapmadım sadece basic replication biliyorum. Soruma gelecek olursam Unrealin multiplayer tarafını güzel bir şekilde öğrenmek için nasıl bir yol takip etmeliyim nelere dikkat etmeliyim hangi kaynaklar daha iyidir veya bildiğiniz ve tecrübe ettiğiniz bir kurs varmıdır ?
 
Kolay gelsin. Multiplayer öğrenmesi ve anlaması çok sancılı, ama öğrenince istediğini yaptırması kolay bir süreç. Çok fazla kaynak yok derinlemesine anlatan bildiğim kadarıyla. Parça parça kaynaklardan parça parça şeyleri bir araya getirip tam bir kavrama yakalamıştım ben.

Öncelikle şu döküman güzel bir anlatıma sahip:
https://cedric-neukirchen.net/Downl...twork_Compendium_by_Cedric_eXi_Neukirchen.pdf

Şu video repnotify, multicast, replication ve network relevency i açıklıyor. Ben herhalde ayrı ayrı zamanlarda 4-5 defa izlediğimde anlamıştım ne anlatmak istediğini.
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

Ama nirvanaya ulaşmamda en büyük olay herkeste gerçekleştirmek istediğin bir eventi gerçekleştirmek için o eventi Server'de çağırman gerekiyor. Ancak onu çağırabilmek için de eventi çağıran kişinin o aktörün sahibi yani owner 'ı olması gerekiyor. Ownership ile alakalı RPC ler ilk dökümanda yazıyor. Diyelim ki sandığa bir item koyacaksın. Bunu sandık aktörünün içinde yapabilirsin ama bir sorunla karşılaşacaksın. AddItem eventini serverde çağırdın diyelim. Serverin kendisi bunu çağırırsa herkeste o item sandığa eklenir. Ama o sandığı spawn etmeyen server dışındaki bir client AddItem eventini Serverde çağırsa bile bu diğer clientlerde çalışmaz. Çünkü o sandık Server tarafından spawn edildi ve sahibi spawn eden kişi. Her client gelip AddItem 'ı serverde çağırıp herkeste eventin çalışmasını sağlayamaz. Server'i çağıramadığı için multicast de yapamaz. Bunu yapmanın yolu sandık aktörüne item ekleme olayını sandık aktörünün dışında, mesela player controller de yapmak. Çünkü herkes kendi player controllor 'ünün sahibidir. Player controllerde çağırdığın her Server eventi çalışır çünkü sahibi çağıran clienttir. Benim bunu anlamam çok uzun zaman aldı ama bunu anlayınca her eventi herkeste çalıştırabilir oldum.

İkinci önemli bir şey de ne zaman multicast, ne zaman rep-notif kullanmak gerektiğini anlamak. Multicast'ı anlık efektler, ses efektleri, animasyonlar gibi şeylerde kullanırsın. Bir client network relevancy içinde değil yani çok uzaksa onda bu event çalıştırılmaz. Diyelim ki sandığın kapağı açılacak. Sen serverde sandık etkileşiminde sandık açılma animasyonunu oynatırsan sandığa yakın herkes sandığın açıldığını görür. Ama uzaktan biri gelirse ya da oyuna sonradan biri dahil olursa sandık animasyonu hiç oynanmamıştır ve sandığı kapalı olarak görür. Bunun önüne geçmek için sandığa bir bool variable atarsın. Biri sandığı açınca bool değerini true yaparsın. Bu değişkeni replicated yerine rep-notify dersen orda olmayan birisi network relevancy içine girerse oyun ona der ki. "Hey bu bool değişkeni false 'tan true 'ya geçmiş o zaman şu Event'i çalıştırıyorum. O evente ne yaptıracaksan onu yaptırırsın. Bir nevi o değişkeni gözlüyor değişim var mı yok mu diye. En basit anlatımı ile böyle. Bunu da anlarsan işin %75 i tamamdır.
 
Yukarıda ki cevaba aynen katılıyorum. Şu dersi de şuraya ekliyorum. Benim bildiğim bu konuda ki en başarılı ders : https://www.udemy.com/course/unrealmultiplayer/

Bunun haricinde şunu eklemeliyim. Yukarıdaki mesajda ki dökümanların ve videoların bir kaç kez üzerinden geçtikten sonra uygulama yapmalısın. Uygulama yaptıkça ve gözünle gördükçe her şey netleşecek.