게임을 할 때 최근 기록을 10개를 저장하고자 할 때
10개가 꽉차면 가장 먼저 있던 데이터가 빠져나가야한다.
이를 위해선 Queue(큐)가 가장 적절한 구조라 할 수 있다.
하지만 문제는 JsonUtility에선 Queue 가 저장이 안된다.
그렇다면 어찌해야하는가?
유니티 상에서는 큐로 데이터를 관리하다가 Json으로 직렬화하기 전에 List로 바꾸고
List를 직렬화 후에 파일로 로컬에 저장을 한다.
일단 큐에 저장할 때 10개의 기록이 다 차있다면 맨 앞의 원소를 빼는 Dequeue를 하고 새로운 데이터를 Enqueue를 해야한다.
그것이 위의 코드이다. 조건에 맞게 큐에 원소를 저장할 수 있는 함수를 넣어두고
큐 -> 리스트
간단하다 ToList() 함수를 이용하면된다.
리스트로 만들면 이를 직렬화하여 저장할 텐데 역직렬화 하여 데이터를 불러올 땐 리스트에서 큐로 바꾸는 작업이 또 필요하다.
리스트 -> 큐
만일 역직렬화 하여 리스트 데이터를 불러왔는데 null이라면 이는 저장된 데이터가 없다는 의미로 리스트와 큐 모두 새롭게 new 키워드를 통해 객체를 만든다.
만일 데이터가 있다면 new 키워드를 통해 객체를 만드는 것은 맞는데 매개변수로 리스트를 넘겨준다.
이것이 어찌가능하냐하면
매개변수로 IEnumerable<T> 로 제네릭 인터페이스이기 때문이다.
고로 리스트를 넣어서 객체화 할 수가 있다.
이렇게 간단하게 큐를 리스트와 함께 다루어 저장하는 방법을 알아보았다.
'유니티' 카테고리의 다른 글
유니티 - 포톤 기본 설정 (0) | 2024.06.17 |
---|---|
유니티 - 애니메이터창에서 실시간 전환이 안보일 때 (0) | 2024.06.14 |
유니티 - 직렬화와 역질렬화 (총편집) (0) | 2024.06.04 |
유니티 - lerp와 slerp (2) | 2024.06.03 |
유니티 - 2D Sprite를 이용한 체력바(게이지바) 구현하기 (0) | 2024.05.30 |