Unity/UIUX프로그래밍

0427 _ NGUI Mission 만들기 데이터 연동

minquu 2021. 4. 27. 18:15
반응형

0. 먼저 스크롤 뷰를 만들어 주고

 

1. 거기에 들어가는 미션를 만들어준다 (NGUI로 만들어줌)

 

2. 다 만들면 프리팹으로 전환해놓기

 

3.데이터를 불러올 스크립터와 맵핑할 스크립터, 아이템(미션)이 초기화(생길때)값을 넣어줄 스크립터를 만든다.

 

4.데이터 불러오고, 초기화로 값 넘겨주고, 아이템에서 퍼블릭으로 각각 스프라이트 등등을 받아서

그 값을 바로 대입해서 바꿔준다.

 

 

완성된 것

 

 

 

 

----

 

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


public class MissionTest : MonoBehaviour
{
    public GameObject prefab;
    public UIGrid grid;
    private Dictionary<int, MissionData> dicMissiondatas;
    // Start is called before the first frame update
    void Start()
    {
        var ta = Resources.Load<TextAsset>("mission_data");
        var json = ta.text;
        this.dicMissiondatas = JsonConvert.DeserializeObject<MissionData[]>(json).ToDictionary(x => x.id);
        foreach (var data in this.dicMissiondatas.Values) {
            var go = Instantiate<GameObject>(this.prefab, this.grid.transform);
            var mission = go.GetComponent<UIMission>();
            mission.Init(data);
        }
        grid.Reposition();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MissionData
{

    public int id;
    public string mission_name;
    public string mission_goal;
    public int mission_amount;
    public string sprite_icon;
    public bool is_doing;
    public string sprite_reward_icon;
    public int reward_amount;
    public int nowgoal_amount;
    public bool is_claim;
    public int energy_amount;
    public int goal_amount;
}

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIMission : MonoBehaviour
{

    public UISprite icon;
    public UILabel missionName;
    public UILabel missionGoal;
    private bool isDoing;
    public UISprite rewardIcon;
    private bool isClaim;
    public UILabel rewardAmount;
    public UILabel nowGoalAmount;
    public UILabel goalAmount;
    public UILabel energyAmount;
    public GameObject isDoingGo;
    public GameObject isClaimGo;
    public UISprite gauge;
    private MissionData data;
    public void Init(MissionData data) {
        this.data = data;
        this.isDoing = this.data.is_doing;
        this.isClaim = this.data.is_claim;
        this.icon.spriteName = this.data.sprite_icon;
        this.icon.MakePixelPerfect();
        this.missionName.text = this.data.mission_name;
        this.missionGoal.text = string.Format(this.data.mission_goal, this.data.mission_amount);
        this.rewardIcon.spriteName = this.data.sprite_reward_icon;
        this.rewardAmount.text = this.data.reward_amount.ToString();
        this.nowGoalAmount.text = this.data.nowgoal_amount.ToString();
        this.goalAmount.text = this.data.goal_amount.ToString();
        this.energyAmount.text = this.data.energy_amount.ToString();
        this.gauge.fillAmount = (float)this.data.nowgoal_amount / (float)this.data.goal_amount;
        Debug.Log(gauge.fillAmount);
    }

    public void Start()
    {
        if (isDoing == true)
        {
            this.isDoingGo.SetActive(true);
            this.isClaimGo.SetActive(false);
        }
        else {
            this.isDoingGo.SetActive(false);
            this.isClaimGo.SetActive(true);
        }
    }
}
반응형