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;
}Görev
OrtaEkibi JSON kodu olarak paylaş.
CharacterBuildiçindeStrengthalanınıpublic int strength;yap veagilityalanını[SerializeField]ile işaretle.- Altına,
public List<CharacterBuild> heroes;içeren bir[System.Serializable]Teamsınıfı yaz.TeamCodeiçinde listeyipublic Team team;yap ve JSON'unu günlüğe yazdır. LoadCode,codedeğeriniteamiçine okur veLoaded 3 heroesifadesini 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
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground