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;
}Tantangan
SedangPembangun 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 propertyStrengthdengan field publikstrength, dan biarkanagilitytetap private, tetapi tandai dengan[SerializeField]. - Sebuah list yang berdiri sendiri ditulis sebagai
{}. Di bawah CharacterBuild, tulis classTeamdengan atribut[System.Serializable]dan satu field publikheroesbertipeList<CharacterBuild>. DiTeamCode, ganti listheroesdengan field publikteambertipe Team, lalu catatTeam code:diikuti JSON dariteam. - Di
LoadCode, baca kode ke dalamteamdengan JsonUtility, lalu catat jumlah hero yang ada di dalamnya, sepertiLoaded 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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja SamaRingkasan: Turret Modular5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest