Unity'de HTTP İstekleri Nasıl Yönetilir?
- 1 minMerhaba,
APPS Mobile için yazdığım, orijinali Medium’da yayınlanan bu yazıda Unity3D ile geliştirme yaparken sunucu iletişimi nasıl yönetilir ve hangi kütüphanelerden faydalanılabilir sorularına yanıt aradım.
İki teknolojiyi ele alacağız: standart HTTP isteği ve soket bağlantısı.
Standart HTTP İsteği
Öncelikle HTTP’nin kısa bir tanımıyla başlayalım.
HTTP yani Hypertext Transfer Protocol, belirli bir modele ve bir takım kurallara bağlı kalınarak internet üzerinden paket aktarımı yapılmasını sağlayan bir protokol. Dosya aktarım protokolleri arasında HTTP‘nin önemi bir hayli fazla. HTTP ve diğer protokoller hakkında detaylı bilgiye buradan ulaşabilirsiniz.
HTTP‘de sistemleri konuşturmak için GET, POST, PUT, DELETE gibi çeşitli metotlar mevcut. Detaylı bilgi için buraya tıklayabilirsiniz.
UnityWebRequest ve Coroutine’ler
Unity3D tarafında HTTP isteklerini verimli bir şekilde yönetebilmek için Unity’nin varsayılan network altyapısı olan UnityWebRequest ideal bir yöntem.
Bu metodu çağırmak için de StartCoroutine(OrnekIstek());
şeklinde bir komut vermek gerekli.
Coroutine kullandığımızda, yield return
işleminden önceki komutlar direkt olarak işletilir. HTTP isteğinin ardından kontrol yeniden Unity motoruna geçer ve istek yapılan sunucudan yanıt gelene kadar yield return
satırından sonraki komutlar işletilmez.
Unity3D istemci tarafında HTTP işlemlerini nasıl yönettiğimizi kod üzerinden görelim;
Yukarıdaki kod bloğunu kullanarak herhangi bir adrese HTTP isteği göndermek içinse;
iOS Çıktısında Deserialization Sorunu
iOS’te HTTP isteğinden dönen yanıtın deserialize edilmesi aşamasında şöyle bir hatayla karşılaşabilirsiniz: “Dynamic code emission is forbidden by Apple AppStore”.
Bu hata Newtonsoft Json.NET kütüphanesinden kaynaklı ve şu bağlantıdaki kütüphaneyi kullanarak sorunu çözebilirsiniz.
Soket Bağlantısı
Sunucu iletişiminde kullanılan bir diğer teknoloji ise WebSocketler.
WebSocket, 2008’de geliştirilmeye başlanan, tek bir TCP bağlantısı üzerinden eş zamanlı çift yönlü iletişim (full duplex communication) sağlayan bir dosya aktarım protokolü.
WebSocket protokolü, bağlantıyı sürekli açık tutarak istemcinin ve sunucunun açık olduğu sürece her an çift yönlü mesaj alabilmeyi ve gönderebilmeyi sağlamakta.
Bu bağlantı türüyle birlikte multiplayer oyunların doğası gereği, ihtiyaç duyulan yoğun iletişimi daha hızlı ve verimli bir şekilde sağlamak mümkün.
Unity3D’de soket üzerinden iletişimi sağlamak için SocketIO kütüphanesi kullanılabilir.
Kod üzerinden bir örnekle üzerinden geçecek olursak;
Soru ve görüşlerinizi yorum olarak paylaşabilirsiniz. Hoşça kalın! :)