-
04/23 유니티 스크롤 뷰 + 데이터 연동 연습유니티 2021. 4. 23. 18:10
데이터
Resources/Datas0423
mission_data.json0.00MBreward_data.json0.00MB사용자디렉토리/AppData/LocalLow/회사이름/프로덕트이름
코드
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