게임개발/게임 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);
}
}