Menu
CoddyTech

JsonUtility

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 30 / 64.

JSON, bir nesnenin değerlerini tutan metindir; bu nedenle günlüğe yazılabilir, gönderilebilir veya bir dosyaya yazılabilir. JsonUtility.ToJson(obj) bir nesneyi JSON'a dönüştürür ve JsonUtility.FromJson<T>(json) ondan yeni bir T oluşturur. JsonUtility, Inspector'ın izlediği kuralları izler; bu nedenle [System.Serializable] sınıflarda çalışır:

[System.Serializable]
public class PlayerProfile
{
    public string playerName = "Ana";
    public int level = 7;
    public List<string> badges = new List<string> { "Explorer", "Sharpshooter" };
    [SerializeField] private float hoursPlayed = 12.5f;
    private int secretCode = 1234;
    public int Rank { get; set; } = 3;
}
string json = JsonUtility.ToJson(new PlayerProfile());
// {"playerName":"Ana","level":7,"badges":["Explorer","Sharpshooter"],"hoursPlayed":12.5}
PlayerProfile copy = JsonUtility.FromJson<PlayerProfile>(json);

secretCode ve Rank yer almaz. JsonUtility, public alanları ve [SerializeField] ile işaretlenmiş private alanları yazar; başka hiçbir şeyi yazmaz: property'leri, static alanları veya sıradan private alanları yazmaz. Dictionary alanı da atlanır; sınıfı [System.Serializable] olmayan bir alan da öyle. Inspector da bu alanları dışarıda bırakır. JsonUtility.ToJson(obj, true) aynı JSON'u birkaç satıra yayarak yazar; böylece okunması kolaylaşır.

Sınıf içindeki bir liste, badges gibi yazılır. Tek başına duran bir liste yazılmaz: JsonUtility en üst düzeyde bir nesneye ihtiyaç duyar; bu nedenle 10, 20 ve 30 değerlerinden oluşan bir List<int> için JsonUtility.ToJson(scores), {} döndürür. Listeyi bir sınıfa koyup onu dönüştür; aynı listeyi içeren bir ScoreBoard şu şekilde yazılır: {"scores":[10,20,30]}:

[System.Serializable]
public class ScoreBoard
{
    public List<int> scores;
}
challenge icon

Görev

Orta

Ekibi JSON kodu olarak paylaş.

  1. CharacterBuild içinde Strength alanını public int strength; yap ve agility alanını [SerializeField] ile işaretle.
  2. Altına, public List<CharacterBuild> heroes; içeren bir [System.Serializable] Team sınıfı yaz. TeamCode içinde listeyi public Team team; yap ve JSON'unu günlüğe yazdır.
  3. LoadCode, code değerini team içine okur ve Loaded 3 heroes ifadesini günlüğe yazdırır.

“Oyna” düğmesine bas ve Space tuşuna bas: ekip JSON olarak görünür. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class CharacterBuild
{
    public string hero;
    public int Strength { get; set; }
    private int agility;
}

Unity'de Oyun Mimarisi bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground