일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ChatGPT
- 모작
- XR
- OVR
- 오큘러스
- 멀티플레이
- 팀 프로젝트
- Oculus
- 가상현실
- input system
- 연습
- CGV
- meta xr
- Photon Fusion
- 드래곤 플라이트 모작
- 포트폴리오
- 유니티
- 유니티 UI
- 길건너 친구들
- 개발일지
- 드래곤 플라이트
- 유니티 GUI
- HAPTIC
- VR
- 오브젝트 풀링
- 유니티 Json 데이터 연동
- 팀프로젝트
- meta
- 앱 배포
- 개발
Archives
- Today
- Total
EasyCastleUNITY
미션 만들기 (저장 빼고) 본문
하는 게임이 없어서 예시 정보 그대로 사용
데이터 저장 클래스
MissionData
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class MissionData
{
public int id; //미션 데이터 id
public string name; //이름
public int goal; //완료해야 되는 미션 횟수
public int reward_item_id; //보상 아이템 id
public int reward_item_amount; //보상 아이템 수량
}
}
RewardItemData
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class RewardItemData
{
public int id; //아이템 id
public string name; //아이템 이름
}
}
--------------------------------------------------------------------------------------------------------------------
변화하는 정보 info
MissionInfo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class MissionInfo
{//저장객체
//멤버
public int id;
public int goal;
public int reward_item_amount;
//생성자
public MissionInfo(int id, int goal, int reward_item_amount)
{
this.id = id;
this.goal = 0;
this.reward_item_amount = reward_item_amount;
}
}
}
RewardItemInfo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class RewardItemInfo
{
//멤버
public int id;
public string name;
//생성자
public RewardItemInfo(int id,string name)
{
this.id = id;
this.name = name;
}
}
}
----------------------------------------------------------------------------------------------------------
데이터 관리 DataManager
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Misson
{
//싱글톤 패턴 이용, 언제 어디서나 접근 가능
public class DataManager
{
public static readonly DataManager instance = new DataManager();
//mission 정보를 저장하는 사전
Dictionary<int, MissionData> missionDic = new Dictionary<int, MissionData>();
//보상 아이템 정보를 저장하는 사전
Dictionary<int, RewardItemData> rewardItemDic = new Dictionary<int, RewardItemData>();
//json 파일을 통해 받아온 정보를 저장할 MissionData 배열
MissionData[] missionDatas;
//json 파일을 통해 받아온 정보를 저장할 RewardItemData 배열
RewardItemData[] rewardItemDatas;
//생성자, 싱글톤 패턴이기에 생성자에 접근 할 수 없도록 private 사용
private DataManager()
{
}
//MissionData 정보를 json 파일에서 읽어오는 메서드
public void LoadMissionData()
{
string json = File.ReadAllText("./mission_data.json");
missionDatas = JsonConvert.DeserializeObject<MissionData[]>(json);
foreach(MissionData missionData in missionDatas)
{
missionDic.Add(missionData.id, missionData);
}
}
//RewardItemData 정보를 json 파일에서 읽어오는 메서드
public void LoadRewardItemData()
{
string json = File.ReadAllText("./reward_item_data.json");
rewardItemDatas = JsonConvert.DeserializeObject<RewardItemData[]>(json);
foreach (RewardItemData rewardItemData in rewardItemDatas)
{
rewardItemDic.Add(rewardItemData.id, rewardItemData);
}
}
//Mission 데이터 반환
public MissionData GetMissionData(int id)
{
return missionDic[id];
}
//RewardItem 데이터 반환
public RewardItemData GetRewardItemData(int id)
{
return rewardItemDic[id];
}
}
}
----------------------------------------------------------------------------------------------------------
실제 생성 클래스
Mission
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class Mission
{
public MissionInfo info;
public Action onClear;
public MissionData data;
//생성자
public Mission(MissionInfo info)
{
this.info = info;
data = DataManager.instance.GetMissionData(info.id);
}
public int GetMissionGoal()
{
return this.info.goal;
}
public int GetMissionItemId()
{
return this.data.reward_item_id;
}
public void Clear()
{
if(data.goal == info.goal)
{
this.onClear();
Console.WriteLine("미션이 완전히 종료");
}
}
}
}
RewardItem
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class RewardItem
{
private RewardItemInfo info;
private RewardItemData data;
//생성자
public RewardItem(RewardItemInfo info)
{
this.info = info;
this.data = DataManager.instance.GetRewardItemData(info.id);
Console.WriteLine("{0} 생성", data.name);
}
}
}
----------------------------------------------------------------------------------------------------------
실행
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Misson
{
public class App
{
private Mission mission;
private RewardItem rewardItem;
public App()
{
//-----------------환경구성--------------------------
DataManager.instance.LoadMissionData();
DataManager.instance.LoadRewardItemData();
//------------------시작-----------------------
Console.WriteLine("시작");
this.mission = this.CreateMission(1000);
this.mission.onClear = () => { //goal이 목표지점에 도달했다는 것을 가져옴
//보상 아이템 생성
int rewardId = this.mission.GetMissionItemId();
rewardItem = this.CreateRewardItem(rewardId);
};
for(int i = 0; i < 7; i++) //미션 일곱번 클리어
{
this.MissionClear(this.mission);
// Console.WriteLine(this.mission.info.goal);
}
}
//미션 생성
public Mission CreateMission(int id)
{
MissionData data = DataManager.instance.GetMissionData(id);
MissionInfo info = new MissionInfo(data.id, data.goal, data.reward_item_amount);
return new Mission(info);
}
//보상 아이템 생성
public RewardItem CreateRewardItem(int id)
{
RewardItemData data = DataManager.instance.GetRewardItemData(id);
RewardItemInfo info = new RewardItemInfo(data.id, data.name);
return new RewardItem(info);
}
//미션 클리어
public void MissionClear(Mission mission)
{
int goal = mission.GetMissionGoal();
goal++;
mission.info.goal = goal;
mission.Clear();
}
}
}
'C#프로그래밍' 카테고리의 다른 글
미션 만들기 (0) | 2023.07.31 |
---|---|
JSON 파일을 통한 데이터 읽기 및 대리자 복습 (0) | 2023.07.29 |
JSON 파일 및 대리자 응용 연습 (0) | 2023.07.28 |
2023/07/27 복습 (0) | 2023.07.27 |
JSON 파일을 활용한 아이템 정보 저장 프로젝트의 전체적인 흐름 및 복습 (0) | 2023.07.27 |