티스토리 뷰
Unity에서 데이터를 저장하고 불러오는 방법에 대해서 알아보고자 한다.
Unity에서 데이터를 저장하고 불러오는 방법은 크게 3가지가 있다
[Unity 저장방법]
구분 | 장점 | 단점 |
PlayerPrefs객체 활용하기 | 매우 간단하다 | 1. 저장가능한 자료형에 한계가 있다 => int, float, string 2. 방대한 데이터 저장이 어려움 3. 온라인 멀티 플레이 불가능 |
Serialization 활용하기 | 보안이 좋다 빠르다 |
수정이 어렵 |
파일로 저장하기 (json, xml, csv ..) | 방대한 데이터 저장이 가능 모든 자료형 저장이 가능 상대적으로 간단하다 |
온라인 멀티 플레이가 불가능 |
DB활용 | 방대한 데이터 저장이 가능 모든 자료형 저장이 가능 온라인 멀티플레이 가능 |
복잡하다 |
어짜피 간단하게
1. PlayerPrefs객체 활용하기
#저장하기
PlayerPrefs.SetInt("나이", 26); //"나이"라는 이름으로 '26'이라는 int값을 저장
PlayerPrefs.SetFloat("몸무게", 75.8); //"몸무게"라는 이름으로 '75.8'이라는 float값을 저장
PlayerPrefs.SetString("name", "짱짱맨"); //"name"이라는 이름으로 '짱짱맨'이라는 string값은 저장
#불러오기
PlayerPrefs.GetInt("나이"); //출력값 => 26
PlayerPrefs.GetFloat("몸무게"); //출력값 => 75.8
PlayerPrefs.GetString("이름"); //출력값 => 짱짱맨
2. Serialization (참고)
using System.IO;
using System.Runtime.Serialization.Formatters.Binary; // Binary함수를 사용할 수 있게 불러오기
public class DataManager
{
#암호화
public static void BinarySerialize<T>(T t, string filePath)
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(Define.DataFilePath + filePath, FileMode.Create);
formatter.Serialize(stream, t);
stream.Close();
}
#복호화
public static T BinaryDeserialize<T>(string filePath)
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(Define.DataFilePath + filePath, FileMode.Open);
T t = (T)formatter.Deserialize(stream);
stream.Close();
return t;
}
주의할 점은 저장할 데이터 앞에 [System.Serializable]이 반드시 선언되어야 한다는 점이다.
※참고로 MonoBehavior 는 [System.Serializable]가 될 수 없습니다.
#저장 가능한 데이터 예시
[System.Serializable] //System.Serializable이 선언됨
public class PlayerData
{
public string name;
public string age;
public int money;
}
#저장 불가능한 데이터 예시
public class PlayerData : MonoBehaviour // MonoBehaviour은 System.Serializable선언불가능
{
public string name;
public string age;
public int money;
}
3. Text 파일로 저장하기 (json형식)
만약 json 형식이 무엇인지 모른다면 아래 링크를 참고하면 좋을 것 같다.
C#에서는 class를 json으로 자료형으로 변경할 수 있다.
따라서 저장하고자 하는 자료는 class의 형식으로 만들어서 --> json형식으로 전환후 저장되어야 한다.
불러올때는 반대로 json --> class형식으로 전환할 수 있다.
<기본적인 저장과 불러오는 순서>
Class자료형 --(번역)--> Json자료형 --(저장)--> 파일 --(읽기)--> json자료형 --(번역)--> Class자료형
1. 저장할 class 만들기
우선 이름과 나이 그리고 소지금 등의 정보를 저장할 수 있도록 PlayerInfo라는 클래스를 만들었다.
public class PlayerInfo () {
string name;
int age;
int money;
# 더 많은 정보를 추가 할 수 있음...
}
2. 저장할 data(클래스)를 Json자료형으로 변환하기
PlyerInfo info = new PlayerInfo(); #새로운 PlayerInfo객체 생성
#저장할 data 셋팅
info.name = "짱짱맨";
info.age = 35;
info.money = 10,000;
infoJson = JsonUtility.ToJson(info); #변환 Class to Json
3. Json 자료형 저장(Text형식으로)
File.WriteAllText("경로/파일이름", jasonData)
4. Text파일을 불러오기
string loadedData = File.ReadAllText("경로/파일이름");
5. Json자료형을 클래스로 변환하기
PlayerInfo loadedInfo = JsonUtility.FromJson<PlayerInfo>(loadedData);
위의 모든 절차를 합쳐서 Save()함수와 Load()함수를 만들어 봤다.
void Save(){
PlyerInfo info = new PlayerInfo(); #새로운 PlayerInfo객체 생성
#저장할 data 셋팅
info.name = "짱짱맨";
info.age = 35;
info.money = 10,000;
infoJson = JsonUtility.ToJson(info); #변환 Class to Json
File.WriteAllText("경로/파일이름", jasonData) #Text파일로 저장
}
void Load(){
string loadedData = File.ReadAllText("경로/파일이름"); #파일불러와서 Json으로 저장
PlayerInfo loadedInfo = JsonUtility.FromJson<PlayerInfo>(loadedData); #Json을 다시 PlayerInfo클래스로
return loadedInfo
}
끝.
참고싸이트
Serialization 관련 : https://dawncoding.tistory.com/34?category=610877
json데이터 형식으로 저장
https://coding-of-today.tistory.com/176
'IT > UNITY(C#)' 카테고리의 다른 글
Unity_멀티플레이 구현에 앞서 알아야할 것들 (0) | 2022.07.19 |
---|---|
(C#) UNITY_다른 스크립트에 존재하는 변수, 함수(메서드) 접근하기 (0) | 2022.07.18 |
(C#) 비전공자도 이해하는 C#의 자료형식의 구분 방법_reference type, value type, built-in type, cusotom type (0) | 2022.07.15 |
(C#) 비전공자 Unity_너무 당연해서 넘어갔지만 궁금한 녀석 : Monobehavior (0) | 2022.07.15 |
(C#) UNITY_게임 오브젝트 옮기기(드래그앤드랍) (0) | 2022.07.14 |
- Total
- Today
- Yesterday
- 스타트업
- 강화학습
- 터틀트레이딩
- PYTHON
- 머신러닝
- 심리학
- 마케팅
- 크롤링
- 주식투자
- C#
- 알고리즘
- json
- 유니티
- It
- requests
- 사진크롤링
- ET5X
- Anet
- 파이썬
- 비전공자
- beautifulsoup
- 프로그래머스
- IT기초
- 시스템투자
- 가격데이터
- 일자별
- Unity
- 주식
- 경영학
- 랜덤맵
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |