Unity/UIUX프로그래밍

0420_아이템 데이터 // 데이터매니저 싱글턴 사용하기

minquu 2021. 4. 20. 16:05
반응형

0. json 파일을 만들어준다.

 

 

 

 

 

 

1. 뉴톤 제이슨을 유니티로 임폴트한다.

 

2.맵핑해줄 ItemData 스크립터를 생성해준다.

 

3. ItemData를 수정해줍니다.

 

 

4. 아이템을 관리할 DataManager (싱글턴으로) 스크립터를 만들어 준다.

그리고 딕셔너리 변수를 선언해줍니다.

 

 

5. UIInventory 에서 기존에는 스프라이트 네임을 직접 넣었지만, 싱글턴을 인스턴스해서 딕셔너리로 

id로 값을 찾아서 값.sprite_name (ItemData에 맵핑된)값을 찾아서 경로로 넣습니다

 

 

 var data = DataManager.GetInstance().dicItemDatas[id];

id 값을 입력해서, DataManager.GetInstance // 클래스 내부로 접근 가능

 

        string spName = data.sprite_name;

id를 키로 받아서, data (값)의 sptrite_name에 접근한다.

 

6.DataManager를 활용해서 데이터를 로드하기 

 

먼저 유니티에서 리소스(스펠링 꼭 지켜야함!) 폴더를 만들어 주고, 안에 Datas 폴더를 하나 더 만들어준다.

안에 만든 json 파일을 넣어준다.

 

DataManager.GetInstance().LoadDatas();

Start() 메서드에서

 

DataManager  안에 있는 LoadDatas 메서드의 접근를해서 인스턴스를 해준다.

 

6-1. 데이터 로드 // 데이터 매니져에서 싱글턴으로 로드 후 // 값 출력해보기

 

 

var json = Resources.Load<TextAsset>("Datas/itemData").text;

 

Resources.Load<TextAsset> // TextAsset 형식으로 불러온다.  

 

 

테스트를 하기 위해서 먼저 로그값을 출력을 해본다.

 

 var arrItemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);

역직렬화를 해준다.  ItemData[] 배열로 받는다. 

 

 foreach (var data in arrItemDatas) {
            Debug.LogFormat("{0}, {1}, {2}", data.id, data.name, data.desc);
        }

 

foreach 문을 돌려서 data에 역직렬화된 정보를 넣어주고, 테스트 출력을 해본다.

 

잘 출력이 되는 걸 확인 할 수 있다. 

 

 

★6-2. 데이터매니저의 dicItemDatas 딕셔너리에 id를 키값으로 넣고 나머지 값을 넣어준다.

 

        this.dicItemDatas = arrItemDatas.ToDictionary(x => x.id);

id를 키값으로 정보값을 넣어줄수 있다.

 

 

7. LoadDatas() 메서드가 잘 작동하는 출력을 해본다.

 

 DataManager.GetInstance().LoadDatas();

LoadDatas 를 실행해서 먼저 직렬화와 딕셔러니에 넣어준다.

 

 var data = DataManager.GetInstance().dicItemDatas[100];

DataManager.GetInstance() 의 딕셔너리에 접근을 하여 ID 값 (키)로 data를 찾아준다.

 

        Debug.LogFormat("{0}, {1}, {2}", data.id, data.name, data.desc);

 

출력을 해본다 .

 

잘 출력이 되는걸 알 수 있다. 

 

 

8. AddItem 스크립터를 수정해준다.

이제 DataManager를 활용하여서 데이트를 불러오기가 가능함

키 = id

값 = id로 접근해서 가져옴

 

 

var data = DataManager.GetInstance().dicItemDatas[id];

 

 

id 키로 data에 딕셔러리의 값을 가져 올 수 있다.

 

 

        uiItem.btn.onClick.AddListener(() =>
        {
            Debug.LogFormat("{0} : {1}", data.id, data.name);
        });

 

클릭을 하게 되면 출력하게 한다.

 

string spName = data.sprite_name;
        Sprite sp = atlas.GetSprite(spName);

 

spName 를 data.sprite_name; 에서 가져오고

atlas의 겟 스프레이의 string 값을 넣어주면 100 id 의  스프라이트 값이 들어가게된다.

 

----

 

 

 

데이터가 잘 들어와서 클릭할때 출력이 되는걸 확인 할  수 있다.

반응형

'Unity > UIUX프로그래밍' 카테고리의 다른 글

0421_ UIStage  (0) 2021.04.21
0420_아이템 먹기 + 인벤토리 연동  (0) 2021.04.20
0420 _ 인벤토리 만들기  (2) 2021.04.20
0419_UI MyInfo 만들기  (0) 2021.04.19
0419_ UGUI sign Up UI 만들기  (0) 2021.04.19