Assets - Resources - Data 폴더 생성
- json 작성 문법
[ ] : List
{ } : Struct
public class DataManager
{
public void Init()
{
TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/StatData");
Debug.Log(textAsset.text);
}
}
📌 주의사항
1. 직렬화할 때 public으로 해줘야 한다. private으로 하고 싶다면 [SerializeField]사용하기public class Stat { public int level; public int hp; public int attack; }
- json 파일에 작성한 것과 변수명이 동일해야 한다!
- 자료형 int, string 등 data의 타입을 맞춰줘야 한다.
public class StatData : ILoader<int, Stat>
{
public List<Stat> stats = new List<Stat>();
public Dictionary<int, Stat> MakeDict()
{
Dictionary<int, Stat> dict = new Dictionary<int, Stat>();
foreach (Stat stat in stats)
{
dict.Add(stat.level, stat);
}
return dict;
}
}
public interface ILoader<Key, Value>
{
Dictionary<Key, Value> MakeDict();
}
public class DataManager
{
public Dictionary<int, Stat> StatDict { get; private set; } = new Dictionary<int, Stat>();
public void Init()
{
StatDict = LoadJson<StatData, int, Stat>("StatData").MakeDict();
}
Loader LoadJson<Loader, Key, Value>(string path) where Loader : ILoader<Key, Value>
{
TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/{path}");
return JsonUtility.FromJson<Loader>(textAsset.text);
}
}
필요한 Data가 많아지면, 그 데이터들을 DataManager에 작성하기에는 무리가 있다.
Data만 따로 정리하는 파일을 만들어둔다.
ㄴ Data.Contents라고 파일명을 만들면 클래스명에 '.'을 사용할 수 없다는 오류메시지가 뜨는데, 어차피 클래스는 사용하지 않고 data만 정리할거라 무시해도 된다.
📄참고자료
[인프런] c#과 유니티로 만드는 MMORPG 게임 개발 시리즈_3. 유니티 엔진
Unity documentation_Serializable