[Unity] Dictionary 자료형 로컬에 저장하기

·2025년 5월 10일
0

Unity

목록 보기
12/12

오랜만에 글을 작성하게 되었다... 이제는 게임 프로그래밍을 main으로 하지 않기 때문에 머리가 굳은 느낌이 들게 되었다... 호호

무튼 이번 글은 예전에는 잘 저장되던 기능이 🟥NullReferenceException🟥으로 에러가 뜨길래 오잉🤔? 하면서 몇 달간 묶혀둔 에러를 해결해보고자 유니티를 켰다.

🏷️ 자세한 기능 명세는,
유저의 PlayData를 게임 종료 버튼 클릭과 동시에 Local에 저장하도록 기능을 구현하였다.

에러가 발생한 부분을 디버깅하였고, 플레이 이력이 있는 유저가 데이터를 불러올 때 특정 데이터를 불러오지 못하는 현상이었고, 저장파일을 확인해보니 Null이 된 데이터가 아예 누락된 상태로 저장되어 있었다.

우선 데이터 자체가 게임종료 시 Save되지 않는가?
Save 자체는 되지만 원인인 변수가 Null인가?
ㄴ생성을 안해줬는가?
를 확인해보았지만

상시 이미지와 같이 잘 저장되는 것을 확인하였다.

그래서 저장된 데이터 파일을 까보았다... 두둥☠️
json으로 저장하는 과정에서 해당 데이터가 누락되어 있었다.

이는 리팩토링 이전에 개발되었던 기능으로 UI Data를 MVP 패턴으로 리팩토링 이후 다양한 변수들의 자료형이 바뀌면서 발생한 에러였다.

리팩토링 이전에는 데이터 직렬화를 제공하는 List 형태로 데이터를 저장하였기에 당연히 저장되어 불러오는 과정도 잘 되었던 것이지만,
Dictionary로 바꾸게되면서, 직렬화를 제공하지 않아 누락이 되었던 것이었다.

✅ 따라서 직렬화가 되는 SerializableDictionary로 자료형을 변환하여 변수를 다뤄보겠다.

해당 자료형은 이전부터 사용중이던 자료형이어서 따로 설치과정은 해당 🔗깃허브에서 다운받아 사용하길 바란다 (아 직렬화 직접 할 수 있게 공부도 해야지...)(일단 시간이 없으니 빠르게 package사용ㅎㅎ)

바꾸고 플레이해보았더니 정상적으로 플레이되는 것을 확인하였다.

항상 데이터를 저장할 때는 변수의 자료형이 로컬에 저장될 수 있는지 확인하는 섬세함을 길러야겠다.

하나 더 배워 벨로그를 작성. 완료.👍

profile
할 수 있는 최선을 다하는 클라이언트 개발자랍니다 (❁´◡`❁)

0개의 댓글