유니티에서 좀 복잡한 데이터를 저장하고 싶을때 사용하면 좋은것

직렬화라는 기술인데 원리는 잘모르겠고 

이건 내가 옛날에 인터넷에서 언젠가 봐놓고 프로젝트에 썻던 코드를 예제처럼 꾸며놓은거다.

좀 무겁다고는 하는데 어차피 세이브를 프레임마다 하는건 아니니깐,,,


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
//직렬화를 위한 네임스페이스들
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
 
[Serializable] // 직렬화할 클래스는 위에 이걸 써야함
public class Data
{    
    //클래스 안에 들어가는 데이터에 다른 클래스가 들어갈때는 그 클래스도 직렬화가능한 클래스 여야함(Vector 같은거 안됨)
    public string bang;    
    public int game;
    public bool right;
}
 
public class SaveMng : MonoBehaviour
{
 
///*
//
//*/
 
    public void Save(Data data)//세이브
    {
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
        bf.Serialize(ms, data);
        
        string result = Convert.ToBase64String(ms.GetBuffer();
        PlayerPrefs.SetString("save", result);//변환해서 playerPrefs에 저장
    }
 
    public Data Load()//로드
    {
        Data data=null;
        string save = PlayerPrefs.GetString("save",null);
        
        if (!string.IsNullOrEmpty(save))//
        {
            var binaryFormatter = new BinaryFormatter();
            var memoryStream = new MemoryStream(Convert.FromBase64String(save));
            
            data = (Data)binaryFormatter.Deserialize(memoryStream);//형변환해서 사용
        }
        return data;
    }
}
cs


참고로 직렬화된 결과는 이런식으로 나옴

AAEAAAD/////AQAAAAAAAAAMAgAAAA9Bc3NlbWJseS1DU2hhcnAFAQAAAAREYXRhAwAAAAJkeQRnY

W1lBHN1Y2sBAAAIAQIAAAAKAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

블로그 이미지

stuban

ㅇ.ㅇ

,