유니티에서 좀 복잡한 데이터를 저장하고 싶을때 사용하면 좋은것
직렬화라는 기술인데 원리는 잘모르겠고
이건 내가 옛날에 인터넷에서 언젠가 봐놓고 프로젝트에 썻던 코드를 예제처럼 꾸며놓은거다.
좀 무겁다고는 하는데 어차피 세이브를 프레임마다 하는건 아니니깐,,,
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==
'프로그래밍 > 유니티' 카테고리의 다른 글
유니티애드의 수익 (0) | 2017.06.23 |
---|---|
유니티에서 xml쓰기 (0) | 2017.06.17 |
유니티 Resources.Load로 슬라이스 된 스프라이트 가지고 오기 (0) | 2017.05.29 |
마우스 커서 고정하기 & 안보이게 하기 (0) | 2017.05.21 |
Rigidbody.velocity 를 상대적인 방향으로 움직이기 (0) | 2017.05.19 |