Unity Gaming Services Duyuruldu. Unity hali hazırda varolan çeşitli hizmetlerine çeşitli güncellemeler eşliğinde Unity Gaming Services adıyla duyurdu. Multiplayer altyapısından, geliştirme ve içerik yayınlamaya kadar farklı başlıklarda gelen yeni güncellemeleri toparlayıp bu yazıda sizinle paylaşmak istedim. Öncesinde, tanıtım videosu olarak yayınladıkları youtube videosuna bir bakalım.
Videoyu izlediğimde, açıkçası bir geliştirici olarak benim için yeni neler var, neler oluyor gibi sorulara dair ufacık bir ipucu bile göremedim. Bu noktada birazcık hayal kırıklığına uğradığımı belirtmek isterim. Ancak yatırımcılara yönelik duyurular da yapıldığını düşündüğümüzde, o kadar takılmamak gerektiğini düşünüyorum. Geliştiricilerin gözünden de bir video olmasını beni memnun ederdi sadece.
Unity Gaming Services Neler İçeriyor?
Temel olarak aslında daha önce bildiğimiz hizmetlerin çoğunlukta olduğunu belirtmekte yarar var. Yeni olarak özellikle multiplayer tarafındaki çözümler benim dikkatimi çekti. Hatırlarsınız ki, Unity eski çevrimiçi sistemi yerine yeni bir sisteme geçeceğini uzun süre önce duyurmuştu. Geçen sene açık kaynak oluşturulan MLAPI yapısını çevrimiçi oynanış için kendi sistemine dahil etti ve geliştirmeye devam ediyorlardı. Bu altyapının güncellenmiş haliyle burada olduğunu da görebiliyoruz.
Genel olarak Unity Gaming Services içerisinde yeni ve güncellenmiş hizmetler 4 başlık altına alınmış durumda. Bunlar Multiplayer, Backend, Analytics & Player Engagement, Monetization & Growth şeklinde. İçerdikleri hizmetleri ve tam olarak ne işe yaradıklarını başlıklar altında ele alabiliriz.
Unity Gaming Services Multiplayer
Unity Gaming Services Multiplayer tarafı, yazının öncesinde de belirttiğim gibi, özellikle geliştiriciler için eksik taraflarının farkında olmasıyla biraz daha önem verilen bir yön haline geldi. Bunun etkilerini de bu duyuruda görmüş olduk. MLAPI yapısı üzerinden geliştirilen ve yayınlanan yeni güncellemeler ile NetCode for GameObjects ve NetCode for Entities duyuruldu. İsimlendirmelerden de anlayacağınız şekilde, hem GameObjects yapısı, hem de ECS veya DOTS olarak da bildiğimiz yapı için bir multiplayer altyapısı sunulmuş halde.
Objelerin haberleşmesi, sunucu üzerinden kontrol için, yani genel olarak çevrimiçi oyun objelerinin haberleşmesi için kullanabileceğimiz NetCode yanı sıra, oyuncuları birbirine nasıl bağlayabileceğimiz de önemli bu konu. Unity’nin burada da bize sunduğu iki yeni çözüm var, Relay ve Lobby.
Relay, sunucusuz şekilde peer-to-peer denilen, oyuncuların direkt olarak birbirine bağlanması için kullanabileceğimiz bir çözüm. Bu sayede ortada direkt olarak oyunumuzu çalıştıran bir sunucu olmasına ihtiyaç duymuyoruz. Çoğunuz bildiğini düşündüğüm olay aslında, bir oyuncu bir nevi sunucu görevini üstleniyor ve diğerleri ona bağlanıyor.
Lobby ise adından da tahmin edebileceğiniz üzere lobi sistemi ile alakalı. Oyuncularımız için kolaylıkla farklı oyunları, lobileri arayıp oyunlara katılabildikleri veya kendi lobilerini oluşturabildikleri bir yapı sunuyor bize. Ayrıca yalnızca davet sistemi ile oyuncuların yalnızca istedikleri kişileri lobiye almaları da mümkün. Böyle bir altyapının da hazır olarak sunuluyor olması gayet iyi bir gelişme.
Dokümanları incelediğimde, özellikle Relay ve Lobby yapılarının beraber kullanılması önerildiği dikkatimi çekti, sizinle de paylaşmak istedim. Bir zorunluluk değil ama ikisi bir arada kullanılabilecek ve birbirinden yararlanabilecek şekilde geliştirilmiş. Örneğin Relay ile bir oyuncunun oyundan ayrıldığını Lobby sistemine haber verebileceksiniz. Belirtmekte de fayda var, bu iki paket şu anda açık beta sürecinde ve açık beta sonuna kadar ücretsiz olarak denenebilecek.
Çevrimiçi oyun geliştirmenin bir diğer önemli kısmı da sunucu işleri. Özellikle dünya çapında yayılma niyetiniz varsa, dünyanın her yerinde sağlıklı bağlantılar kurmak baş ağrıtabilir. Unity bunun için de bir hizmet sunuyor; Multiplay.
Unity Multiplay, global olarak oyun sunucusu ve bunların teknik bakımlarını içeren bir hizmet. Bu yazı yazılırken, dünya genelinde 190 üzerinde sunucu merkezine sahip oldukları bilgisini de kendi sitelerinden edinebiliyoruz. Bu sunucu merkezleri üzerinden, ihtiyaca göre kapasitenin anında arttırılabilmesi, kolaylıkla güncellenebilme gibi çeşitli seçenekler sunuluyor. Özellikle teknik sorunlardan kurtulmak, oyun geliştirici firmalar için büyük rahatlık sağlayacak bir durum. Gerek genişletilebilir olması, kapasitenin arttırılabilmesi, gerek bu teknik destek mevzusu Apex Legends geliştiricilerinin de ilgisini çekmiş ki, öve öve bitiremiyorlar.
Bu sunucu desteği olsa da, oyuncuların anında bir maç, karşılaşma bulup oyunu oynamaya başlaması da ayrı bir sorun olabiliyor. Unity’nin bunun için çözümü ise Matchmaker. Unity Matchmaker sistemi ile oyuncuların birbirini bulması, bağlanması ve anında bir oyun oluşturulması çok daha kolay hale geliyor. Apex Legends geliştiricileriyle yapılan ve neden Unity Multiplay ve Matchmaker kullandıklarını anlattıkları röportajı da şöyle bırakalım.
Unity Gaming Services Backend
Unity Gaming Services Backend içeriğinde genel olarak oyuna dair arka planda kalan save (oyun kaydı), oyun güncelleme, oyun içi ekonomi ve oyuncu kaydı için çözümler bulunuyor. Bunlardan oyun güncelleme olarak bahsettiğim Cloud Code özellikle benim baya bir ilgimi çekti. Ancak daha detaya girmeden, bahsedeceğim sistemlerin şu an Beta sürecinde olduğunu belirtmekte fayda var. Yani güncellemeler gelecek ve haliyle sistemlerin çalışmalarında ufak değişikliklere sebep olabilecektir.
Unity Cloud Code, temelde kodunuzun bir kısmını sunucuda tuttuğunuz bir yapı. Basitçe verebileceğimiz bir örnekle, bir zar atıyorsunuz ama burada olasılığı hesaplattığınız fonksiyonunuz sunucuda bulunuyor. Oyun internet üzerinden sunucuya bu fonksiyonda ihtiyaç duyulan bilgileri yolluyor, sunucu hesapları yapıyor ve oyuncuya geri yolluyor. Ne gerek var diyebilirsiniz böyle bir şeye. Ama diyelim ki, bu fonksiyonu biraz daha dengelemek istediniz veya tamamen çalışmasını değiştirdiniz. Bunu oyunculara aktarmak için oyunu güncelleyip tekrar build alıp oyuncuların indirmesini beklemeniz gerekiyor. Cloud Code ile bu sorunu çözmeniz çok daha kolay hale geliyor, çünkü çok sunucu üzerinden rahatlıkla kodunuzu güncelleyebiliyorsunuz. Hatta bunu tamamen internet tarayıcınız üzerinden yapmanız mümkün, en azından dokümanda verdikleri bilgi bu şekilde.
Unity Cloud Save ve Unity Authentication sistemleriyle de oyuncularımızın sistemimize kayıt olmasını ve oyun verilerin saklamayı, daha önce bahsettiğim Cloud Code ile backend yapımızda bu verilerin iletimini, işlenmesini sağlayabiliyoruz. Daha öncesinde farklı çözümler ile bu sorunu çözmeye çalıştığımız düşünüldüğünde, kesinlikle işimize yarayacak bir sistem yaratıldığı belli.
Son olarak da Unity Economy sisteminden bahsedeceğim. Tahmin edeceğiniz üzere, oyununuz içerisindeki ekonomi, para ve eşya sistemiyle alakalı bir sistem. Yine Cloud Code sisteminde olduğu gibi, ekonomi sisteminizi tamamen sunucu tarafında düzenleyip, oyun güncellemesi ve oyuncuların bunu indirmesini beklemeden rahatlıkla bu düzenlemeyi hayata geçirebiliyoruz. Ayrıca yine bu sistem yazının devamında bahsedeceğimiz Unity In-App Purchase sistemiyle beraber de çalışabiliyor. Yani oyun için gerçek para ile alışverişlerimiz için, oyun içindeki paralar ve objelerin düzenlenmesini de gerçekleştirmemiz kolaylaştırılıyor.
Unity Gaming Services Analytics ve Player Engagement
Unity Analytics ve Player Engagement, oyununuzu daha iyi analiz edebilmeniz ve oyuncuları oyununuza ilgi duymalarına devam ettirmenizi sağlayan 4 sistem içermekte. Bunlar; Analytics, Cloud Content Delivery, Remote Config ve Cloud Diagnostics.
Unity Analytics, oyuncuların, oyun esnasında yaptığı işlemleri analiz ve takip etmenizi sağlayan bir sistem. Oyun içi belirli olayların oyuncular tarafından gerçekleştirildiğinde sunucuda kayıt altına alınması sayesinde, oyuncularımızın oyun içerisinde nelerle ilgilendiğine, hangi işlemleri gerçekleştirdiğine erişebiliyoruz. Böylece oyunumuzu analiz etmemiz daha kolay hale geliyor.
Örneğin oyuncuların büyük bir kesiminin istediğimiz, yönlendirmeye çalıştığımız şekilde bir bölümü geçmeye çalışmalarını bekliyoruz. Ancak oyuncuların büyük bir çoğunluğu yöntemimizi tercih etmiyor. Bundan haberdar olabilmemiz için belirli bir analiz sistemine ihtiyacımız var. Bunu farkettikten sonra anında oyunumuzu ele alıp buna neyin sebep olabileceğini inceleyebiliriz. Tabii sebebi bulduktan sonra, bu sorunu gidermek için güncelleme yayınlamamız da gerekiyor. Bu noktada da Unity Cloud Content Delivery sistemini kullanabiliriz.
Unity Cloud Content Delivery sistemi, oyunumuzda yaptığımız güncellemeleri, yeni bir build almadan oyuncularımızla paylaşmaya imkan veren bir sistem. Temelde Unity Addressable altyapısını kullanıyor. Burada Addressable yapısı kilit bir nokta. Normalde bu yapı ile objelerinizi, sahnelerinizi paketleyip, herhangi bir sunucuya aktararak oyuncularınızla sunucuya güncel hallerini yollayarak otomatik olarak paylaşabiliyoruz.
Unity Cloud Content Delivery sistemi ise hem sunucu olayını, hem de bu paketlerin sunucuya aktarılması, yayınlanması, denetlenmesi için gerekli şeyleri bize sunuyor. Yani geliştirme aşaması dışındaki teknik konular için ekstra bir zaman ve maddi kayıptan bizi kurtaran bir çözüm. Örneğin bir karakterimiz var ve artık bir şapkası olmasını istiyorsunuz, sadece prefabınızı güncelleyip, Unity sunucularına bunu aktarmanız yeterli oluyor. Addressable altyapısı ile, yaptığımız ayarlamalar sonucu oyunumuz açıldığında internete bağlı ise, bizim ayarladığımız sunucuda veri kontrolü yapıyor. Herhangi bir yeni veri varsa bunu çekiyor ve içeriğini güncelliyor. Ayrıca sadece bir obje de değil, tamamen sahneleri de aynı şekilde güncellememiz mümkün.
Diyelim ki, bu kadar büyük değişiklikler yapmadan, yani tamamen bir sahne veya obje değişikliği yapmadan bazı ufak düzenlemeler yapmamız gerekiyor. Belki oyuncuların her level için gerekli xp hesabında kullanılan katsayı değeri, belki bir seviyede kazanacağı altın sayısı. Bunlar o kadar ufak değişiklikler ki, tamamen bir objeyi veya sahneyi güncellemeyle uğraşmamıza ve tekrar sunucuya aktarmamıza gerek kalmamalı. Ki, Unity Remote Config ile buna gerek de yok.
Unity Remote Config, tam sayı, bool gibi basit değerleri sunucularımızda tutarak, sanki bir sosyal medya hesabında bir ayar değiştirir gibi anında ve kolaylıkla oyun verilerinizi üzerinde düzenlemeler yapmanızı sağlayan bir sistem. Bu değişikliklerin hangi oyunculara erişeceğini de belirleyebiliriz. Örneğin konuma göre, o ülkenin bir bayramı için yalnızca o ülkedeki kullanıcılarınıza yönelik bir temayı aktif hale getirebiliriz.
İstediğimiz şekilde güncellemelerimizi paylaşıyoruz, oyun içerisine gerçekleşen olayları gözlemleyebiliyoruz, gayet güzel. Ancak oyuncuların karşılaştığı herhangi bir sorun, oyun donması, kapanması gibi durumlardan da haberdar olmamız gerekiyor. Bunu yapabilmemiz için de tabii ki Unity bir sistem sunuyor, Unity Diagnostics.
Unity Diagnostics ile, oyuncularımızın karşılaştığı donma, kapanma gibi sorunlardan haberdar olabiliyoruz. Sadece “x kişi crash aldı, oyunu kapandı” şeklinde değil, baya detaylı bilgiler sunuyor bize bu sistem. Ayrıca oyunun hangi bölümlerinde bu durumun yaşandığı, teknik hata kodunu ve sorunun temelinde ne olabileceğini bu sistem sayesinde anlayabiliyoruz.
Bu sistemlerle beraber Unity’nin kesinlikle geliştiricilere çok yardımcı olduğunu söylemek mümkün. Rahatlıkla güncelleme yapmak, sorunları takip edebilmek, anında ufak düzeltmeler yapmak, kesinlikle geliştirici tarafında zaman kazandıran şeyler.
Unity Gaming Services Monetization & Growth
Oyunumuzu oluşturmak işin bir kısmı iken, bunu uygun kitlelere ulaştırmak ve oyunumuzdan gelir etmek ise diğer bir önemli kısmı. Ve ciddi şekilde önem verilmesi gereken bir kısım. Emeklerimizin karşılığını alıp oyunumuzu güncellemeye devam edebilmek veya yeni projelere başlayabilmek için bütçeye ihtiyaç duyacağımız su götürmez bir gerçek. Bunun için de Unity Gaming Services içerisinde 4 servis bulunuyor.
Unity Acquire sistemi ile, oyunumuz için uygun oyuncu kitlesini bulmak ve hedef kitlemize erişmemiz kolaylaşıyor. Belirlediğimiz kriterlere göre reklamları istediğimiz kitlelere sunarak, daha doğru bir şekilde istediğimiz oyunculara ulaşırken, bunu daha az maaliyetli şekilde gerçekleştirmemize de olanak tanıyor.
Oyunumuzdan gelir elde etme yollarından biri, oyun içi satın alımlar. Bunun için ise kullanabileceğimiz altyapı Unity In-App Purchase. Basit bir eklenti olarak bunu oyunumuza dahil ettiğimizde, AppStore veya PlayStore gibi farklı mağazalardan satın alma işlemlerini kolaylıkla oyunumuza entegre edebiliyoruz. Her mağaza için ayrı bir entegre süreci ile uğraşmamıza gerek kalmıyor. Satın almanın başlatılması ve satın almanın gerçekleşip gerçekleşmemesi durumları bu altyapı ile oyunumuzda kontrol edilebiliyor.
Bir başka gelir elde yöntemi ise oyun içi reklamlar kullanmak. Unity Ads Monitize ile oyununuz içerisine bir reklam sistemini basitçe ekleyebiliyoruz. Sistem içerisinde ödüllü, kısa süreli gibi çeşitli reklam şekilleri de hazır olarak bulunuyor. Sisteminize ekledikten sonra nerede reklam girileceği veya nerede ödüllü reklam açılacağı ve ödülün kazanılıp kazanılmadığını rahatlıkla ayarlanabiliyor.
Son olarak, beta sürecinde olan Unity Mediation ile size daha fazla gelir getirecek reklamların belirlenmesini, kitlenizin hangi reklamlara daha çok ilgi duyduğu gibi verileri sunan bir altyapı. Ayrıca reklam alanlarınızı teklif veren reklam kampanyaları arasından seçerek doldurmanız, böylece daha yüksek gelir elde etmeniz de bu sistem içerisinde var olan bir özellik.
Unity Gaming Services oyun güncellemesi, oyuncuların birbirine bağlanması, hataların analizi gibi geliştiriciler için gerekli teknik özelliklerin yanında, ekonomik tarafı da rahatlatan çeşitli çözümler içeriyor. Özellikle dünya geneline erişmek ve teknik olarak daha rahat bir konumda olabilmek için bu servisleri kullanmayı göz önünde bulunmanızı kesinlikle öneriyorum.
Genel olarak Unity Gaming Services için diyeceklerim şuanlık bu kadar. Direkt olarak kaynaktan incelemek isterseniz buraya tıklayarak Unity kaynaklarından da bilgi edinebilirsiniz. Umarım faydalı bir içerik olmuştur. Yeni yazılarda görüşmek dileğiyle.