일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- meta xr
- Oculus
- 팀 프로젝트
- CGV
- 연습
- 드래곤 플라이트
- 길건너 친구들
- 가상현실
- 유니티
- HAPTIC
- 앱 배포
- 유니티 Json 데이터 연동
- 오큘러스
- 오브젝트 풀링
- OVR
- 드래곤 플라이트 모작
- 유니티 UI
- input system
- Photon Fusion
- 팀프로젝트
- 개발
- VR
- ChatGPT
- 모작
- 유니티 GUI
- XR
- 포트폴리오
- 멀티플레이
- meta
- 개발일지
Archives
- Today
- Total
EasyCastleUNITY
JSON 파일을 활용하여 아이템 정보 저장하기 본문
https://cafe.naver.com/hansungkkdigital?iframe_url=/MyCafeIntro.nhn%3Fclubid=31020909
DataManager -> 받은 정보를 관리하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace LearnDotnet
{
public class DataManager
{
//멤버 변수
public static readonly DataManager instance = new DataManager();
Dictionary<int, ItemData> itemDic = new Dictionary<int, ItemData>();
ItemData[] arrItemDatas;
//생성자
private DataManager()
{
}
public void LoadItemDatas()
{
//문자열 -> 객체 (역직렬화)
string json = File.ReadAllText("./item_data.json");
arrItemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
itemDic = new Dictionary<int, ItemData>();
//dictionary에 옮겨담기
// 1.
foreach (ItemData data in arrItemDatas)
{
Console.WriteLine("item's id: {0}, item's name: {1}, item's damage: {2}", data.id, data.name, data.damage);
itemDic.Add(data.id, data);
}
//2.
// arrItemDatas.ToDictionary(x => x.id);
Console.WriteLine(itemDic.Count);
}
public ItemData GetItemData(int id)
{
return this.itemDic[id];
}
}
}
ItemData: 아이템의 기본정보
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
public class ItemData
{
//id name damage
//int string int
public int id;
public string name;
public int damage;
}
}
ItemInfo: 저장을 하기 위해 필요한 정보를 가지고 있는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
//저장객체
public class ItemInfo
{
//멤버
public int id;
public int damage;
//생성자
public ItemInfo(int id, int damage)
{
this.id = id;
this.damage = damage;
}
}
}
Item: 아이템을 생성하는 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
public class Item
{
ItemInfo info;
public string Name
{
get { ItemData data = DataManager.instance.GetItemData(this.info.id);
return data.name;
}
}
//생성자
public Item(ItemInfo info)
{
this.info = info;
}
public void Enhence()
{
this.info.damage *= 2;
}
public int GetID()
{
return this.info.id;
}
public int GetDamage()
{
return this.info.damage;
}
public ItemInfo GetInfo()
{
return this.info;
}
}
}
실행 : 아이템을 저장
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace LearnDotnet
{
//형식 정의
public class App
{
public App()
{
//게임 시작전에 게임에서 사용할 데이터를 로드
DataManager.instance.LoadItemDatas();
//--------------------------------------
//게임 시작
//--------------------------------------
//파일이 있는가?
if (File.Exists("./item_info.json"))
{
//있다: 기존유저
Console.WriteLine("기존유저입니다");
string json = File.ReadAllText("./item_info.json");
//역질려화 문자열 -> 객체
ItemInfo info = JsonConvert.DeserializeObject<ItemInfo>(json);
Item item = new Item(info);
int id = item.GetID();
string name = item.Name;
int damage = item.GetDamage();
Console.WriteLine("ID: {0}", id);
Console.WriteLine("이름: {0}", name);
Console.WriteLine("공격력: {0}", damage);
}
else
{
//기본 무기: 신규유저
ItemData data = DataManager.instance.GetItemData(100);
ItemInfo info = new ItemInfo(data.id, data.damage);
Item item = new Item(info);
int id = item.GetID();
string name = item.Name;
int damage = item.GetDamage();
Console.WriteLine("ID: {0}", id);
Console.WriteLine("이름: {0}", name);
Console.WriteLine("공격력: {0}", damage);
//저장, 직렬화: 객체 -> 문자열
string json = JsonConvert.SerializeObject(item.GetInfo());
Console.WriteLine(json);
//파일로 저장
File.WriteAllText("./item_info.json", json);
}
}
}
}
'C#프로그래밍' 카테고리의 다른 글
2023/07/27 복습 (0) | 2023.07.27 |
---|---|
JSON 파일을 활용한 아이템 정보 저장 프로젝트의 전체적인 흐름 및 복습 (0) | 2023.07.27 |
대리자 연습 문제 (1,2,3,4) (0) | 2023.07.27 |
2023/07/26 복습 (0) | 2023.07.26 |
디자인 패턴 (0) | 2023.07.26 |