MissionData
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MissionData
{
public int id;
public string name;
public string desc;
public int goal;
public string icon_name;
public int mission_icon_width;
public int mission_icon_height;
public int reward_amount;
public string reward_icon_name;
public int reward_icon_width;
public int reward_icon_height;
}
Test06AtlasManager
using System.Collections;
using System.Collections.Generic;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.U2D;
public class Test06AtlasManager : MonoBehaviour
{
public static Test06AtlasManager instance;
[SerializeField]
private string[] arrAtlasNames;
private Dictionary<string, SpriteAtlas> dicAtlas = new Dictionary<string, SpriteAtlas>();
private void Awake()
{
if(instance != null && instance != this)
{
Destroy(this.gameObject);
}
else
{
instance = this;
}
DontDestroyOnLoad(this.gameObject);
}
public void LoadAtlasData()
{
foreach (string atlasName in arrAtlasNames)
{
SpriteAtlas asset = Resources.Load<SpriteAtlas>(atlasName);
this.dicAtlas.Add(atlasName, asset);
}
Debug.LogFormat("{0}개의 Atlas를 로드했습니다.", this.dicAtlas.Count);
}
public SpriteAtlas GetAtlas(string atlasName)
{
return this.dicAtlas[atlasName];
}
}
Test06DataManager
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class Test06DataManager
{
public static readonly Test06DataManager instance = new Test06DataManager();
private Dictionary<int, MissionData> dicMissionDatas = new Dictionary<int, MissionData>();
public void LoadMissionData()
{
TextAsset asset = Resources.Load<TextAsset>("mission_data");
string json = asset.text;
MissionData[] missionDatas = JsonConvert.DeserializeObject<MissionData[]>(json);
this.dicMissionDatas = missionDatas.ToDictionary(x => x.id);
Debug.LogFormat("{0}개의 MissionData로드 완료", this.dicMissionDatas.Count);
}
public List<MissionData> GetMissionData()
{
return this.dicMissionDatas.Values.ToList();
}
}
Test06UIMissionCell
using System.Collections;
using System.Collections.Generic;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.U2D;
public class Test06UIMissionCell : MonoBehaviour
{
private enum eCellType
{
Doing, Done, Complete
}
//mission_icon
[SerializeField]
private Image missionIcon;
//txtMissionName
[SerializeField]
private TMP_Text txtMissionName;
//txtMissionDesc
[SerializeField]
private TMP_Text txtMissionDesc;
//complete_reward_icon
[SerializeField]
private Image completeRewardIcon;
//doing_reward_icon
[SerializeField]
private Image doingRewardIcon;
//doing_txtAmount
[SerializeField]
private TMP_Text doingTxtAmount;
//complete_txtAmount
[SerializeField]
private TMP_Text completeTxtAmount;
//Slider
public Slider slider;
//desc
public string desc;
private int id;
public void Init(MissionData data)
{
this.LoadData(data);
}
private void LoadData(MissionData data)
{
this.id = data.id;
//MissionName
this.txtMissionName.text = data.name;
//Collect {0} Golds란 말이지 Debug.LogFormat("Collect {0} Golds", data.goal); 을 하면 되는데
//Collect {0} Golds가 data.desc임
this.desc = string.Format(data.desc, data.goal);
//MissionDesc
this.txtMissionDesc.text = this.desc;
//doing_txtAmount
this.doingTxtAmount.text = data.reward_amount.ToString();
//complete_txtAmount
this.completeTxtAmount.text = data.reward_amount.ToString();
//SpriteAtlas 할당해주기
SpriteAtlas atlas = Test06AtlasManager.instance.GetAtlas("Test06UIAtlas");
//mission_icon
this.missionIcon.sprite = atlas.GetSprite(data.icon_name);
this.missionIcon.SetNativeSize();
this.missionIcon.rectTransform.sizeDelta = new Vector2(data.mission_icon_width, data.mission_icon_height);
//doing_reward_icon
this.doingRewardIcon.sprite = atlas.GetSprite(data.reward_icon_name);
this.doingRewardIcon.SetNativeSize();
this.doingRewardIcon.rectTransform.sizeDelta = new Vector2(data.reward_icon_width, data.reward_icon_height);
//complete_reward_icon
this.completeRewardIcon.sprite = atlas.GetSprite(data.reward_icon_name);
this.completeRewardIcon.SetNativeSize();
this.completeRewardIcon.rectTransform.sizeDelta = new Vector2(data.reward_icon_width, data.reward_icon_height);
}
}
Test06UIMissionScrollView
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class Test06UIMissionScrollView : MonoBehaviour
{
[SerializeField]
private GameObject uiMissionCellPrefab;
//위치지정
[SerializeField]
private Transform contentTr;
private List<Test06UIMissionCell> cellList = new List<Test06UIMissionCell>();
public void Init()
{
//데이터 받아와서
List<MissionData> missionDatas = Test06DataManager.instance.GetMissionData();
//foreach 돌리면서 프리팹 만들기
foreach (MissionData missionData in missionDatas)
{
//null 값의 Test06UIMissionCell 만들어줘서 넣어주자고
Test06UIMissionCell cell = null;
//프리팹 만들자
GameObject go = Instantiate<GameObject>(this.uiMissionCellPrefab, this.contentTr);
//cell에다가 컴포넌트 넣어주기
cell = go.GetComponent<Test06UIMissionCell>();
//Init
cell.Init(missionData);
this.cellList.Add(cell);
Debug.LogFormat("data.icon_name : {0}", missionData.icon_name);
Debug.LogFormat("{0}, {1}, {2}%", missionData.id, missionData.name, cell.slider.value);
Debug.LogFormat("{0}", cell.desc);
}
}
}
Test06UIMain
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test06UIMain : MonoBehaviour
{
[SerializeField]
private Test06UIMissionScrollView uiMissionScrollView;
private void Start()
{
Test06AtlasManager.instance.LoadAtlasData();
Test06DataManager.instance.LoadMissionData();
this.uiMissionScrollView.Init();
}
}
'유니티 심화' 카테고리의 다른 글
LearnUGUI - Test06 [저장/불러오기] (0) | 2023.09.11 |
---|---|
LearnUGUI - Test06 [ Mission ] - 저장 / 불러오기 [미완] (0) | 2023.09.08 |
LearnUGUI - Test05 [Shop] - 데이터 저장/ 불러오기 , json, DataManager, ChestData, Prefab (0) | 2023.09.07 |
LearnUGUI - Test05 [Shop] (0) | 2023.09.07 |
LearnUGUI - Test04[Stage] (0) | 2023.09.06 |