Unity Code'da JSON ile Dahili Çalışma Şekli

JSON (JavaScript Object Notation), yaygın olarak kullanılan bir veri değişim formatıdır ve onu Unity'e entegre etmek, yapılandırmaları yönetmek, oyun ilerlemesini kaydetmek veya harici hizmetlerle veri alışverişi yapmak için güçlü olabilir. Bu kılavuz, Unity'de JSON ile çalışmanın temelleri konusunda size yol gösterir.

1. Adım: JSON'u Anlamak

JSON, anahtar-değer çiftlerinden ve iç içe geçmiş yapılardan oluşur.

Adım 2: Unity Kodunda JSON ile Çalışmak

Unity 'JsonUtility' sınıfı aracılığıyla JSON serileştirmesini ve seri durumdan çıkarma işlemini basitleştirir. Bu kılavuz, harici kütüphaneler olmadan Unity'de JSON ile çalışmanın temel adımlarını gösterir.

  • Bir JSON Yapısı oluşturun:
{
  "playerName": "John Doe",
  "playerLevel": 5,
  "inventory": ["sword", "shield"]
}
  • Serileştirme - C# Nesnesini JSON'a Dönüştürme:
using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
    public string[] inventory;
}

public class SerializationExample : MonoBehaviour
{
    void Start()
    {
        PlayerData playerData = new PlayerData
        {
            playerName = "John Doe",
            playerLevel = 5,
            inventory = new string[] { "sword", "shield" }
        };

        string json = JsonUtility.ToJson(playerData);
        Debug.Log(json);
    }
}
  • Seri durumdan çıkarma - JSON'u C# Nesnesine Dönüştürme:
using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
    public string[] inventory;
}

public class DeserializationExample : MonoBehaviour
{
    void Start()
    {
        string jsonData = "{\"playerName\":\"John Doe\",\"playerLevel\":5,\"inventory\":[\"sword\",\"shield\"]}";
        PlayerData playerData = JsonUtility.FromJson<PlayerData>(jsonData);

        Debug.Log($"Name: {playerData.playerName}, Level: {playerData.playerLevel}");
        Debug.Log("Inventory: " + string.Join(", ", playerData.inventory));
    }
}

Bilinen Sınırlamalar

'JsonUtility' sarma sınıfı olmadan üst düzey nesne dizilerinin (örneğin, '[{},{},{}]') serileştirilmesini ve seri durumdan çıkarılmasını doğrudan desteklemez. Bu soruna geçici bir çözüm bulmak için diziyi saracak bir yardımcı sınıf kullanabilirsiniz. İşte bir örnek:

using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
}

[System.Serializable]
public class PlayerDataArrayWrapper
{
    public PlayerData[] players;
}

public class TopLevelArrayExample : MonoBehaviour
{
    void Start()
    {
        // Serialization: Converting C# Object Array to JSON
        PlayerData[] players = new PlayerData[]
        {
            new PlayerData { playerName = "John Doe", playerLevel = 5 },
            new PlayerData { playerName = "Jane Smith", playerLevel = 8 }
        };

        PlayerDataArrayWrapper wrapper = new PlayerDataArrayWrapper { players = players };
        string json = JsonUtility.ToJson(wrapper);
        Debug.Log(json);

        // Deserialization: Converting JSON to C# Object Array
        string jsonData = "{\"players\":[{\"playerName\":\"John Doe\",\"playerLevel\":5},{\"playerName\":\"Jane Smith\",\"playerLevel\":8}]}";
        PlayerDataArrayWrapper deserializedData = JsonUtility.FromJson<PlayerDataArrayWrapper>(jsonData);

        foreach (var player in deserializedData.players)
        {
            Debug.Log($"Name: {player.playerName}, Level: {player.playerLevel}");
        }
    }
}

Yukarıdaki örnekte 'PlayerDataArrayWrapper' sınıfı, serileştirme ve seri durumdan çıkarma sırasında diziyi sarmak için kullanılır. 'JsonUtility''deki üst düzey nesne dizileriyle uğraşırken bu tür sarmalayıcı sınıfları oluşturmak yaygın bir uygulamadır.

Çözüm

'JsonUtility' JSON serileştirmesini ve seri durumdan çıkarma işlemlerini harici kütüphaneler olmadan doğrudan basitleştirir. Unity projelerinde basit JSON işlemleri için bu yerel yaklaşımı kullanın.

Önerilen Makaleler
Nintendo Controller'ı Unity ile Entegre Etme Kılavuzu
Unity'de Rotasyonu Dönüştürmek için Kapsamlı Kılavuz
Çalışma Zamanının Başındaki Değerleri Birlik İçinde Başlatan Yöntemler
Unity'de LateUpdate ile DifferentUpdate'in Karşılaştırılması
Unity'de Koleksiyon Öğeleri ve Güçlendirmeler Oluşturma
Unity'de UI Sürükle ve Bırak ile Basit Bir Envanter Sistemini Kodlama
Unity'de Bullet Time Etkisi Yaratmak