유니티

유니티 - JsonUtility로 Queue 저장하기

bugmin 2024. 6. 7. 20:53

게임을 할 때 최근 기록을 10개를 저장하고자 할 때

 

10개가 꽉차면 가장 먼저 있던 데이터가 빠져나가야한다.

 

이를 위해선 Queue(큐)가 가장 적절한 구조라 할 수 있다.

 

하지만 문제는 JsonUtility에선 Queue 가 저장이 안된다.

 

그렇다면 어찌해야하는가?

 

유니티 상에서는 큐로 데이터를 관리하다가 Json으로 직렬화하기 전에 List로 바꾸고

List를 직렬화 후에 파일로 로컬에 저장을 한다.

 

일단 큐에 저장할 때 10개의 기록이 다 차있다면 맨 앞의 원소를 빼는 Dequeue를 하고 새로운 데이터를 Enqueue를 해야한다.

 

 

그것이 위의 코드이다. 조건에 맞게 큐에 원소를 저장할 수 있는 함수를 넣어두고

 

큐 -> 리스트

 

간단하다 ToList() 함수를 이용하면된다.

 

리스트로 만들면 이를 직렬화하여 저장할 텐데 역직렬화 하여 데이터를 불러올 땐 리스트에서 큐로 바꾸는 작업이 또 필요하다.

 

리스트 -> 큐 

 

 

만일 역직렬화 하여 리스트 데이터를 불러왔는데 null이라면 이는 저장된 데이터가 없다는 의미로 리스트와 큐 모두 새롭게 new 키워드를 통해 객체를 만든다.

 

만일 데이터가 있다면 new 키워드를 통해 객체를 만드는 것은 맞는데 매개변수로 리스트를 넘겨준다.

 

이것이 어찌가능하냐하면

 

매개변수로 IEnumerable<T> 로 제네릭 인터페이스이기 때문이다.

 

고로 리스트를 넣어서 객체화 할 수가 있다.

 

이렇게 간단하게 큐를 리스트와 함께 다루어 저장하는 방법을 알아보았다.