Şimdi Ara

Photon Engine 2 Senkronizasyon ve Lag Sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
1
Favori
456
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Photon Engine 2 ilk defa kullanıyorum. Denemek amaçlı çok aşırı basit 2d bir oyun yaptım ve test ettim. 2 karakterin animasyonları senkronize değil. Örneğin 2. oyuncu ile kılıç sallatıyorum fakat aynı anda sallamıyor. 1. oyuncunun ekranında 1 saniye sonra sallıyor. Böylece bazen damage vuruyorken bazen vurmuyor. Ayrıca karakterlerin transformu da senkronize değil. 2. oyuncunun ekranında 2. oyuncunun transform position x'i -3'ken birinci oyuncunun ekranında 2. oyuncunun transform position x'i 2.5f civarında gösteriyor. Hem animasyonlar hem de pozisyonlar senkronize değil. Oyun da akıcı değil. Sanki böyle biraz laglı. En popüler multiplayer aracı bu sanırım. Siz nasıl bunu kullanıyorsunuz? Bilmediğim bir ince ayarı mı var acaba?




  • Bilmeyenler için konuyu güncelleyeyim. Photon Engine PUN2 çok ilkel bir multiplayer eklentisi. Yani fizik tabanlı olmayan oyunlarınız için kullanabilirsiniz. Performansı rezalet durumda. Oyununuzda fizik varsa Photon Fusion kullanmak daha iyi. Eğer WebGL oyunu yapıyorsanız ve oyununuzda fizik varsa maalesef ikisi de işinizi görmez. Daha karmaşık olan Photon Quantum'u kullanmanız gerekiyor.

  • Zamanla ve gayretle kazandığınız bilgi birikimini paylaştığınız için teşekkürler

  • mr.yilanci kullanıcısına yanıt

    Güzel yorumunuz için teşekkürler. Foruma çok sık giremediğim için geç oldu ama :)

  • Alıntı

    metni:
    Merhaba Bende Suan Unityde Photon Quantum kullnarak bir 2d oyun yapiyorum fizik agirlikli burdapaylastigin gordum ve tecrubelerine dayanarak bir kac soru sormak istoyirum oncelikle quantumda hali hazirda bir egitim varmidir veya siz bu surecte nasil ilerlediniz Ogrenebilirmiyim Simdiden cok tesekkur ederim

    @mpal15 özel mesaj atamıyorum. Buradan cevaplayayım. Quantum tamamen karmaşık bir sistem. Unity ile bir benzerliği yok. Sıfırdan öğrenmek için yeterli kaynak da yok. Tolga KARANLIKOĞLU'nun birkaç videosu bulunmakta:


    https://www.youtube.com/@tolgakaranlik



    Fiziğin çok önemli olduğu bir dövüş oyunu yapmıştım. Mobil ve PC'de Fusion ile sorunsuz çalışıyordu fakat WebGL'de inanılmaz laga sahipti. Eğer oyunun WebGL için değilse Quantum'u boşverip direkt olarak Fusion kullanabilirsin. Öğrenmesi gayet kolay. Fakat bir Web3 oyunu geliştiriyorsan ve WebGL şart ise, oyununda da fizik çok ön plandaysa tek çözüm Quantum veya Fusion'da WebGL'deki lagı by-pass etmek. Kendi deneyip bulduğum yöntemle karakterlerdeki lagı şöyle byPass ettim:

    Host oyuncuda kesinlikle lag olmuyorken clientte inanılmaz bir lag oluyor. Ben de bunu çözmek için client'in Fusion ile değil de lokalde kendi Update methoduyla hareket etmesini fakat 0.25 saniyede bir Fusion üzerinden host'un ekranından ağdaki gerçek konumunu kontrol etmesini sağladım. Ayrıca client'in üzerinde ekli olan networkRigidbody2D ve networkTransform gibi componentleri kaldırdım. Host'un yönettiği karakterde ise bunlar kullanılıyorsa eğer kaldırılmaması gerek. Mantığı anladıysan gerisi kolay. Bu yöntemle Quantum'daki kadar akıcılık elde ettim.

    Kod

    Yığını:
    public float coolDownTime = 0.25f; private float coolDownTimer = 0.25f; public override void FixedUpdateNetwork() { if (!GetInput(out NetworkInputData data)) return; if (Object.HasInputAuthority && !Object.HasStateAuthority) { //Client ve karakterini kontrol ettiğin objeysen 0.25 saniyede bir Pozisyonunu yolla. if(coolDownTimer > 0) { coolDownTimer -= Runner.DeltaTime; } else { RPC_Position(this.transform.position, this.transform.localScale.x); coolDownTimer = coolDownTime; } } } [Rpc(RpcSources.InputAuthority, RpcTargets.All)] public void RPC_Position(Vector3 playerPos, float scaleX, RpcInfo info = default) { //X eksenindeki hata payı 0.5'ten fazlaysa pozisyonlarını eşitliyor if (Mathf.Abs(playerPos.x - this.transform.position.x) > 0.5f) { this.transform.position = new Vector3(playerPos.x, this.transform.position.y, playerPos.z); } //Y eksenindeki hata payı 0.5'ten fazlaysa pozisyonlarını eşitliyor if (Mathf.Abs(playerPos.y - this.transform.position.y) > 0.5f) { this.transform.position = new Vector3(this.transform.position.x, playerPos.y, playerPos.z); } //Obje scale hata payı yanlışsa (karakter sola bakıyorken gerçekte sağa bakıyorsa mesela) düzeltir if (this.transform.localScale.x != scaleX) { this.transform.localScale = new Vector3(scaleX, this.transform.localScale.y, this.transform.localScale.z); } }




  • PixCave kullanıcısına yanıt
    Cok teşekkür ederim geri donusunuz icin, oyunum webgl de olacağı icin quantumu tercih ettim
    Suan quantumda baya bir yol aldim cogu seyi bittirdim sayilir geri donusunuz icin tekrar teşekkür ederim

    < Bu ileti Android uygulamasından atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.