serhatwxe' Alıntı:
erginegider' Alıntı:
Aslında o bir sonraki aşama değil bir önceki aşama. Sorun burda. Ben de onu anlatmak istiyorum. Eğer maksadın sonuç olarak multiplayer oyun yapmaksa böyle düşünmek zorundasın. Herşeyi sırası ile halletmek zorundasın. SinglePlayer gibi düşünüp Multiplayer e çevirmek, multiplayer oyun geliştirirken yapacağın en kötü hareket olur.
Ama sen yine de single player da nasıl çözülür onu merak ediyorsan:
Bu seferde neden iki mesh in aynı anda görünmesini istiyor olabilirsin. İkisini aynı anda görmek istemeyeceğini tahmin ediyorum. Bu durumda o checkbox ayarları (BP de ya da C++ ta farketmez) runtime da yani kodda dinamik olarak değiştirebilirsin. Yani mesela C ye basınca FPS moduna geçmesini istiyorsan örneğin, C ye basınca mesh lerden birini saklayabilir, bunun yanında o checkbox ları istediğin gibi on ya da off hale getirebilir, tekrar C ye basıldığında check box ları tekrar geriye döndürebilirsin. Bu durumda da diğer mesh in görünür olması gerek tabi.
Eğer herhangi bir sebeple ikisinin de video da bizim gördüğümüz gibi aynı anda görünmesini istiyorsan, FPS mesh'i OnTick fonksiyonunda manuel yani kod ile döndürmen gerekecektir. Yani BP tick fonksiyonunda SetComponentRotation ya da bunun gibi bir fonksiyonla mesh i manuel döndürürsün.
Ama tekrar hatırlatmam gerekiyor: Wğer son istediğin bir multiplayer oyun ise bu seçeneklerin hepsi gereksiz. O zaman bir önceki mesajımda ki gibi yapman gerekiyor ki herkes öyle yapıyor zaten. Bu oyunun sadece bu kısmını değil bir sürü başka şeyide etkileyecek. Multiplayer için multiplayer düşünmek zorundasın.
Öncelikle teşekkürler. Hayır amacım bir tuşa basınca FPS moda geçmesi de değil. Basit örnek olsun diye Zula'yı düşünebilirsiniz. Bizi misal ceketli karakter olarak görüyorlar fakat FPS görünümde kıyafetimiz yeşil. Ben benzer sistemi Unreal'da yapmaya kalksam bir Character Blueprint içerisine bir FPS mesh, bir de tam vücut karakter koyarım. FPS Meshi sadece sahip görecek (owner see), tam vücudu ise diğer clientler. Bu sistemi yaptım test ettim gayet iyi çalışıyor. (Videoda anlaşılsın diye tam vücut karakteri ileri taşıdım, hepsini visible yaptım o yüzden garip görüntü var) Fakat en basit AimOffset kısmında bile takılınca dediğiniz doğru olduğunu biliyorum. Sizin dediğiniz gibi yapacağım. Haklısınız her şeyi doğru şekilde yapmak gerekiyor. Fakat pek anlamadım. Bir Blueprint içerisinde 2 mesh mi koyacağım yoksa ayrı ayrı 1 TPS_BP 1 FPS_BP karakter mi olacak? Eğer öyleyse TPS'i C++'a girişmeden ROLE_SimulatedProxy, FPS'i ise ROLE_AutonomousProxy olarak nasıl ayarlayabilirim? Ki bunların aynı noktada başlayıp spawnlanma durumu da var. Tabii eğer sizi doğru anladıysam.
[img=900x450]
https://iasbh.tmgrup.com.tr/4ff288/...em-gereksinimleri-tk1-1598865202292.jpg[/img]
Evet multiplayer için doğru gitmişsin şu ana kadar. Evet tek bir BPn olacak. İçinde iki tane skeletal mesh in olacak. Birisi FPS yani kendin görmen için, diğeri FullBody mesh yani diğerlerinin seni görmesi için. Zula yı pek bilmiyorum ama 100 de 100 oda öyledir. OwnerNoSee olayını da halletmişsin zaten. Buraya kadar yanlış bir şey yok.
Meseleyi şöyle anlatayım: 4 arkadaşın ile zula oynuyorsun diyelim. Bu 4 bilgisayar bir server a bağlı demektir. Serverda server versiyonu (otorite) oynuyor siz 4 ünüzde ise client versiyonları oynuyor. Aslında bu ortamda spawn olan toplamda 20 karakter var. 4 senin bilg. da 4 ikinci arkadaşında 4 üçüncü arkadaşında 4 son arkadaşında ve bir de server da 4 tane daha var. Server versiyonlar client takilere replication (veri yayını diyelim biz) yapmakla meşgul, client ların kendi aralarında bir bağlantı yok. Tek yapabilecekleri Server a veri göndermek ya da RPC ile orada fonksiyon çağırmak.
Oyuna ilk girdiğinizde sen yeşil kazağınla bir AK47 tutuyorsun resimdeki gibi. Senin orada gördüğün character sınıfının FPS meshi. OwnerNoSee ile diğer fullbody meshini kendinden saklamışsın. OnlyOwnerSee ile de FPS ni diğerlerinden saklayabilirsin. Buraya kadar da tamam.
Sen oyuna ilk girdiğinde spawn olan karakter otomatik olarak ROLE_AutonomousProxy olarak doğdu orada. Çünki o karakterin kontrolü sende. Senin karakterinde server daki otorite karaktere (ROLE_Authority) bağlı ve ordan update alıyor sürekli. Yani sen de bir Proxy (yer tutucu, vekil etc) sin ama AutonomousProxy sin. Yani kullandığın karakterin otoritesi server da olsa da oynarken sende kumanda yetkisine sahipsin. Karşında gördüğün sana bakan diğer 3 arkadaşın ise senin bilgisayarında ROLE_SimulatedProxy ler. Onlar senin bilgiyarında sadece server daki otorite versiyonu simule etmekle meşguller. Serverdaki ne yaparsa onlarda onu yapıyorlar sadece. Peki sistem nasıl işliyor o zaman. AutonomousProxy, server a ben ileri gitmek istiyorum diyor. Bunu bir RPC server fonksiyonla server da ki otorite versiyonuna yaptırıyor. Ve server daki de bunu diğer clientlara "SimulatedProxy" lere replicate ederek onlarında aynı şeyi yapmasını yani simule etmesini sağlıyor. Bütün bunlar otomatik oluyor senin bir şey yapmana gerek yok. Sen rolünü de değiştiremezsin sadece öğrenebilirsin. Senin yapman gereken geliştirici olarak o yaptığın karakterin her 3 role göre değişik şekillerde işlemesini sağlamak. Yani oyun içerisinde bir sürü yerde bu karakter şu an server da oynayan versiyon mu, AutonomousProxy mi, SimulatedProxy mi diye düşünüp ona göre herşeyi koordine etmen gerek. Bunun için kullanacağın IsLocallyControlled, HasAuthority, GetNetworkRole vb. bir sürü fonksiyon var. Onlara bakarsın kendin.
Yani BP de olsa C++ da olsa oyunu düşünürken neyi nerede nasıl yaptığın önemli. Sen lokalde sağa sola bakıyorsun ama bu bilgi default olarak servera giden bir bilgi değil. Yani control rotation senin local de bilgisayarında olan bir şey. Ne server ın ne de diğer clientların bundan haberi yok. Yapman gereken şey: Eğer autonomous proxy isen (IsLocallyControlled), karakterin ControlRotation Yaw and Pitch ini, ya da tüm rotation ı "server" da bir değişkene atamak (Server RPC fonksiyonu). Tabii ki bu server değişkenin "replicated" olmalı ki diğer SimulatedProxy lere (client) replicate yani yayın edilebilsin. Bu şekilde senin karakterinin bir temsilcisi olan diğer 3 arkadaşının bilgisayarında ki karakterler bu değerleri server vasıtası ile alacaklar. Ve anim graph ta girdi yapıp kendi AimOffset lerini çalıştıracaklar. Böylece herkes görecek ki sen sola sağa bakıyorsun.
Aynı şeyler TurnInPlace içinde geçerli genel olarak. Mantık aynı yani.
Biraz uzun oldu ama multiplayer yapıyorsan önce single player yapayım sonra multiplayer a çeviririm demek işleri çok çok zorlaştırır. Arap saçına döner.