Menu
CoddyTech

JsonUtility

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 30 di 64.

JSON è testo che contiene i valori di un oggetto, quindi può essere registrato, inviato o scritto in un file. JsonUtility.ToJson(obj) converte un oggetto in JSON e JsonUtility.FromJson<T>(json) ne crea un nuovo T. JsonUtility segue le stesse regole dell’Inspector, quindi funziona con una classe [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 e Rank mancano. JsonUtility scrive i campi pubblici e quelli privati contrassegnati con [SerializeField], e nient’altro: niente proprietà, niente campi statici, niente normali campi privati. Anche un campo Dictionary viene ignorato, così come un campo la cui classe non è [System.Serializable]. Sono gli stessi campi che l’Inspector esclude. JsonUtility.ToJson(obj, true) scrive lo stesso JSON distribuito su più righe, più facile da leggere.

Una lista contenuta in una classe viene scritta, come accade per badges. Una lista da sola no: JsonUtility richiede un oggetto al livello superiore, quindi JsonUtility.ToJson(scores) per un List<int> con 10, 20 e 30 restituisce {}. Inserisci la lista in una classe e converti quella; un ScoreBoard che contiene la stessa lista viene scritto come {"scores":[10,20,30]}:

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

Sfida

Medio

Condividi la squadra come codice JSON.

  1. In CharacterBuild, rendi Strength un campo, public int strength;, e contrassegna agility con [SerializeField].
  2. Sotto, scrivi una classe Team [System.Serializable] con public List<CharacterBuild> heroes;. In TeamCode, dichiara la lista come public Team team; e registra il suo JSON.
  3. LoadCode legge code in team e registra Loaded 3 heroes.

Premi «Gioca» e poi premi Spazio: la squadra viene mostrata come JSON. Poi premi «Verifica».

Provalo tu

using System.Collections.Generic;
using UnityEngine;

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

Tutte le lezioni di Architettura dei giochi in Unity

Esercitati da solo: Playground Unity