JsonUtility
Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 30 z 64.
JSON to tekst zawierający wartości obiektu, dzięki czemu można go zalogować, wysłać lub zapisać do pliku. JsonUtility.ToJson(obj) zamienia obiekt na JSON, a JsonUtility.FromJson<T>(json) tworzy na jego podstawie nowy obiekt T. JsonUtility stosuje te same zasady co Inspektor, dlatego działa z klasą [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 i Rank nie występują w JSON-ie. JsonUtility zapisuje publiczne pola oraz prywatne pola oznaczone atrybutem [SerializeField] i nic więcej: żadnych właściwości, pól statycznych ani zwykłych pól prywatnych. Pomija też pole typu Dictionary oraz pole, którego klasa nie jest oznaczona atrybutem [System.Serializable]. Są to również pola pomijane przez Inspektora. JsonUtility.ToJson(obj, true) zapisuje ten sam JSON w kilku wierszach, dzięki czemu łatwiej go odczytać.
Lista wewnątrz klasy jest zapisywana, tak jak badges. Sama lista nie jest zapisywana: JsonUtility wymaga obiektu na najwyższym poziomie, dlatego JsonUtility.ToJson(scores) dla obiektu List<int> zawierającego 10, 20 i 30 zwraca {}. Umieść listę w klasie i przekonwertuj tę klasę; ScoreBoard zawierający tę samą listę zostanie zapisany jako {"scores":[10,20,30]}:
[System.Serializable]
public class ScoreBoard
{
public List<int> scores;
}Wyzwanie
ŚredniUdostępnij drużynę jako kod JSON.
- W
CharacterBuildutwórz poleStrength,public int strength;, aagilityoznacz jako[SerializeField]. - Poniżej napisz klasę
Teamz atrybutem[System.Serializable]i polempublic List<CharacterBuild> heroes;. WTeamCodeutwórz listępublic Team team;i zapisuj jej dane w formacie JSON. LoadCodewczytujecodedoteami zapisujeLoaded 3 heroesw logu.
Naciśnij „Graj” i naciśnij spację: drużyna zostanie wyświetlona w formacie JSON. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class CharacterBuild
{
public string hero;
public int Strength { get; set; }
private int agility;
}
Wszystkie lekcje w sekcji Architektura gier w Unity
1Komponenty, nie hierarchie
Małe komponentyBazowy skrypt przeciwnikaKomponenty abstrakcyjneWspółpracujące komponentyPowtórka: modułowa wieżyczkaPowtórka: podwójne działo4Dane serializowane
Klasy serializowalneListy w InspectorzeEnumy w InspectorzePodsumowanie: tabela łupówPodsumowanie: losowanie łupów2Interfejsy w Unity
IDamageableInterfejsy i TryGetComponentGetComponentsPowtórka: klawisz interakcjiPowtórka: najbliższy w zasięgu5ScriptableObjects
Zasoby danychStatystyki broniWspółdzielone ustawieniaOcal wiatrFale jako danePowtórka: Baza przedmiotówPowtórka: Kupowanie w sklepie8Kod wielokrotnego użytku
Metody rozszerzająceGeneryczny singletonGeneryczne metody pomocniczePodsumowanie: FindNearestPoćwicz samodzielnie: Edytor online Unity