leonscottkfm

Unreal MVP
31 May 2015
1,436
5
190
63
27
(34) İstanbul Avrupa
store.steampowered.com
Multiplayer bir oyunda oyun ilk başladığında tüm oyuncular trenin koltuklarında oturmuş şekilde başlamalı. Başta yaptım fakat senkron sorunu çıktı. Çünkü tren Timeline ile hareket ediyor. Bazı oyuncularda FPS drop olursa tren birkaç metre geride durmuş oluyor.
Şimdi öncelikle oyuncuların tren koltuklarında başlaması için ne yapmak gerekir ? Player Startları başta tren koltuklarına koyup sonra attach işlemi mi yapacağız ? Kapsül problemi çıkabiliyor, kayma olabiliyor, ya spawn olmazsa birisi ? Ya buga girerse gibi şeyler çok kritik böyle bir durumda.
Bunun en mantıklı çözümü nedir ? Sonradan bir şeyleri spawn edip bu şekilde ayarlama yapmak senkron sorunu yaratabiliyor.
En başında trende sabit bir şekilde başlamaları gerekiyor.
 
Hmmm. Çok çeşitli yollar izlenebilir tabi ama kolaylık ve etkinlik açısından şöyle bir yol takip ederdim herhalde:
1. Trenin tüm collisionlarını kapatırdım ki PlayerStart larla bir problem oluşmasın. Görsel olarak orada olması dışında collision nav mesh hiç bir şeye etki etmemeli.
2. Player Startları trenin içine ilgili yerlere koyardım. Böylece tüm spawnlar trenin içinde boş koltuklarda olurdu.
3. Karakterleri trenin içinde bulunan socketlere "attach" lardım.
4. Oturma hadisesini tamamen animasyon sistemine bırakırdım.
5. Trenin hareket etmesini Timeline ile yapmazdım. Gerçi serverda çalıştırırsan muhtemelen yine bir sıkıntı çıkmayacaktır socket attachment tan dolayı. Onun yerine MoveTo vb gibi replicated hareket içeren herhangi bir sistem kullanırdım. Ama her halükarda tren hareketi serverda olması lazım ve replicated olması lazım. "Client Prediction" olmayan her server hareketi titreme ya da başka bir problem çıkaracaktır görsel olarak.
6. Eğer BeginPlay de bir problem gözüküyorsa Fade In Fade Out (Ekran karartma ya da açma effecti) ile başlangıçta oluşan problem 1 2 saniye gizlerdim.
7. Asıl oyun tarafı direk trenden başlayacaksa, ilgili zaman geldiğinde trenin collisionlarını active edip oyunun geri kalanına devam edilmesini sağlardım.
 
Son düzenleme:
Ekli dosyayı görüntüle 737

@erginegider'in dediklerine ek olarak Timeline'ı işaretlediğim yerden replicated yapabiliyorsunuz, senkron sorunlarından kurtarabilirsiniz bu yöntemle
Evet onu biliyorum yaptım zaten. Fakat timelineye ek olarak dışarıdan variableler verince yine onların da replicated yapılması gerekiyor yoksa titreme problemleri yaşanmaya başlıyor :D veri replicated edilse bile FPS değişiminden dolayı sorunlar yaşanabiliyor.
Ama detaylı şekilde bakacağım.
 
Hmmm. Çok çeşitli yollar izlenebilir tabi ama kolaylık ve etkinlik açısından şöyle bir yol takip ederdim herhalde:
1. Trenin tüm collisionlarını kapatırdım ki PlayerStart larla bir problem oluşmasın. Görsel olarak orada olması dışında collision nav mesh hiç bir şeye etki etmemeli.
2. Player Startları trenin içine ilgili yerlere koyardım. Böylece tüm spawnlar trenin içinde boş koltuklarda olurdu.
3. Karakterleri trenin içinde bulunan socketlere "attach" lardım.
4. Oturma hadisesini tamamen animasyon sistemine bırakırdım.
5. Trenin hareket etmesini Timeline ile yapmazdım. Gerçi serverda çalıştırırsan muhtemelen yine bir sıkıntı çıkmayacaktır socket attachment tan dolayı. Onun yerine MoveTo vb gibi replicated hareket içeren herhangi bir sistem kullanırdım. Ama her halükarda tren hareketi serverda olması lazım ve replicated olması lazım. "Client Prediction" olmayan her server hareketi titreme ya da başka bir problem çıkaracaktır görsel olarak.
6. Eğer BeginPlay de bir problem gözüküyorsa Fade In Fade Out (Ekran karartma ya da açma effecti) ile başlangıçta oluşan problem 1 2 saniye gizlerdim.
7. Asıl oyun tarafı direk trenden başlayacaksa, ilgili zaman geldiğinde trenin collisionlarını active edip oyunun geri kalanına devam edilmesini sağlardım.
Tren sorununu şöyle çözdüm. Player Startları boş bir alana spawn ettim. Ekran karartılı başlayacak bir intro girecek. Intro izlenirken arka planda olacaklar ise şunlar oluyor:

Tren için SeatBP adında bir aktör oluşturdum ve bunları Child olarak trenin ilgili koltuklarına ekledim. Sonra hepsini bir array ile topladım.
Sonra Gamemodeden oyuncular boş alana spawn olduktan sonra bu oyuncuların bağlandı ID numarasına göre, yani playercontrolleri arraya eklerken 0-1-2-3-4 gibi aldım bunları. Koltukları da 0-1-2-3-4 şeklinde arraydan alıp eşledim. Böylece 0. oyuncu 0. koltuğa, 1.oyuncu 1.koltuğa oturuyor. Yani bağlantı sırasına göre koltuğa oturma durumu mevcut oldu. Collisionları kapattım ardından animasyonu oynatmaya başladım. Bir problem yok şu an. Çünkü SeatBP ye skeletal mesh ekleyip oturdugunda nasıl duracaklar onu önce test edip ona göre lokasyon vermiştim. Socket mantığı.

Fakat tren hareket etmeye başlayınca clientler kasıyor titriyor. Oysaki Phyrexianın dediği gibi timelineyi replicated seçmiştim.
Fakat dışarıdan gelen variablelerin konum bilgisinin clientlere ekstradan aktarılması gerekiyor herhalde. Bilmiyorum. TrainBP içinde serverden çağırılan bir custom event içinde oluyor bu hareket timeline olayı. Gamemodeden başlatıyorum. Fakat titriyorlar. Ama hallederim bugün.
 
  • Beğen
Tepkiler: kinglord34
Bende dahil olayım öyleyse :) Herşeyi replicate etmek zorunda değilsin :) Başlangıçta kaç oyuncu olduğu bilgisi Server da mevcut dolayıyla spawn olan client, serverdan oyuncu bilgisi ve timeline daki saniye bilgisini request edecek veya Server server-travel yapmadan önce bunu clientlara bildirecek fark etmez, server dahil her client oyuncuları koltuklara AIController bünyesinde local olarak yerleştirecek ve herşey local olarak simüle edilecek. En son trenin işi bitti, oyuncuları trenden indiriyorsun, mini bir fade in/out ile local pawn ları destroy edip gerçek oyunculara bırakacaksın ortamı.

Şiddetle tavsiyem şu yöndedir, replicate etmeden çözebiliyorsan çöz, mecbursan replicate et. Bildiğim kadarıyla PreReplication işlemleri Blueprint tarafında yapılamıyor, yapılıyorsa da nasıl olduğunu ben bilmiyorum, yani runtime bir variable ı non-replicated hale getiremiyoruz BP de dolayısıyla oyunun sonuna kadar peşini bırakmıyor bu değerler, kullanmadıkça rep olmaz doğru ancak her spawn, level değişimi ..vs gibi işlemlerde aktif hale geliyorlar öyle ya da böyle. Sonuç olarak localde çözebildiğin herşeyi local de bırak ;)
 
Anladığım kadarıyla the forest uçak sahnesi gibi bir şey yapmayı planlıyorsun. Oyuncular trende herhangi bir etkileşimde bulunamayacaksa sequencer kullanarak işi daha rahat bir şekilde çözebilirsin diye düşünüyorum.
 
  • Beğen
Tepkiler: leonscottkfm
Anladığım kadarıyla the forest uçak sahnesi gibi bir şey yapmayı planlıyorsun. Oyuncular trende herhangi bir etkileşimde bulunamayacaksa sequencer kullanarak işi daha rahat bir şekilde çözebilirsin diye düşünüyorum.
Trende pusulalarına bakabiliyorlar ve etrafı izleyebiliyorlar. Yaptım bu arada video gelir şimdi :D
 
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

İşte tren sahnesinin tamamlanmış hali.
Vallaha koltukları eksik koymuşum sorun ondanmış :D Arrayın içinde sadece iki koltuk eklemişim. Unutmuşum yani.
Bir de treni haritadan silip tekrar koyunca düzeldi sorunlar.

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.
 
Son düzenleme:
  • Beğen
Tepkiler: kinglord34