Unity’de JsonUtility.FromJson() ile JSON Veri Parse Etme

Unity oyun geliştirmede JsonUtility.FromJson() fonksiyonu ile JSON verilerini nasıl parse edeceğinizi adım adım öğrenin. Örneklerle ve detaylı açıklamalarla Unity'de JSON kullanımı.

Unity oyun motorunda, oyun verilerini, ayarları veya diğer bilgileri saklamak ve yüklemek için JSON (JavaScript Object Notation) sıklıkla kullanılır. JSON, okunabilir ve hafif bir veri formatıdır ve Unity’nin JsonUtility sınıfı, bu verileri kolayca parse etmenizi sağlar. Bu makalede, JsonUtility.FromJson() fonksiyonunu kullanarak JSON verilerini Unity’de nasıl kullanacağınızı detaylı bir şekilde ele alacağız.

JsonUtility.FromJson() Fonksiyonu

JsonUtility.FromJson() fonksiyonu, bir JSON dizesini C# nesnesine dönüştürür. Bu, JSON verilerindeki bilgileri Unity oyununuzda kullanabilmeniz için gereklidir. Fonksiyon, JSON dizesini ve hedef C# sınıfını parametre olarak alır. Dönüştürülen nesne, fonksiyonun dönüş değeridir.

Kullanım Örneği: Basit Bir Örnek

Öncelikle, JSON verilerimizi temsil edecek bir C# sınıfı tanımlayalım. Örneğin, bir oyuncu karakterinin özelliklerini saklayan bir sınıf:


[System.Serializable]
public class PlayerData
{
    public string name;
    public int health;
    public int score;
}

Şimdi, bu sınıfı kullanarak JsonUtility.FromJson() fonksiyonunu nasıl kullanabileceğimize bakalım:


string jsonData = "{"name":"John Doe","health":100,"score":0}";
PlayerData player = JsonUtility.FromJson<PlayerData>(jsonData);
Debug.Log("Player Name: " + player.name);
Debug.Log("Player Health: " + player.health);
Debug.Log("Player Score: " + player.score);

Bu kod, JSON dizesini PlayerData sınıfına dönüştürür ve oyuncunun adını, canını ve skorunu konsola yazar. JsonUtility.FromJson<PlayerData>() kısmı, dönüşümün PlayerData sınıfına yapılacağını belirtir. [System.Serializable] özniteliği, sınıfın JSON dönüşümü için uygun olduğunu belirtir. Bu öznitelik olmadan, JsonUtility sınıfı çalışmayacaktır.

Karmaşık JSON Verileri

Daha karmaşık JSON yapıları için, iç içe geçmiş sınıflar kullanabilirsiniz. Örneğin, bir oyuncunun envanterini içeren bir JSON:


[System.Serializable]
public class Item
{
    public string name;
    public int quantity;
}

[System.Serializable]
public class PlayerData
{
    public string name;
    public int health;
    public int score;
    public Item[] inventory;
}

Bu örnekte, PlayerData sınıfı bir Item dizisi içerir. JSON verileri de buna göre düzenlenmelidir:


string jsonData = "{"name":"John Doe","health":100,"score":0,"inventory":[{"name":"Sword","quantity":1},{"name":"Potion","quantity":3}]}";
PlayerData player = JsonUtility.FromJson<PlayerData>(jsonData);
// ... player verilerini kullanın

Hata Yönetimi

JSON verilerinin geçersiz olması durumunda, JsonUtility.FromJson() fonksiyonu bir hata fırlatabilir. Bu nedenle, hata yönetimi önemlidir. try-catch bloğu kullanarak olası hataları yakalayabilirsiniz:


try
{
    PlayerData player = JsonUtility.FromJson<PlayerData>(jsonData);
    // ... player verilerini kullanın
}
catch (System.Exception e)
{
    Debug.LogError("JSON parse hatası: " + e.Message);
}

Dosyadan JSON Okuma

JSON verilerini bir dosyadan okumak için, öncelikle dosyayı okuyup içeriğini bir dize değişkenine atamanız gerekir. Daha sonra, bu dizeyi JsonUtility.FromJson() fonksiyonuna geçirebilirsiniz. Örnek olarak, “playerData.json” adlı bir dosyadan okuma:


string filePath = "Assets/playerData.json";
string jsonData = System.IO.File.ReadAllText(filePath);
PlayerData player = JsonUtility.FromJson<PlayerData>(jsonData);

Bu kod, “Assets” klasöründeki “playerData.json” dosyasını okur ve içeriğini JsonUtility.FromJson() fonksiyonuna geçirir. Dosya okuma işlemlerinde hata yönetimi de unutulmamalıdır.

JSON Verilerini Kaydetme

JsonUtility.ToJson() fonksiyonu ile C# nesnesini JSON dizesine dönüştürebilir ve daha sonra dosyaya yazabilirsiniz. Bu işlemler için de hata yönetimi uygulamak önemlidir.

Sonuç

JsonUtility.FromJson() fonksiyonu, Unity’de JSON verilerini parse etmenin basit ve etkili bir yoludur. Bu makalede, temel kullanımından hata yönetimine ve dosya okumaya kadar birçok yönünü ele aldık. Karmaşık JSON yapıları için iç içe geçmiş sınıflar kullanarak verilerinizi daha organize bir şekilde yönetebilirsiniz.