유니티 Dictionary를 활용한 저장기능 정리
2021. 11. 10. 15:27ㆍ개발/유니티
sqlite를 이용해서 게임 데이터를 저장하거나 불러올 수 있지만,
간단하게 dictionary기능을 사용해 데이터를 관리할 수도 있다.
public class GameDataManager : MonoBehaviour {
//게임에서 사용할 데이터 클래스
[Serializable()]
public class GameData
{
public int seq;
public string name;
public int hp;
public int mp;
public int stat;
}
//저장용 데이터를 Dictionary로 선언
public Dictionary<long, GameData> gameDataSave;
//메모리에 올려놓을 데이터를 List로 선언
public List<GameData> gameDataLoad;
private void Start()
{
//Dictionary에 메모리를 할당해준다.
gameDataSave = new Dictionary<long, GameData>();
//게임에서 사용할 데이터의 메모리를 할당해준다.
gameDataLoad = new List<GameData>();
}
//Dictionary에서 실제 사용할 메모리 영역으로 불러온다.
private void SelectData()
{
//데이터를 원하는 형태로 정렬한다.
//(현재 기준은 seq이며 descending은 큰 수부터, ascending은 작은 수부터 정렬한다)
IOrderedEnumerable<KeyValuePair<long, gameDataSave>> items;
items = from pair in gameDataSave orderby pair.Value.seq descending select pair;
gameDataLoad.Clear();
//데이터를 파싱해서 사용하자.
foreach (var data in items)
{
GameData gd = new GameData();
gd.seq = data.Value.seq;
gd.name = data.Value.name;
gd.hp = data.Value.hp;
gd.mp = data.Value.mp;
gd.stat = data.Value.stat;
gameDataLoad.Add(gd);
}
}
//게임 데이터를 저장한다.
private void SaveData()
{
var binaryFormatter = new BinaryFormatter();
var memoryStream = new MemoryStream();
binaryFormatter.Serialize(memoryStream, gameDataSave);
PlayerPrefs.SetString("gameDataSave", Convert.ToBase64String(memoryStream.GetBuffer()));
}
//게임 데이터를 불러온다.
private void LoadData()
{
var data = PlayerPrefs.GetString("gameDataSave");
if (!string.IsNullOrEmpty(data))
{
var binaryFormatter = new BinaryFormatter();
var memoryStream = new MemoryStream(Convert.FromBase64String(data));
gameDataSave = (Dictionary<long,GameData>)binaryFormatter.Deserialize(memoryStream);
}
}
}
PlayerPrefs의 저장 기능을 활용한다.
다만 보안적인 부분은 생각한다면 여러 암호화 알고리즘을 적용해야한다.
물론 서버를 이용한다면 해결되지만 그럴거면 이런 코드를 쓸 필요도 없다.
장점은 매우 간단하게 데이터를 관리할 수 있다.
sqlite를 적용하느라 시간을 낭비할 필요도 없고, 데이터 수정도 C#에서 관리하기때문에 빠르게 적용할 수 있다.
유니티 자체 기능을 활용하기때문에 안드로이드나 iOS에 별도로 컨버팅할 필요도 없다.
또한 sql처럼 정렬기능도 있어서 리스트관리하기 편한 기분이 든다.
단점은 보안이 중요하면 사용할 일이 없고, 데이터가 너무 많으면 감당이 안된다.
'개발 > 유니티' 카테고리의 다른 글
유니티 스크립트 인코딩을 일괄 변경하자. (0) | 2021.11.24 |
---|---|
파이어베이스로 마켓에 출시된 앱 버전 체크하기 (0) | 2021.11.16 |
유니티에서 웹서버와 POST 통신하기 (0) | 2021.09.30 |
유니티 iOS에 플러그인 연결하기 (0) | 2021.06.21 |
스크롤뷰에서 이벤트핸들러 공유하기 (0) | 2021.05.26 |