Unity Online JSON Çekme
Unity Online JSON Çekme
Merhaba arkadaşlar bu yazımda sizlere Unity ile internet üzerinde bulunan sitemizden nasıl JSON verilerini çekebileceğimizi anlatacağım ve buna ek olarak JSON verilerinizi ücretsiz olarak saklayabileceğiniz bir internet sitesinden de bahsedeceğim.
Ek olarak diğer JSON gönderilerimize bakmanızı da öneririm.
Unity JSON Oluşturma ve JSON Okuma
Online JSON Saklama Sitesi/Servisi
.JSONbin.io alan adlı internet sitesinde önceden oluşturduğunuz veya sitede oluşturduğunuz JSON dosyalarını ücretsiz olarak paylaşabiliyorsunuz ve herhangi bir sunucu masrafı ödemeden projelerinizde çekmeniz gereken JSON dosyasına erişebiliyorsunuz.
Bu site ile ilgili daha sonra daha detaylı bilgiler vermeyi düşünüyorum kullanımına dair ama şimdilik uzun tutmuyoruz. Bilmeniz gereken tek şey şimdilik attığınız zaman size şöyle bir adres veriyor:
"https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c" bu ilk yüklediğiniz JSON dosyasının adresidir.
Bunun dışında "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/1" ve "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/2" gibi yüklediğiniz JSON dosyasının güncelleme sayısına göre sonuna "/x" x numara ekleyip istediğiniz JSON dosyasının versiyonunu seçebiliyorsunuz.
En son sürümü çekmek isterseniz "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/latest" adresindeki gibi "/latest" eklemeniz yeterlidir.
JSON Verisini Çekme İşlemi Açıklama
JSON Verimizi çekmek için ilk olarak 2 adet C# Script oluşturacağız ve birinde JSON dosyamızı parse etmek için kullanacağımız veri türlerini (JSONData) bulunduracağız diğerinde ise JSON dosyamızı çekmek ve kullanmak istediğimiz yerlerde JSON dosyasına erişebilmek için olan kodlarımızı yazacağız (JSONController).
JSONData Scripti
using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] // jsonDataClass her yerden erişebilmemizi sağlıyor public class jsonDataClass { public int Version; // JSON da bulunan Version değişkeni public string AppName; // JSON da bulunan AppNAme değişkeni public sorularClass[] Sorular; // JSON da bulunan sorular dizi değişkeni için bunu oluşturuyoruz ve içeriğini altta doldurucaz } [System.Serializable] // sorularClass her yerden erişebilmemizi sağlıyor public class sorularClass { public int No; // JSON içinde bulunan Sorular dizisindeki No değişkeni public string Soru; // JSON içinde bulunan Sorular dizisindeki Soru değişkeni public string Dogru_Cevap; // JSON içinde bulunan Sorular dizisindeki Doğru_Cevap değişkeni public string Yanlis_Cevap1; // JSON içinde bulunan Sorular dizisindeki Yanlis_Cevap1 değişkeni public string Yanlis_Cevap2; // JSON içinde bulunan Sorular dizisindeki Yanlis_Cevap2 değişkeni public string Yanlis_Cevap3; // JSON içinde bulunan Sorular dizisindeki Yanlis_Cevap3 değişkeni }
{"Version":71,"AppName":"QuizRun","Sorular":[{"No":1,"Soru":"Mehmet Akif İstiklal Marşını nerede yazmıtır ?","Dogru_Cevap":"Ankara - Taceddin Dergahı","Yanlis_Cevap1":"Ankara - Keçiören Camisi","Yanlis_Cevap2":"Ankara - Ayaş Dergahı","Yanlis_Cevap3":"Ankara - Ayasofya"}]}
JSONController Scripti
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class jsonController : MonoBehaviour { public bool veriTabaniVarmi = false, Yenile=false; // Veri varmı kontrol etmek ve veri yoksa veri gelene kadar istek yollamak için değişkenler public string jsonURL; //JSON verilerini çekeceğimiz sitenin değişkeni [System.Obsolete] // jsonDataClass a erişebilmemizi sağlıyor. void Start() { jsonURL = "https://api.jsonbin.io/b/5e3602be50a7fe418c57f30c/latest"; // JSON verilerinin bulunduğu aders StartCoroutine(getData()); // Veriyi çekmek için kullandığımız Coroutine fonksiyonu // NOT : IENumerator gibi özel fonksiyonları Coroutine ile çekmenz gerekiyor. } [System.Obsolete]// jsonDataClass a erişebilmemizi sağlıyor. private void Update() { /* Eğer veriyi çekemediysek yeniden veriyi çekmemizi sağlıyor. */ if (Yenile) { StartCoroutine(getData()); Yenile = false; } } [System.Obsolete] // jsonDataClass a erişebilmemizi sağlıyor. IEnumerator getData() { Debug.Log("Bekleyin"); WWW _www = new WWW(jsonURL); // WWW değişkeni oluşturuyoruz ve json dosyamızı çekiyoruz. yield return _www; // Çektiğimiz veriyi döndürüyoruz. if (_www.error == null) // Hata almazsak { processJsonData(_www.text); // Veriyi çekmek için yolluyoruz. veriTabaniVarmi = true; // Verinin çekildiğini doğruluyoruz. } else { Debug.Log("Hata"); // Veri çekemediysek hata çıktısını veriyoruz } } public void processJsonData(string _url) { jsonDataClass jsnData = JsonUtility.FromJson<jsonDataClass>(_url); // Çektiğimiz JSON dosyasını oluşturduğumuz jsonDataClass veri tipine çeviriyoruz. Debug.Log("Uygulama adı : " + jsnData.AppName); // JSON verisindeki AppName değişkenini çekmek foreach (sorularClass x in jsnData.Sorular){ // JSON verisindeki Sorular dizisini çekmek için kullanıyoruz. Debug.Log(x.No + "\n"); Debug.Log(x.Soru + "\n"); Debug.Log(x.Dogru_Cevap + "\n"); Debug.Log(x.Yanlis_Cevap1 + "\n"); Debug.Log(x.Yanlis_Cevap2 + "\n"); Debug.Log(x.Yanlis_Cevap3 + "\n"); } // Eğer ki toplu değil de tek tek çekmek istersek Debug.Log(jsnData.Sorular[0].Soru); /* Sorular[x] burada x kısmına 0 dan başlayıp JSON dizinizdeki max sayıya kadar sayı yazabilirsiniz "." koydukdan sonra da jsonDataClass da bulunan Sorular class ı içindeki herhangi bir değişkeni girebilirsiniz. No, Soru, Dogru_Cevap, Yanlis_Cevap1, Yanlis_Cevap2, Yanlis_Cevap3 gibi... */ } }
Yorum Gönder