스토리지

[4.23] Json데이터에 기반한 ScrollView 본문

Unity/유니티 기본

[4.23] Json데이터에 기반한 ScrollView

ljw4104 2021. 4. 23. 12:57

결과물

 

DataManager.cs

// 제너릭 쓰는 법을 한번 알아봐야됨. 이대로는 코드가 너무 더럽다.

using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;

public class DataMgr
{
    public Dictionary<int, MissionData> arrMission;
    public Dictionary<int, RewardDATA> arrReward;
    public Dictionary<int, MissionInfo> arrInfo;
    public Dictionary<int, ThumbData> arrThumb;

    private static DataMgr instance;
    public static DataMgr Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new DataMgr();
            }
            return instance;
        }
    }

    private DataMgr()
    {
    }

    public void GetDatas()
    {
        var path = Resources.Load<TextAsset>("mission_data");
        string data = path.text;
        MissionData[] arr1 = JsonConvert.DeserializeObject<MissionData[]>(data);
        this.arrMission = arr1.ToDictionary(x => x.missionID);

        path = Resources.Load<TextAsset>("reward_data");
        data = path.text;
        RewardDATA[] arr2 = JsonConvert.DeserializeObject<RewardDATA[]>(data);
        this.arrReward = arr2.ToDictionary(x => x.rewardID);

        path = Resources.Load<TextAsset>("mission_info");
        data = path.text;
        MissionInfo[] arr3 = JsonConvert.DeserializeObject<MissionInfo[]>(data);
        this.arrInfo = arr3.ToDictionary(x => x.missionID);

        path = Resources.Load<TextAsset>("thumb_data");
        data = path.text;
        ThumbData[] arr4 = JsonConvert.DeserializeObject<ThumbData[]>(data);
        this.arrThumb = arr4.ToDictionary(x => x.thumbNum);
    }
}

 

UIPopupMission.cs

//Init 할 것이 많아서 인자가 좀 길다.

using UnityEngine;
using UnityEngine.U2D;

public class UIPopupMission : MonoBehaviour
{
    public Transform position;
    public GameObject prefab;
    public SpriteAtlas atlas;
    // Start is called before the first frame update
    void Start()
    {
        this.Init();
    }

    private void Init()
    {
        DataMgr.Instance.GetDatas();
        foreach (var item in DataMgr.Instance.arrMission)
        {
            MissionData mission = item.Value;
            var go = Instantiate(this.prefab, this.position);
            go.GetComponent<UIMissionItem>().Init(
                this.atlas.GetSprite(DataMgr.Instance.arrThumb[mission.thumbNum].path), mission.desc, DataMgr.Instance.arrInfo[mission.missionID].count, mission.star,
                this.atlas.GetSprite(DataMgr.Instance.arrThumb[DataMgr.Instance.arrReward[mission.rewardID].thumbNum].path),
                DataMgr.Instance.arrReward[mission.rewardID].num, DataMgr.Instance.arrInfo[mission.missionID].isClear);
        }
    }
}

 

프리팹

  - 퀘스트 하나당 프리팹 하나이다.

  • Stars : 별이 들어갈 장소들의 집합
  • Mission Status : 미션이 Doing 상태, Done 상태, Complete 상태에 따른 다른 버튼들의 집합
using UnityEngine;
using UnityEngine.UI;

public class UIMissionItem : MonoBehaviour
{
    public Image imgItem;
    public Text missionDesc;
    public Slider slider;
    public Image[] stars;
    public Sprite starSprite;

    public Image rewardThumb;
    public Text rewardNum;

    public Button[] missionStatus;

    public void Init(Sprite sprite, string desc, int degree, int starNum, Sprite rewardSprite, int rewardNum, int status)
    {
        this.imgItem.sprite = sprite;
        this.missionDesc.text = desc;
        slider.value = (float)degree / 100f;

        for (int i = 0; i < starNum; i++)
        {
            stars[i].sprite = this.starSprite;
        }

        this.rewardThumb.sprite = rewardSprite;
        this.rewardNum.text = rewardNum.ToString();
        if (rewardSprite.name.Contains("mission_btn_icon_coin"))
        {
            this.rewardNum.color = Color.yellow;
        }
        else if (rewardSprite.name.Contains("mission_btn_icon_gem"))
        {
            this.rewardNum.color = new Color(67f / 255f, 136f / 255f, 215f / 255f);
        }

        if (status == 0)
        {
            this.missionStatus[0].gameObject.SetActive(true);
            this.missionStatus[1].gameObject.SetActive(false);
            this.missionStatus[2].gameObject.SetActive(false);
        }
        else if (status == 1)
        {
            this.missionStatus[0].gameObject.SetActive(false);
            this.missionStatus[2].gameObject.SetActive(false);
            this.missionStatus[1].gameObject.SetActive(true);
        }
        else
        {
            this.missionStatus[0].gameObject.SetActive(false);
            this.missionStatus[1].gameObject.SetActive(false);
            this.missionStatus[2].gameObject.SetActive(true);
        }
    }
}

'Unity > 유니티 기본' 카테고리의 다른 글

[4.26] NGUI  (0) 2021.04.26
[4.23] 가로로 드래그되는 ScrollView  (0) 2021.04.23
[4.23] ScrollView  (0) 2021.04.23
[4.22] UI Animation  (0) 2021.04.22
[4.21] Json파일에서 읽은 미션을 스테이지에 적용  (0) 2021.04.21
Comments