JsonUtility
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 30번째.
JSON은 객체의 값을 담는 텍스트이므로 로그로 기록하거나 전송하거나 파일에 쓸 수 있습니다. JsonUtility.ToJson(obj)는 객체를 JSON으로 바꾸고, JsonUtility.FromJson<T>(json)는 그 JSON으로 새로운 T를 만듭니다. JsonUtility는 Inspector와 같은 규칙을 따르므로 [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와 Rank는 빠져 있습니다. JsonUtility는 public 필드와 [SerializeField]로 표시된 private 필드만 기록합니다. 그 외에는 기록하지 않습니다. 프로퍼티, static 필드, 일반 private 필드는 기록하지 않습니다. Dictionary 필드도 건너뛰며, 클래스가 [System.Serializable]이 아닌 필드도 마찬가지입니다. Inspector에서도 이러한 필드는 제외됩니다. JsonUtility.ToJson(obj, true)는 같은 JSON을 여러 줄에 걸쳐 기록하여 읽기 쉽게 만듭니다.
클래스 안의 리스트는 badges처럼 기록됩니다. 리스트만 단독으로는 기록되지 않습니다. JsonUtility는 최상위에 객체가 필요하므로, 10, 20, 30이 들어 있는 List<int>에 대해 JsonUtility.ToJson(scores)를 호출하면 {}를 반환합니다. 리스트를 클래스에 넣고 변환하세요. 같은 리스트를 담고 있는 ScoreBoard는 {"scores":[10,20,30]}로 기록됩니다:
[System.Serializable]
public class ScoreBoard
{
public List<int> scores;
}챌린지
중급팀을 JSON 코드로 공유하세요.
CharacterBuild에서Strength를 필드public int strength;로 만들고,agility를[SerializeField]로 표시하세요.- 그 아래에
[System.Serializable]클래스Team을 작성하고,public List<CharacterBuild> heroes;를 추가하세요.TeamCode에서 목록을public Team team;으로 만들고 JSON을 로그에 출력하세요. LoadCode는code를team에 읽어 들이고Loaded 3 heroes를 로그에 출력합니다.
‘플레이’를 누르고 Space 키를 누르세요. 팀이 JSON으로 표시됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class CharacterBuild
{
public string hero;
public int Strength { get; set; }
private int agility;
}
Unity 게임 아키텍처의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드