Lacrime

Yeni üye
23 Haz 2024
11
0
1
Bir projemiz var. Plate Up! a benziyor. Oyunu 2 kişilik multiplayer yapmak istiyoruz fakat bir türlü beceremedik. Unreal içerisinde bildiğiniz bir eklenti veya youtubedan izleyip server client şeklinde yapabileceğimiz bir video var mı? UE5.3
 

Ekli dosyalar

  • Ekran görüntüsü 2024-09-15 193911.jpg
    Ekran görüntüsü 2024-09-15 193911.jpg
    199.1 KB · Görüntüleme: 11
Bir projemiz var. Plate Up! a benziyor. Oyunu 2 kişilik multiplayer yapmak istiyoruz fakat bir türlü beceremedik. Unreal içerisinde bildiğiniz bir eklenti veya youtubedan izleyip server client şeklinde yapabileceğimiz bir video var mı? UE5.3
Öyle bir şey indirip koyayım oyun Onlineye dönüşsün diye bir şey yok.
Multiplayer tamamen ayrı bir konu. Öyle basit bir konu da değil. Üzerinde çalışılması gereken bir konu.
 
katılıyorum, multiplayer tek başına en sıkıntılı konu desek yeridir, başlı başına uzmanlık gerektiriyor, yanlış replicate overload, fazla replicate net traffic getirir. bunu öğrenebileceğiniz gerçek anlamda doğru bir yer yok desek yalan olmaz. Lyra starter game paketini inceleyebilirsiniz, orada işinize yarayacak çok şey var.
 
Öyle bir şey indirip koyayım oyun Onlineye dönüşsün diye bir şey yok.
Multiplayer tamamen ayrı bir konu. Öyle basit bir konu da değil. Üzerinde çalışılması gereken bir konu.
Üslubunuzu hiç beğenmedim en azından bir öneri ve yahut bir yardımcı olabileceğini düşündüğünüz bir kaynak belirtebilirdiniz.
 
Üslubunuzu hiç beğenmedim en azından bir öneri ve yahut bir yardımcı olabileceğini düşündüğünüz bir kaynak belirtebilirdiniz.
Üslubumla alakalı bir şey olduğunu sanmıyorum. Eklenti tarzı bir şey yok demek istedim. Yukarıda anlatıldı zaten. Fakat araştırman gereken konu Replication konusu.
Yani soruna nasıl bir öneri verilebilir bilmiyorum. Türkçe kaynağı geç yabancı kaynak bile sınırlı.
Öğrenmen gereken şeyler :

Replication sistemi : Yani multiplayer tabanlı bir oyunda yapılan aksiyonun kimle tarafından görüleceği ? Bilgi her zaman ilk önce servere ulaşır oradan dağıtılır.
Bunun olmasının yararını anlatayım hemen sana. Önceden SA-MP diye bir oyun vardı. Aslında Gta Sanandraesi online oynamak için yapılan bir uygulamaydı bu.
Para hilesi yapıp paranı yükseltebiliyordun.
Sonradan modlama ve kodlama olayları gelişti yeni versiyonlar geldi ve hilenin önü yavaş yavaş kapandı.
Para olayı Roleplay Serverlerinde önemli bir rol oynar. Dolayısıyla normal sunucularda pek durdurulmasa da RP serverlerinde bu hilenin önü kesilmeliydi.
RP serverlerinde para bilgisi hep Server üzerinde çalışır. Sen para harcarken eksilecek miktar da server üzerinde halledilip kalan bakiye hesaplanıp sana aktarılır. Dolayısıyla oradaki para değeri ile senin paran eşleşmiyorsa. Örneğin serverde senden alınan son bilgiye göre senin paran 2000 dolardı fakat sen hile ile onu 20000 dolar yaptın. Fakat bunu nereden kazandığın belirsiz. Bir event çalışmadı bir şey satılmadı bir şey olmadı. Sadece Ram değerindeki para miktarı değiştirildi bir program aracılığı ile.

İşte orada bir yenilik geldi, bu tip olaylar server üzerinde çalıştığı için para gelir gelmez paran sıfırlanıyordu geri eski haline geliyordu. Server bu bilgiyi alır inceler yanlış bir yerden geldiyse müdahale eder.
Unreal Enginede bazı olayları Server bazlı kullanmak zorundasın. Mesela hasar alma ve verme olayı. ApplyDamage yapacaksan bunu ilk serverde çalıştırmalısın. Aksi taktirde çalışmayacaktır.

RepNotify: Önemli bir şey fakat çok kullanmadım ne olduğunu tam bilmiyorum. Bir fonksiyonu değişkenle bağdaştırıyorsun ve sürekli güncelleniyor. Bazı yerlerde kullanmak zorunlu aksi taktirde sonradan bağlanan oyuncular bazı verileri tam alamayacaktır. Mesela sen material renginin değişkenini buna bağladın ve dışarıdan değiştirdin oradaki fonksiyon hemen bunu algılayıp herkes için güncelliyor gibi bir şey bu.

Şimdi bir objen var diyelim ve bu obje hareket ediyor, herkes tarafından hareket edildiğinin görünmesi için Replicated Movement seçeneği işaretli olmalı mesela. Kodla replicate etmiyorsun onu Components kısmında seçili olan objenin properties sekmesinde bulunan bir tik ile oluyor bu.

Sen basit bir oyun yaptığın için Tick Ratelere , Replication uzaklığına falan takılma. Her şeyi Replicate ederek başla. Bir sorun olmaz korkma sunucuya ve oyunculara biraz yük binecek ama oyun küçük olduğu için ne kadar yük binebilir ? GTA yapıyorsan o ayrı konu o zaman proje çakılır. Ama sen küçük bir haritada 3-4 oyuncunun olacağı bir restoran oyunu yapıyorsun büyük ihtimalle ve bazı şeyler güncellenecek. Mesela menü bilgisi, müşterinin istekleri, yemeğin süresi gibi şeyler. Bunların tüm özelliklerini replicated yap sen.

Replicated Variables : Tamam olaylar replicate edilebiliyor fakat bu olaylarda kullandığın değişkenlerde değerler var. Mesela mermi sayısı, bunu replicate etmene gerek yok. Oyuncu için bu mermi bittiyse reload yapar sen de reloadı replicate edersin. Merminin kaç olduğunu diğer oyuncuların bilmesine hiç gerek yok. Senin canının değerini de bilmelerine gerek yok. Fakat sen bir can barı yapıyor ve bunu herkes görsün istiyorsan işte o zaman onu da replicate edip yansıtman lazım oyunculara.
Yani değişkenleri de replicate edebilirsin. Yan panelde replication seçeneğinden replicated seçerek yapabilirsin bunu. Mesela herkesin yemek skoru tabloda görünecek diyelim. Bir tahta tasarladık ve en iyi en hızlı yemek yapanlar puanalar aldı ve orada görünecek. Senin puan değişkenin ise Integer. Dolayısıyla bu integer değişkeni replicate edip daha sonra bir widget ile her oyuncuya göstermelisin. Fakat o puanı sadece kendi görecekse o zaman replicate etmene gerek yok.

Replicationun en önemli olduğu yerler Custom Eventler. Bir custom event oluşturduktan sonra sağ panelde bunun en önemli üç adet replication özelliği vardır. Run on Server, Run Owning Client, Multicast.
Bu üç kavramı çok iyi öğrenmelisin. Run on Server, sadece serverin bileceği işler için kullanacağın replicate türü.
Dediğim gibi can kavramı mesela, hasar alma gibi şeyler Run on Server.

Run Owning Client ise , serverden gelen tüm bilgileri sadece oyuncular görecek fakat başkalarına yansıtmayacaklar. Mesela senin oyunun her oyuncuya 10 dakikada bir para yolluyor diyelim. Oyuncuların her biri bir Clienttir. Dolayısıyla her Cliente para atacak fakat kime ne atıldığını diğerlerinin görmesine asla gerek yok. Dolayısıyla Serverden > Run Owning Client üzerine işlem yapman gerekecek.

Multicast ise her oyuncu her oyuncunun yaptığı şeyden haberdar olacak demektir. Mesela ben gittim lavuğun yanında bomba patlattım ve diğer oyuncular da bu bombanın patladığına ve lavuğu 20 parçaya ayırdığına şahit oldular. Al sana Multicast. Herkese iletildi bu bilgi. Nereden iletildi ? Server üzerinden.

Yani bir custom event yapıp onu Run on Server yapacaksın sonra başka bir custom event yapıp asıl olayları oraya yazacaksın. Sonra Run on Server olarak yazdığın yerden o custom eventi çağıracaksın. O diğer custom event ise Multicast olacak. Yani böylece Run on Server kullanan custom eventin > Multicast kullanan eventini çağırmış oldu. Bunu çoğu zaman yapacaksın aksi taktirde kendi yaptığın şeyleri sadece sen görürsün. İlk önce bilgiyi serverde işleyip sonra oyunculara dağıtmalısın. Genellikle Run On server Eventinden Multicast çağırırsın ya da Run Owning Client.

Replication uzaklığı gibi durumlar var. Mesela herif dünyanın diğer ucunda metin kesti. Bunu senin görmene gerek var mı ? Yani o bilginin sana iletilmesine ? Hayır yok. Adam 39394893km ötede metin kesiyorsa bizene onun kestiği metinden değil mi ? Fakat ben oraya 10 bin metre yakındaysam o bilgi bana iletilmeli. Gittiğim zaman göreyim. Adam yere item düşürdü fakat o item benim için spawn olmadı. Fakat ben 10 bin km yakınına geldiğimde o bilgiler bana da işledi. E bu ne işe yaradı ? Şu işe yaradı : Networking Optimization.

Fakat sen diyeceksin ki şimdi, Herif 2938292932 km ötede adam öldürdü fakat üstte görünmesi lazım. Ahmet > Mehmeti pistol ile öldürdü. Evet bunu da uzaklığa bağlı replicate edersin. Olayları etmezsin fakat o öldürme bilgisini alıp evrensel olarak her yerden görülecek şekilde sadece onu replicate edersin. Diğer öldürme olayının replicationu ise sadece 10bin metreden görülecek şekilde ayarlanmış olur. Yani sen ahmetin mehmetin öldürdüğünde mehmetin ragdolla dönüştüğü olayını işlememiş olursun. Fakat geberdiği bilgisi ekrana yansır.

Bu böyle uzar gider ben temel bilgileri verdim sana. Youtube de Replication olayını araştır. Ben bunları işin içine girdiğimde öğrendim. Yani hali hazırda oyunumu yaparken hala öğreniyorum :D
Önce öğrenip sonradan uygulamakta var fakat bu unutulan bir bilgi oluyor. Bir şeyi yaparken öğrenirsen kalıcı oluyor. Yüzeysel olarak bak sonra bir şeyler yap.
Ne bileyim ID numarası 3 olana para yolla mesela ve ekranda herkese görünecek şekilde yazsın. Kick sistemi yap ID numarası yazılı adamı atsın ve tüm oyunculara o adamın atıldığını belirtirken adama ise kendisinin atıldığını belirtsin.

Örneğin Tüm Oyuncular : (5)Brownie sunucudan atıldı sebep: Küfür

Brownie oyuncusu olan ben : Sunucudan admin tarafından atıldın. Sebep : Küfür

-Tüm oyunculara farklı bir mesaj iletirken atılan oyuncuya da farklı ilettik. Hatta ikisin de görebilir. Fakat oyuncunun kendisine ilettiğimiz o mesajı diğerleri göremez. Bunu da Server> Owning Client ID = 5 şeklinde yaparsın. Tüm Gamemodeye bağlı playercontrolleri ForEach ile çekersin sonra ID numarası 5 e eşit olanı bulursun ya da sen bunu chate yazarak yapacaksan , ID integer = textbox.text şeklinde yaparsın ve oraya hangi ID girildiyse onu atar ve ona mesaj gönderir.

Sonra o adamın ID bilgisini diğer Custom Eventin olan TümOyuncularaİlet ile bağdaştırıp tüm oyunculara da farklı bir mesaj iletirsin o da multicast olur. Dolayısıyla herkese göndereceğin mesajı atılan adam da görür. Fakat atılan adama göstereceğin mesajı herkes göremez. Fakat atılan adamın mesajını herkese gösterirken atılan adama göstermek istemiyorsan o zaman o adamın ID numarasını bildiğin için onu hariç tutarak yine foreach yapıp o ID numarasına sahip olmayanlara iletirsin.

Al sana bilgi.
 
Son düzenleme:
  • Beğen
Tepkiler: Blacies ve Ceno73