만약에 저장할 데이터가 간단하지 않고 좀 복잡하다...라고 한다면 아래처럼 테이블을 만들어서 저장합니다.
============================================================================== using UnityEngine; using System.Collections; using System.Collections.Generic; // 리스트를 쓰기 위해 추가합니다. public class csTest : MonoBehaviour { // 이렇게 클래스를 만들고 [Serializable] // 저장하기 위해서 있어야 합니다. public class ScoreEntry { public string name; public int score; } string currentPlayerName; int score; // 만든 클래스를 리스트에 담아서 관리하면 마치 테이블처럼 사용할 수 있습니다. public List<ScoreEntry> highScore = new List<ScoreEntry>(); void AddData() { // 이렇게 새로운 데이터를 추가해주고 highScore.Add(new ScoreEntry { name = currentPlayerName, score = score }); } void OnGUI() { // 이렇게 화면에 랭킹 정보를 보여주면 됩니다. foreach (ScoreEntry nowScore in highScore) { GUILayout.Label(string.Format("{0} : {1:#, 0}", nowScore.name, nowScore.score)); } } } ==============================================================================이렇게 정보를 테이블처럼 만든 후에는 BinaryFormatter를 사용해서 저장할 수 있습니다.
BinaryFormatter는 '파라미터를 갖지 않는 생성자'를 갖는 클래스라면 어떤 클래스도 바이트 배열로 변환하고, 그것을 다시 문자열 값으로 변환할 수 있습니다.
문자열 값으로 변환이 가능하다면 이전 포스팅에서 설명한 PlayerPrefs에 저장할 수 있게 되겠죠.
============================================================================== using UnityEngine; using System.Collections; using System.Collections.Generic; // 리스트를 쓰기 위해 추가합니다. // BinaryFormatter를 사용하기 위해서는 반드시 아래의 네임스페이스를 추가해줘야 해요. using System; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class csTest : MonoBehaviour { // 이렇게 클래스를 만들고 [Serializable] // 저장하기 위해서 있어야 합니다. public class ScoreEntry { public string name; public int score; } // 만든 클래스를 리스트에 담아서 관리하면 마치 테이블처럼 사용할 수 있습니다. public List<ScoreEntry> highScore = new List<ScoreEntry>(); void SaveScores() { var binaryFormatter = new BinaryFormatter(); var memoryStream = new MemoryStream(); // score를 바이트 배열로 변환해서 저장합니다. binaryFormatter.Serialize(memoryStream, highScore); // 그것을 다시 한번 문자열 값으로 변환해서 // 'HighScore'라는 스트링 키값으로 PlayerPrefs에 저장합니다. PlayerPrefs.SetString("HighScore", Convert.ToBase64String(memoryStream.GetBuffer())); } void Start() { // 'HighScore' 스트링 키값으로 데이터를 가져옵니다. var data = PlayerPrefs.GetString("HighScore"); if (!string.IsNullOrEmpty(data)) { var binaryFormatter = new BinaryFormatter(); var memoryStream = new MemoryStream(Convert.FromBase64String(data))); // 가져온 데이터를 바이트 배열로 변환하고 // 사용하기 위해 다시 리스트로 캐스팅해줍니다. highScore = (List<ScoreEntry>)binaryFormatter.Deserialize(memoryStream); } } } ==============================================================================
댓글 없음:
댓글 쓰기