JsonUtility
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 24번째.
JSON은 객체의 값을 담는 텍스트이므로 로그에 기록하거나, 전송하거나, 파일에 쓸 수 있습니다. JsonUtility.ToJson(obj)는 객체를 JSON으로 변환하고 JsonUtility.FromJson<T>(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;
}챌린지
중급팀 빌더를 사용하면 플레이어가 팀을 코드로 공유할 수 있습니다. Space를 누르면 팀이 JSON으로 로그되어야 하고, LoadCode(string code)는 코드를 다시 읽어야 합니다. 지금은 Space를 누르면 Team code: {}가 로그되고, 영웅의 strength와 agility는 Inspector에도 표시되지 않습니다.
CharacterBuild에서 strength와 agility를 저장되는 값으로 만드세요.Strength속성을 공개 필드strength로 바꾸고,agility는 비공개로 유지하되[SerializeField]로 표시하세요.- 목록만 있으면
{}로 기록됩니다. CharacterBuild 아래에 공개 필드heroes하나를 가지며, 그 유형은List<CharacterBuild>인[System.Serializable]클래스Team을 작성하세요.TeamCode에서heroes목록을 Team 유형의 공개 필드team으로 바꾸고,Team code:뒤에team의 JSON을 로그하세요. LoadCode에서 JsonUtility를 사용해 코드를team에 읽어 들이고, 포함된 영웅 수를Loaded 3 heroes와 같이 로그하세요.
Inspector에서 team에 Knight(힘 8, 민첩성 3)와 Archer(힘 4, 민첩성 9)를 입력합니다. Play를 누르고 Space를 누른 다음, Console에서 코드를 확인하고 Check를 누르세요.
직접 해보기
using UnityEngine;
[System.Serializable]
public class CharacterBuild
{
public string hero;
public int Strength { get; set; }
private int agility;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.