JsonUtility
Parte da seção Arquitetura de Jogos no Unity do Journey de Unity da Coddy. Lição 30 de 64.
JSON é um texto que contém os valores de um objeto, para que ele possa ser registrado em log, enviado ou gravado em um arquivo. JsonUtility.ToJson(obj) transforma um objeto em JSON e JsonUtility.FromJson<T>(json) cria um novo T a partir dele. JsonUtility segue as mesmas regras do Inspector, então funciona com uma 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 estão ausentes. JsonUtility grava campos públicos e campos privados marcados com [SerializeField], e nada mais: nenhuma propriedade, nenhum campo estático, nenhum campo privado comum. Um campo Dictionary também é ignorado, assim como um campo cuja classe não seja [System.Serializable]. Esses também são os campos que o Inspector omite. JsonUtility.ToJson(obj, true) grava o mesmo JSON distribuído em várias linhas, mais fácil de ler.
Uma lista dentro de uma classe é gravada, como acontece com badges. Uma lista sozinha não é: JsonUtility precisa de um objeto no nível superior, então JsonUtility.ToJson(scores) para um List<int> com 10, 20 e 30 retorna {}. Coloque a lista em uma classe e converta essa classe; um ScoreBoard que contém a mesma lista é gravado como {"scores":[10,20,30]}:
[System.Serializable]
public class ScoreBoard
{
public List<int> scores;
}Desafio
MédioCompartilhe a equipe como um código JSON.
- Em
CharacterBuild, torneStrengthum campo,public int strength;, e marqueagilitycom[SerializeField]. - Abaixo dele, escreva uma classe
Teamcom[System.Serializable]epublic List<CharacterBuild> heroes;. EmTeamCode, torne a listapublic Team team;e registre seu JSON. LoadCodelêcodeemteame registraLoaded 3 heroes.
Pressione “Jogar” e pressione Espaço: a equipe será exibida como JSON. Em seguida, clique em “Verificar”.
Experimente você mesmo
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class CharacterBuild
{
public string hero;
public int Strength { get; set; }
private int agility;
}
Todas as lições de Arquitetura de Jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script base de inimigoComponentes abstratosComponentes trabalhando juntosRevisão: torre modularRevisão: canhão duplo4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de LootRevisão: Sorteie o Loot2Interfaces no Unity
IDamageableInterfaces e TryGetComponentGetComponentsRevisão: tecla de interaçãoRevisão: mais próximo ao alcance5ScriptableObjects
Ativos de DadosAtributos da ArmaConfigurações CompartilhadasSalve o VentoOndas como DadosRevisão: Banco de ItensRevisão: Comprar na LojaPratique por conta própria: Playground de Unity