Menu
CoddyTech

JsonUtility

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 24 dari 50.

JSON adalah teks yang menyimpan nilai-nilai sebuah object, sehingga bisa dicatat, dikirim, atau ditulis ke file. JsonUtility.ToJson(obj) mengubah object menjadi JSON, dan JsonUtility.FromJson<T>(json) membuat T baru darinya. JsonUtility mengikuti aturan yang digunakan Inspector, sehingga berfungsi pada class [System.Serializable]:

[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 dan Rank tidak disertakan. JsonUtility menulis field publik dan field privat yang diberi tanda [SerializeField], dan tidak menulis yang lain: tidak ada property, field statis, ataupun field privat biasa. Field Dictionary juga dilewati, begitu pula field dengan class yang tidak memiliki [System.Serializable]. Inspector juga tidak menyertakan field-field tersebut. JsonUtility.ToJson(obj, true) menulis JSON yang sama dalam beberapa baris, sehingga lebih mudah dibaca.

list di dalam class akan ditulis, seperti badges. list saja tidak: JsonUtility memerlukan object di bagian teratas, jadi JsonUtility.ToJson(scores) untuk List<int> berisi 10, 20, dan 30 akan menghasilkan {}. Masukkan list ke dalam class lalu ubah class itu; ScoreBoard yang menyimpan list yang sama akan ditulis sebagai {"scores":[10,20,30]}:

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

Tantangan

Sedang

Pembangun tim memungkinkan pemain membagikan tim sebagai kode. Tombol Space seharusnya mencatat tim sebagai JSON, dan LoadCode(string code) seharusnya membaca kode. Saat ini, tombol Space mencatat Team code: {}, dan strength serta agility para hero bahkan tidak muncul di Inspector.

  • Di CharacterBuild, jadikan strength dan agility nilai yang disimpan: ganti property Strength dengan field publik strength, dan biarkan agility tetap private, tetapi tandai dengan [SerializeField].
  • Sebuah list yang berdiri sendiri ditulis sebagai {}. Di bawah CharacterBuild, tulis class Team dengan atribut [System.Serializable] dan satu field publik heroes bertipe List<CharacterBuild>. Di TeamCode, ganti list heroes dengan field publik team bertipe Team, lalu catat Team code: diikuti JSON dari team.
  • Di LoadCode, baca kode ke dalam team dengan JsonUtility, lalu catat jumlah hero yang ada di dalamnya, seperti Loaded 3 heroes.

Inspector mengisi team dengan seorang Knight (strength 8, agility 3) dan seorang Archer (strength 4, agility 9). Tekan Play dan tekan Space, baca kode di Console, lalu tekan Periksa.

Coba sendiri

using UnityEngine;

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

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Arsitektur Game di Unity