ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 04/23 유니티 스크롤 뷰 + 데이터 연동 연습
    유니티 2021. 4. 23. 18:10

     

    데이터

    Resources/Datas0423

    mission_data.json
    0.00MB
    reward_data.json
    0.00MB

    사용자디렉토리/AppData/LocalLow/회사이름/프로덕트이름

    mission_info.json
    0.00MB

     

     

    코드

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.U2D;
    using UnityEngine.UI;
    
    namespace Assets.Scripts.Datas0423
    {
        public class UIListItem : MonoBehaviour
        {
            public enum eState
            {
                DONE, COMPLETE, DOING
            }
            public enum eGauge
            {
                FRONT, COMPLETE
            }
    
            public Image img;
            public SpriteAtlas atlas;
            public Text txtName;
            public GameObject[] reward;
            public GameObject[] state;
            public GameObject[] gauge;
            public GameObject[] stars;
            private MissionInfo info;
            public void Init(MissionInfo info)
            {
                this.info = info;
                var data = DataManager.GetInstance().dicMissionDatas[this.info.id];
                this.txtName.text = string.Format(data.name, data.goal);
                this.img.sprite = atlas.GetSprite(data.sprite_name);
    
                if (DataManager.GetInstance().dicRewardDatas[data.reward_id].name == "하트")
                {
                    reward[0].SetActive(true);
                    reward[0].GetComponentInChildren<Text>().text = data.reward_amount.ToString();
                }
    
                else if(DataManager.GetInstance().dicRewardDatas[data.reward_id].name == "다이아몬드")
                {
                    reward[1].SetActive(true);
                    reward[1].GetComponentInChildren<Text>().text = data.reward_amount.ToString();
                }
                else
                {
                    reward[2].SetActive(true);
                    reward[2].GetComponentInChildren<Text>().text = data.reward_amount.ToString();
                }
    
                if((eState)info.state == eState.DONE)
                {
                    state[0].SetActive(true);
                    
                }
                else if((eState)info.state == eState.COMPLETE)
                {
                    state[1].SetActive(true);
                    gauge[(int)eGauge.COMPLETE].SetActive(true);
                }
                else
                {
                    state[2].SetActive(true);
                    gauge[(int)eGauge.FRONT].GetComponent<Image>().fillAmount = info.count/100f;
                }
    
                for(int i = 0; i<info.star; i++)
                {
                    stars[i].SetActive(true);
                }
    
                
            }
        }
    }
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace Assets.Scripts.Datas0423
    {
        public class ScrollView : MonoBehaviour
        {
            public GameObject listItemPrefab;
            public Transform contents;
            // Start is called before the first frame update
            void Start()
            {
                DataManager.GetInstance().LoadDatas();
                InfoManager.GetInstance().LoadInfo();
    
                foreach (var pair in DataManager.GetInstance().dicMissionDatas)
                {
                    var go = Instantiate<GameObject>(this.listItemPrefab, contents);
                    var listItem = go.GetComponent<UIListItem>();
                    var data = pair.Value;
                    var missionName = string.Format(data.name, data.goal);
    
                    var info = new MissionInfo(data.id, InfoManager.GetInstance().dicMissionInfo[data.id].count
                        , InfoManager.GetInstance().dicMissionInfo[data.id].star, InfoManager.GetInstance().dicMissionInfo[data.id].state);
                    listItem.Init(info);
                }
            }
    
            // Update is called once per frame
            void Update()
            {
    
            }
        }
    }

     

     

     

    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using UnityEngine;
    
    namespace Assets.Scripts.Datas0423
    {
        public class DataManager
        {
            private static DataManager instance;
            public Dictionary<int, MissionData> dicMissionDatas;
            public Dictionary<int, RewardData> dicRewardDatas;
    
            private DataManager()
            {
    
            }
            public static DataManager GetInstance()
            {
                if (DataManager.instance == null)
                {
                    DataManager.instance = new DataManager();
                }
                return DataManager.instance;
            }
            public void LoadDatas()
            {
                var ta = Resources.Load<TextAsset>("Datas0423/mission_data");
                var missionJson = ta.text;
                this.dicMissionDatas = JsonConvert.DeserializeObject<MissionData[]>(missionJson).ToDictionary(x => x.id);
    
                ta = Resources.Load<TextAsset>("Datas0423/reward_data");
                var rewardJson = ta.text;
                this.dicRewardDatas = JsonConvert.DeserializeObject<RewardData[]>(rewardJson).ToDictionary(x => x.id);
    
                if (File.Exists(Application.persistentDataPath + "reward_info"))
                {
    
                }
                    
            }
        }
    }
    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using UnityEngine;
    
    namespace Assets.Scripts.Datas0423
    {
        public class InfoManager
        {
            private static InfoManager instance;
    
            public Dictionary<int, MissionInfo> dicMissionInfo;
    
            public static InfoManager GetInstance()
            {
                if(InfoManager.instance == null)
                {
                    instance = new InfoManager();
                }
                return instance;
            }
    
            public void LoadInfo()
            {
    
                var txt = File.ReadAllText(Application.persistentDataPath + "/mission_info.json");
                var mi = JsonConvert.DeserializeObject<MissionInfo[]>(txt);
                this.dicMissionInfo = mi.ToDictionary(x => x.id);
    
            }
        }
    
    }
    

     

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace Assets.Scripts.Datas0423
    {
        public class RewardData
        {
            public int id;
            public string name;
        }
    }
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace Assets.Scripts.Datas0423
    {
        public class MissionInfo
        {
            public int id;
            public int count;
            public int star;
            public int state;
    
            public MissionInfo(int id, int count, int star, int state)
            {
                this.id = id;
                this.count = count;
                this.star = star;
                this.state = state;
            }
        }
    
    }
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace Assets.Scripts.Datas0423
    {
        public class MissionData
        {
            public int id;
            public string name;
            public int goal;
            public int reward_id;
            public int reward_amount;
            public string sprite_name;
        }
    
    }
    

    '유니티' 카테고리의 다른 글

    04/26 유니티 NGUI slider 사용 연습  (0) 2021.04.26
    04/26 유니티 NGUI 버튼, 입력창 연습  (0) 2021.04.26
    04/23 유니티 UI 스크롤 뷰 만들기  (0) 2021.04.23
    04/22 유니티 UIAnimation  (0) 2021.04.22
    04/22 UIAnimation R&D  (0) 2021.04.22
Designed by Tistory.