
다양한 데이터를 관리하는 싱글톤 클래스
DataManager / 여러 씬의 데이터를 관리
-> ShopGemData -> Test3Main
-> MissonData -> Test7Main
-> RewardData -> Test7Main
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using System;
//데이터를 관리하는 싱글톤 클래스
public class DataManager
{
//싱글톤 패턴
//클래스에 인스턴스가 한개
//전역적으로 접근 가능하다
//public static readonly 변수를 정의하고 인스턴스를 생성해라
public static readonly DataManager Instance = new DataManager();
private Dictionary<int, ShopGemData> dicShopGemDatas;
private Dictionary<int, MissionData> dicMissionDatas;
private Dictionary<int, RewardData> dicRewardDatas;
//생성자
private DataManager()
{
}
public void LoadShopGemData()
{
TextAsset asset = Resources.Load<TextAsset>("shop_gem_data");
string json = asset.text;
ShopGemData[] datas = JsonConvert.DeserializeObject<ShopGemData[]>(json);
//x => x.id는 람다식, 배열의 각 요소 x에 대해 x의 id 속성을 키로 사용
this.dicShopGemDatas = datas.ToDictionary(x => x.id);
Debug.LogFormat("dicShopGemDatas.Count: {0}", dicShopGemDatas.Count);
}
public List<ShopGemData> GetShopGemDataValues()
{
return this.dicShopGemDatas.Values.ToList();
}
public ShopGemData GetShopGemDataById(int id)
{
return this.dicShopGemDatas[id];
}
public void LoadMissionData()
{
TextAsset asset = Resources.Load<TextAsset>("mission_data");
string json = asset.text;
MissionData[] datas = JsonConvert.DeserializeObject<MissionData[]>(json);
this.dicMissionDatas = datas.ToDictionary(x => x.id);
Debug.LogFormat("dicMissionDatas.Count: {0}", dicMissionDatas.Count);
}
public void LoadRewardData()
{
TextAsset asset = Resources.Load<TextAsset>("reward_data");
string json = asset.text;
RewardData[] datas = JsonConvert.DeserializeObject<RewardData[]>(json);
this.dicRewardDatas = datas.ToDictionary(x => x.id);
Debug.LogFormat("dicRewardDatas.Count: {0}", dicRewardDatas.Count);
}
public MissionData GetMissionData(int id)
{
return this.dicMissionDatas[id];
}
public RewardData GetRewardData(int id)
{
return this.dicRewardDatas[id];
}
}
-> ShopGemData -> Test3Main
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft;
using Newtonsoft.Json;
public class Test3Main : MonoBehaviour
{
[SerializeField]
private Item[] cellViews;
void Start()
{
DataManager.Instance.LoadShopGemData();
List<ShopGemData> shopGemDatas =
DataManager.Instance.GetShopGemDataValues();
for (int i = 0; i < shopGemDatas.Count; i++)
{
var cellView = cellViews[i];
var data = shopGemDatas[i];
cellView.btn.onClick.AddListener(() =>
{
Debug.LogFormat("=> {0}, {1}, {2}", data.id, data.name, data.price);
});
cellView.Init(data);
}
}
}
-> MissonData -> Test7Main
-> RewardData -> Test7Main
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MissionData
{
public int id;
public string name;
public int goal;
public string desc;
public string sprite_name;
public int reward_id;
public int reward_amount;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test7Main : MonoBehaviour
{
void Start()
{
DataManager.Instance.LoadMissionData();
DataManager.Instance.LoadRewardData();
this.UpdateMissionCellView(1000);
}
private void UpdateMissionCellView(int id)
{
MissionData missionData = DataManager.Instance.GetMissionData(1000);
RewardData rewardData = DataManager.Instance.GetRewardData(missionData.reward_id);
//미션아이콘이름, 미션명, 미션DESC, 보상아이콘이름, 보상수량
//icon_coins_pouch, Collect Golds, Collect 10000 Golds, icon_color_energy, 1
string missionDesc = string.Format(missionData.desc, missionData.goal);
Debug.LogFormat("{0}, {1}, {2}, {3}, {4}", missionData.sprite_name, missionData.name, missionDesc, rewardData.sprite_name, missionData.reward_amount);
}
}
'게임개발 > 게임 UI.UX 프로그래밍' 카테고리의 다른 글
데이터 저장하기2 (0) | 2024.02.14 |
---|---|
데이터 저장하기 1 (0) | 2024.02.14 |
특정 ID, 최소 최대값 Data객체 검색하기 (0) | 2024.02.13 |
데이터 연동 스크롤뷰 (정적) 만들기 / 딕셔너리 (1) | 2024.02.13 |
데이터 연동해서 UI에 보여주기 (0) | 2024.02.13 |