게임개발/게임 UI.UX 프로그래밍

미션 페이지 만들기 2

pudding81 2024. 2. 16. 00:05

씬구조
프리팹 구조

 

 

1. UI 구성하기  - 데이터 구성요소에 맞춰 구성하기 

 

2. 스크롤뷰 만들기 

 

3. 스크립트 작성하기 

 

프리팹 만들기 

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

public class MissionView : MonoBehaviour
{
    //Doing    
    [SerializeField] private Image missionIcon;
    [SerializeField] private TMP_Text missionNameText;
    [SerializeField] private TMP_Text missionGoalDescText;
    [SerializeField] private TMP_Text progressText;
    [SerializeField] private Image rewardIcon;
    [SerializeField] private TMP_Text rewardAmountText;
    [SerializeField] private Slider slider;

    //Done
    [SerializeField] private Image doneRewardIcon;
    [SerializeField] private TMP_Text doneRewardAmountText;
    [SerializeField] private Button btnClaim;
    public Button BtnClaim => this.btnClaim;

    //Complete 
    [SerializeField] private Image completeTewardIcon;
    [SerializeField] private TMP_Text completeRewardAmountText;

    [SerializeField] private GameObject[] stageGos; // State 3개 배열

    //test ; 저장할 데이터에 반영
    [SerializeField] private Button btnTest;  //iconImage
    public Button BtnTest => this.btnTest;

    public enum State
    {
        None = -1, Doing = 0, Done, Complete
    }
    private State state = State.None;
    
    
    private MissionData data; 
    




    public void Init(MissionData data)//미션데이터에 연결 
    {
        this.data = data;
        this.UpdateUI();
    }



    public void UpdateUI() 
    {
        //UI에 표시 
        missionNameText.text = data.name;
        missionGoalDescText.text = string.Format("{0}", data.desc.Replace("{0}", data.goal.ToString()));

        MissionInfo info = InfoManager.Instance.GameInfo.missionInfos.Find(x => x.id == data.id);
       
       if (info != null)
        {
            Debug.LogFormat("저장데이터가 있다 : {0}, {1}", info.id, info.progress);
            progressText.text = string.Format("{0}/{1}", info.progress, data.goal);
            float progress = (float)info.progress / data.goal;
            Debug.LogFormat("=> {0}", progress);
            this.slider.value = progress;
            this.state = (State)info.state;
        }
        else
        {
            Debug.LogFormat("저장데이터가 없다");
            progressText.text = string.Format("0/{0}", data.goal);
            this.slider.value = 0;
            this.state = State.Doing;
        }

        Debug.LogFormat("id: {0}, amount: <color=cyan>{1}</color>", data.id, data.reward_amount);

        rewardAmountText.text = data.reward_amount.ToString();

        SpriteAtlas atlas = AtlasManager.Instance.GetAtlas(GameConstants.UIIconAtlas);



        missionIcon.sprite = atlas.GetSprite(data.sprite_name);
        missionIcon.SetNativeSize();

        //미션데이터의 아이디로 리워드데이터 연결 
        string str = DataManager.Instance.GetRewardData(data.reward_id).sprite_name;


        rewardIcon.sprite = atlas.GetSprite(str);
        rewardIcon.SetNativeSize();

       doneRewardIcon.sprite = atlas.GetSprite(str);
        doneRewardIcon.SetNativeSize();

       completeTewardIcon.sprite = atlas.GetSprite(str);
        completeTewardIcon.SetNativeSize();

        doneRewardAmountText.text = data.reward_amount.ToString();
        completeRewardAmountText.text = data.reward_amount.ToString();

        //전부 비활성화 
        foreach (GameObject go in stageGos) go.SetActive(false);

        //현재 상태 오브젝트 활성화 
        stageGos[(int)state].SetActive(true);
    }







}