Unity Photon Multiplayer/Networking tecrübelerim

Merhabalar Teknoseyir takipçileri,
Şu sıralar, Android markette iki yıl süredir bulunan bir oyunumda Google Play Oyunlar(GPG) kullanan multiplayer kısımlarında bazı sorunlar olmasının yanı sıra ios marketine de açılmak istediğimden ve GPG'nin iOS desteği olmadığı için farklı multiplayer servislerine olan arayışlarım başlamış oldu. Bu süreçte, daha önce #LegendsofSoccer projemde kendim server yazmıştım ancak projeyi basitleştirip sonrada beklediğim ilgili görmeyince iptal ettiğim için, server kiralama gereksinimi duymadım. Nodejs ve socket.io ile bir sunucu yazmayı ve digitalocean'dan bir server kiralayıp orada koşturmayı düşünürken, ücretsiz alternatifleri araştırmaya koyuldum ve bunun ile ilgili de bir gönderi(bkz.) yazmış ve alternatifleri sormuştum. O sırada da Firebase'in Realtime database servislerini kullanmayı denemiş ama ortada match-making yani eşleştirmeyi yapacak bir üçüncü entity olmadığı için sorun olmuştu. Sizlere ve networkingle uğraşan birkaç kişiye danıştıktan sonra firebase'in sadece veritabanı hizmeti ile bu işin olmayacağına karar verdim ve kullandığım motor olan #Unity 'nin UNET multiplayer altyapısını denemeye karar verdim. Ancak kaynaklar oldukça yetersiz ve bir takım eksiklikler ve örnek kıtlığı olduğunu gördüm. Ayrıca benim geliştirdiğim oyun daha ziyade Turn-based ama gerçek zamanlı oynanan bir oyundu. Bu noktada arayışlarıma devam ederken, Exit Games'in Photon çözümüne denk geldim. Unet ile aynı sınırlamalara sahipti ücretsiz paketinde bu çözümde. Bunun yanında Asset Store'dan indirip incelediğimde oldukça tatmin edici sayıda örnek demoları olduğunu gördüm. Bunlardan biri de taş kağıt makas oyunuydu ve bu oyun tam istediğim şeyi yapıyordu. Bunu örnek alarak yaklaşık iki gün gibi bir süreçte olayı kaparak, kendi sistemimi yazdım ve uyguladım. Şu an da multiplayer backendini tamamladığım için arayüzü tasarlamakla uğraşıyorum. Sonuç olarak şunu söyleyebilirim ki, UNET'in üzerinden 2 yılı aşkın süre geçmiş olmasına rağmen, Photon çok ama çok daha kolay, güçlü ve stabil bir çözüm sunuyor. Bu nedenle orta çaplı projelerinizde Photon kullanmanızı öneriyorum. Ancak surviv.io gibi anlık 5-10k oyuncunuz olursa tabiki kendi sunucunuzu yazmanız ve soket ile haberleşmeniz sizin için daha mantıklı bir çözüm olacaktır diyor ve yazımı sonlandırıyorum.
Ben de zamanında(2 sene kadar önce) bazı nedenlerden dolayı hayata tam olarak geçiremediği bir unity projemde önce Unet ile başlayıp, daha sonra dokümantasyon eksikliğinden dolayı Photon'a geçmiştim. Photon hem uygulama açısından hem dokümantasyon açısından cidden çok güzel bir servis. Photon kullanırken yaşadığım en büyük sıkıntı arkadaşlık sisteminin entegresi ile ilgiliydi, yani şu an böyle bir özellik sunuyor mu bilmiyorum fakat benim kullandığım dönemde Photon'un sunduğu bir arkadaşlık ve invite sistemi tam olarak yoktu, o sistemi bir şekilde kendim yazmak zorunda kalmıştım. Bu sorun dışında Photon'dan genel anlamda baya memnun kalmıştım.
Bakın onu entegre etmeyi unutmuştum 😀 İyi hatırlattınız, onu bir araştırayım. O olmazsa olmaz 😀
Yazı güzel olmuş. Tecrübe paylaşımının değeri oldukça yüksektir. Proje ile ilgili başarılar dilerim.
Rica ederim 🙂 Herkes yararlansın ki beraber daha ileri gidelim 🙂
Benim projemde gercek objeler olmadığı için low level kisminda istedigimi daha rahat bulabildim. Bunun yaninda unitynin relay serverlarını kullanarak kendi lobi sisteminizi yapmak isterseniz çok ugrasmaniz gerekiyor hlapi de.
@ardazeytin Katılıyorum. Yeterli özelleştirme yok bence. Photon'da her şeyi çok rahat kolay şekilde yapabiliyorum. Arkadaş bulma özelliği bile var. Bunları elle yazabilir miyim ? Yazabilirim, ama zaten bu sistemleri kullanmanın iki amacı var biri ücretsiz paketi olması ve benim projem için yeterli olması, ikincisi ise kolay olması. Unet yeteri kadar kolay değil, HLAPI fazla üstün körü. Üzerinde biraz daha çalışılsa olacak gibi ama, Unity'deki abilerimizin şu anlık en zayıf yönlerinden biri bu sanırım. Baktığımız zaman PUBG mobile vs. online mobil IP'ler Unreal ile yapılıyorsa ve kullananların durumu ortadaysa bu konuda söylenecek bir şey kalmıyor. UNET büyük projelere uygun değil henüz. (Burada kullanan geliştiriciler dert yanmış:
https://www.reddit.com/r/gamedev/comments/5lzax5/do_any_real_published_games_use_unity_networking/ )İşleri kolayca çözmeyip gerekli esnekliği sağlamaması temel amacıyla çelişiyor. Yoksa tutup soket + (go veya nodejs) ile server kiralayıp orada koşturmayı ve clientlarda da soketle server haberleşmesi yapmayı tercih ederim, tutup gerçekten geniş kitlelerce online oynanacak bir oyun yapacaksam.
@ardazeytin Mantıklı, şu sıralar Unity'nin temel sorunlarıyla uğraşıyorlar. Cross platform olma dolaylı yavaşlık, grafik düzenlemelerinin aynı multideki gibi zorlukları, shader yazmanın zor olması, kullandıkları .NET Apisinin eskimiş olması gibi konular üzerine eğildiler, gelecek için de networking adına planları vardır.
Merhaba Mert hocam. Bende Unity ile multiplayer mobil oyun yapacağım. Photon server kullandığınız için size sorum olacak. Oyunum 2D 1 vs 1 realtime multiplayer olacak.
Photon server fiyatına baktım aşağıda koyduğum iki link çıktı karşıma, hangisi doğru, ikinci linkteki ne anlamadım. İkinci linkteki unlimited aklıma yattı, sınırsız kullanıcı aylık 175 dolar diyor doğrumu baktım acaba. İlk linkteki ise bana pahalı geldi.
https://www.photonengine.com/en/Realtime/pricing#plan-20
https://www.photonengine.com/en/OnPremise/pricing
Selamlar hocam, usttekinde dedicated yani photon un kendi serverlarını kullaniyorsunuz ancak alttakinde kendinizin server almasi ve uzerine photon sdk sı kurması gerekiyor bu fiyatta server başı lisans maliyeti. Eger buyuk finansal kaynaklarınız ve tutacagina emin olduğunuz bir titleınız yoksa ilkindeki paketler daha mantıklı gelecektir.
photon networkte 95 dolar olan pakette 40000 kişi mi anlık kullanıyo acaba onu anlamadım
@elmadagibayram hayir 100 kisi anlik
@mertkirimgeri sorum bir odada kaç kişi girebildiği değil benim oyunum 2 kişilik odalarla olacak aynı anda oynayan kişi sayısında bir sınır varmı
@elmadagibayram var. bahsettigim sayi toplam anlik kullanici.
@mertkirimgeri teşekkür ederim hocam şimdi benim oyunu play store da yayınladığımda 100bin kişinin anlık oynayabilmesi için ne yapmalıyım 100 200 kişi pek işe yaramaz çünki
@elmadagibayram kendi serverini yazabilirsin. Soket io ile. Bunun icin hem unityde hem javascriptte hayvan gibi kod yazman sonra da sunucu kiralaman lazim.
o zaman 100 iyidir ne diyelim😀
@elmadagibayram Önce oyunu yap. Tutarsa yazarsın serverini şeyini.
@mertkirimgeri peki şuan google play game kullansam anlık kullanıcı sorunu yada başka bir sorun olurmu ve gpg yi öğrenmek için iyi bi kaynak biliyormusunuz
@elmadagibayram kendi dokumantasyonu. Gpg sadece androidde calisiyor
Özellikle hangisi daha kolay hocam?
Bide ben oyunumu hem android hem ios’a çıkaracağım. Oyunum özgün bir fikir ama tutacak mı tam emin olamıyorum. Sizce hangisi daha mantıklı?
Bu arada büyük finansal kaynağım yani sermayem yok. 2.ci linkteki fiyat bana daha uygun geldiği için aklıma takıldı.
1.yi de 20 cculuk ucretsizle başla, kullanıcı gelirse yine o pakette yukseltme yapip devam edersin. İkincisi server kurma vs gerektirir, teknik donanimini bilmiyorum ama kolay bir iş değil nispeten birincisine kiyasla. Birincisiyi kullan gec. Photon ios android pc platformlarini destekliyor, sorun olmaz.
Tamamdır anladım hocam. Çok teşekkürler cevabınız için.
Merhaba konunu googledan buldum, unity multiplayer üzerinde çalışıyorum deneyimli birini görünce sormak istedim. unet ile matchmaking sisteminde minimum 130ping alıyorum bu ping çok fazla, self host alman gerekiyor diyorlar internette fakat daha önce hiç dedicated servera server kurulumu yapmadım herhangi bir kaynak var mı önerebileceğin? Pingi en azından Türkiye içinde 20 ye falan düşürmem lazım.
Hocam merhaba bende photon ile oyun gelistiriyorum ama kullanıcı bilgileri satın alma işlemlerini playfab ile yapip geri kalan kısımları photon ile yapıyorum takıdığım bazı konular var yardımcı olabilirmisiniz
sorunuzu sorarsanız yardımcı olmaya çalışayım.
Hocam playfab ve photon hakkında bir sorum olacaktı bilginiz varmı photon kullandıgınızı biliyorumda playfabla ilgili bir sorum olacaktı
Playfab ile alakali cok derin bilgim yok ancak siz sorun yanitlamaya calisayim
Hocam ben playfab ile kullanıcı bilgilerini tutuyorum photon ile oyunu yapıyorum ben de 2 sahne var ilk sahne scripti ile playfab login işlemini yapıyorum sonra 2.sahneye geçip photon ile oda kuruyorum buraya kadar sorunsuz ama şöyle bir sorunum var photon scriptinde
if (!string.IsNullOrEmpty(playerName))
{
PhotonNetwork.LocalPlayer.NickName = playerName;
PhotonNetwork.ConnectUsingSettings();
}
else
{
Debug.Log("Playername is invalid!");
}
burda localplayer yerinde benim playfab kullanıcı adını olmasını istiyorum bunu nasıl yapabilirim?
Su linkte kullanici verisi kaydetmek ve playfabden okumak hakkinda ornek kod verilmis. Bu makaleyi takip etmenizi ve ornek kodu denemenizi oneririm.
https://docs.microsoft.com/en-us/gaming/playfab/features/data/playerdata/quickstart
Bende bakmıştım hocam buna ama benim 2 sahne ayrı ve scriptleri ayrı olduğu için çözümü bulamadım doğrusu
Diger scripte findobjectoftype ile erisebilirsiniz diger sahnedeki scriptin sonraki sahneye gecmesi ve silinmemesi icin DontDestroyOnLoad a bakabilirsiniz
Tamam hocam yarın deneyim size dönecem ilginizden dolayı çok ama çok teşekkür ederim
Hocam hallettim yanlız bir sorum daha olacak kusur bakmayın sizi rahatsız ediyorum Hocam internetten thir person karakter kontrolleri bulum yanlız bu script namespace türünde bu yüzdenden
if (photonView.IsMine)
{
transform.GetComponent().enabled = true;
}
component kısmında scriptin adını bulmuyor nasıl yapbilirim
GetComponent metodunu generic olarak kullanıp istediğiniz componentı vermeniz gerekiyor hocam. Şöyle ki, GetComponent().enabled=true; şeklinde yapabilirsiniz. Aradığınız classı tanımıyorsa, ya "using HedefNameSpace;" ile kodun en üstünde dahil edebilir yada GetComponent() şeklinde erişebilirsiniz. Başarılar.
Merhaba, play store da bulunan oyunuma multiplayer versiyon eklemek istiyorum. Öncelikle sormak istediğim siz ücreti karşılığı böyle bir iş yapıyor musunuz?
Ayrıca photonda free versiyonda anlık max kaç kullanıcı olabilir? Oyunum aynı anda 2 kişinin oynayacağı bir oyun. Yani her levelde 2 şer kişi oynayacak. Cevabınızı bekliyorum teşekkürler
Selamlar, oyununuzun türü nedir, şu sıralar yoğunum baya ama oyunun türüne göre daha net cevap verebilirim.
@mertkirimgeri Oyun bu:
https://www.codester.com/items/10626/redboy-and-bluegirl-unity-source-code
Oyun bu:
https://www.codester.com/items/10626/redboy-and-bluegirl-unity-source-code
Anlıyorum hocam. Açıkçası genel olarak başım oldukça yoğun, pek zaman ayırabileceğimi sanmıyorum, üzgünüm.
@mertkirimgeri Anladım hocam. Peki photon free version ile aynı anda kaç kişi bu oyunu multiplayer oynayabilir?
@altaysavasan39 20 kişi hocam.
Hocam kusura bakmayın yine rahatsız ediyorum sorum olacaktı photonda 2 oyuncununda kendi ekranında ortak Instantiate olacak obje(örnek=top) ve harektelerini görmek için nasıl bir yol izlemeli
Hocam Instantiate çözdüm ama 1.oyuncu topa vuruyor top hareketi 2.oyuncudada gözüküyor ama 2.oyuncu topa vurunca top hareket etmiyor 1 gündür uğraşıyorum çözemedim daha
Merhaba, Oyunculari server aracılığı ile hareket ettirmeye çalışıyorum fakat bu sekilde inanılmaz ping oluyor nedenini anlayabilmis degilim yardimci olabilirseniz cok sevinirim
Merhaba, Bilgiler için teşekkürler. Bir sorum vardı. Sunucumu kendim yazdım c# ile. Oyunumda bir timer var. bu timerin geri sayımını server'dan yönetiyorum. Oyunun başlangiç tarihini yolluyorum başlatırken sonra her saniye yeni zamanı yolluyorum. Bu işlem kullanıcı sayısı artıkça saçma mı olur. sallıyrum 1000 aktif kullanıcı olunca oyundaki timerlar farklı mı gösterir.