티스토리 뷰

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 형식이 무엇인지 모른다면 아래 링크를 참고하면 좋을 것 같다.

비전공자를 위한 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://notyu.tistory.com/68

https://coding-of-today.tistory.com/176

 

 

 

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함