inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)

DataManager을 훑어보던 도중에 궁금한점이 있습니다.

347

고만재

작성한 질문수 4

0

public interface ILoader<Key, Value>
{
    Dictionary<Key, Value> MakeDict();
}

public class DataManager
{
    public Dictionary<int, Data.TestData> TestDic { get; private set; } = new Dictionary<int, Data.TestData>();

    public void Init()
    {
        TestDic = LoadJson<Data.TestDataLoader, int, Data.TestData>("TestData").MakeDict();
    }

    private Loader LoadJson<Loader, Key, Value>(string path) where Loader : ILoader<Key, Value>
    {
        TextAsset textAsset = Managers.Resource.Load<TextAsset>(path);
        return JsonConvert.DeserializeObject<Loader>(textAsset.text);
    }
}

 

namespace Data
{
    #region TestData
...
    [Serializable]
    public class TestDataLoader : ILoader<int, TestData>
    {
        public List<TestData> tests = new List<TestData>();

        public Dictionary<int, TestData> MakeDict()
        {
            Dictionary<int, TestData> dict = new Dictionary<int, TestData>();
            foreach (TestData testData in tests)
                dict.Add(testData.Level, testData);

            return dict;
        }
    }
...
    #endregion

}
TestDic = LoadJson<Data.TestDataLoader, int, Data.TestData>("TestData").MakeDict();

DataManager의 위 라인을 실행할 때

TestDataLoader 의 tests 리스트에 값을 담거나 하는 명시된 부분이 없는것 같은데 어떻게 MakeDict(); 가정상적으로 실행될 수 있는것 인가요?

신기해서 이유를 알고싶어 질문 드립니다.

[Serializable]를 명시하면

리턴되는 JsonConvert.DeserializeObject<Loader>(textAsset.text); 의 값이 알맞은 변수에
자동으로 담기는 것인가요?

 

C# unity MMORPG

답변 2

1

Rookiss

[Serializable]은 직렬화 가능하다는 힌트를 남기는 것이고,
JsonConvert가 내부적으로는 Reflection을 이용해 class 구조를 파악하고
그것에 맞게 json 파싱을 시도합니다.

TestDataLoader에는 public List가 있을 것이니 List를 파싱하고 (json 기준으로는 [ ] 이 리스트],
그 List 안에는 TestData가 있는데 이 또한 직렬화 가능한 class이기 때문에
그에 맞게 파싱을 하게 됩니다.

이 모든 것들은 Reflection이라는 우월한 문법 덕분에 가능한 것이죠

0

고만재

감사합니다.

0

명탐정우샷미

아 이거만 거의 한시간 찾아봤었네요. 이게 어떻게 가능하지? 하면서요..... 이해라기 보다는 그냥 그렇구나 식으로 알아가야겠네요......

수업질문은 아닌데요^^

0

59

1

UI 자동화 관련 문의입니다.

0

107

1

9주차 npc 생성 안되는 이슈. Custom Tile 깨짐

0

107

1

44강 Stage 분할 Cannot Find 에러 관련

0

80

1

8주차 ExtralCell 추가됐을 때 서로 공격 못하는 상황 공유드립니다.

0

120

1

rider에서 new editor config 설정

0

172

1

Reward csv 파일이 없고 EquipmentChart는 열이름 문제로 업로드가 안됩니다.

1

154

2

강의 영상코드랑 강의 자료 코드가 다릅니다.

0

159

2

M1의 어드레서블 리소스 관리 방식에 대하여 질문있습니다.

0

134

1

M1의 리소스매니져 클리어 타이밍에 대해 여쭤보고싶습니다.

0

94

1

C1 일정은 어떻게 되는건가요?

0

218

3

게임 클라이언트 개발에서 테스트 코드 작성이 도움이 될까요?

0

185

1

Stateless서버에서의 유저인스턴스

0

176

2

섹션 4(SaveData, HeroList, ItemData, ItemHolder)에 일부 항목들에 대한 재생오류 해결 부탁드립니다.

0

166

1

첫 강의 manager 가 재생이 안됩니다.

0

302

5

T2는 어떻게된걸까요?

0

434

1

9주차 강의 'Stage 분할' 이 로딩만 뜨고 재생되지 않습니다

0

149

1

강의 완료 시기

0

305

1

다운 받은 맵 프리팹을 오픈해보니 핑크색으로 보이네요

0

567

3

typeof 와 GetType

0

227

1

섹션2 - Tilemap 강의에서 BaseMap 프리팹에 Front_01 용도가 궁금합니다.

0

152

1

패킷 형식 질문입니다.

0

148

1

어드레서블 Sprite 관련해서 질문이있습니다.

0

596

1

Data #2 까지 들었는데 빌드를 해보고싶은데, 어느 강의에서 확인할 수 있나요?

0

301

2