Data Manager

개발조하·2024년 1월 2일
0

Unity

목록 보기
22/30
post-thumbnail

1. 데이터 관리

1.1 DataManager.cs

  • Managers.cs 에 추가
    ㄴ data는 항상 들고있는 것이기 때문에 Clear()는 따로 해주지 않는다.

1.2 .json파일 만들고 Load()

Assets - Resources - Data 폴더 생성

  • txt 파일 생성 -> .json으로 변경
  • json 작성 문법
    [ ] : List
    { } : Struct

public class DataManager 
{
    public void Init()
    {
        TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/StatData");
        Debug.Log(textAsset.text);
    }
}

1.3 Serializable_스크립트 직렬화

  • break point를 잡고 디버깅해보면, FromJson만으로 data에 StatData.json의 데이터 값들이 채워졌다!

📌 주의사항
1. 직렬화할 때 public으로 해줘야 한다. private으로 하고 싶다면 [SerializeField]사용하기

public class Stat
{
    public int level;
    public int hp;
    public int attack;
}
  1. json 파일에 작성한 것과 변수명이 동일해야 한다!
  2. 자료형 int, string 등 data의 타입을 맞춰줘야 한다.

1.4 Dictionary에 데이터 담기

2. 코드 정리

2.1 Dictionary로 만들어주는 MakeDict() 생성

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();
}

2.2 Json 읽어오기 LoadJson()

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);
    }
}

2.3 Data.Contents.cs 별도로 분리

필요한 Data가 많아지면, 그 데이터들을 DataManager에 작성하기에는 무리가 있다.
Data만 따로 정리하는 파일을 만들어둔다.
ㄴ Data.Contents라고 파일명을 만들면 클래스명에 '.'을 사용할 수 없다는 오류메시지가 뜨는데, 어차피 클래스는 사용하지 않고 data만 정리할거라 무시해도 된다.

📄참고자료
[인프런] c#과 유니티로 만드는 MMORPG 게임 개발 시리즈_3. 유니티 엔진
Unity documentation_Serializable

profile
Unity 개발자 취준생의 개발로그, Slow and steady wins the race !

0개의 댓글