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;
}Sfida
MedioCondividi la squadra come codice JSON.
- In
CharacterBuild, rendiStrengthun campo,public int strength;, e contrassegnaagilitycon[SerializeField]. - Sotto, scrivi una classe
Team[System.Serializable]conpublic List<CharacterBuild> heroes;. InTeamCode, dichiara la lista comepublic Team team;e registra il suo JSON. LoadCodeleggecodeinteame registraLoaded 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
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRipasso: torretta modulareRipasso: cannone doppio4Dati serializzati
Classi serializzabiliElenchi nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottinoRiepilogo: tira il bottino2Interfacce in Unity
IDamageableInterfacce e TryGetComponentGetComponentsRiepilogo: tasto InteragisciRiepilogo: il più vicino a portata5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseSalva il ventoOnde come datiRiepilogo: database degli oggettiRiepilogo: comprare dal negozioEsercitati da solo: Playground Unity