1인 개발/나홀로 성 지키기

나홀로 성 지키기 개인 프로젝트 13일차

잼잼재미 2024. 4. 3. 19:11

트러블 슈팅


1. 데이터 저장

초기 데이터
스킬 획득, 장착
유니티를 껐다가 켰을 때

 

ScriptableObject는 게임 실행 중에도 데이터 변경이 저장되므로, Player 정보, 인벤토리, Stage 정보, Enemy 정보 등 모든 데이터를 ScriptableObject로 관리했다. 하지만 이 변경 내용은 유니티가 실행 중일 때, 플레이 모드를 껐다 켰을 때만 적용이 되었고, 유니티 자체를 껐다가 켰을 때는 인벤토리의 스킬이 제대로 저장되지 않았다. ScriptableObject의 기능에 대해서 제대로 알지 못하고 구현을 해서 문제가 생겼다. 그래서 다른 데이터 저장 방법이 필요했다.

 

 

데이터 저장 방법

  1. EasySave 에셋 사용
  2. Jason 사용
  3. PlayerPrefs 사용

 

가장 간단한 것은 에셋스토어에서 유료 저장 에셋을 구매하는 것이다. 하지만 포트폴리오용으로 게임 개발에 의미를 두고 싶었다. 그래서 저장 기능은 직접 구현하기로 했다. PlayerPrefs는 가장 간단하게 저장할 수 있는 유니티 기능이지만, 인벤토리와 같은 GameObject를 저장하기는 어려웠다. 그래서 Jason 데이터 저장을 구현하기로 했다.

 

https://kkln2486.tistory.com/390

 

Json 데이터 저장

Json (JavaScript Object Notation) 데이터를 저장하거나 교환하는데 사용되는 경량의 데이터 교환 형식 텍스트 기반의 데이터 형식 키-값 쌍으로 이루어진 데이터 객체와 배열을 포함 유니티에서 JSON Util

kkln2486.tistory.com

 

 

회고


ScriptableObject의 기능을 제대로 파악하지 않고, 처음부터 구현을 시작했기 때문에 Player, Enemy, Castle 등 오늘 코드 대공사를 했다. 애초에 모든 데이터를 SO에서 관리했는데 SO가 데이터 저장용으로 사용하면 안된다는 것을 알게되었기 때문에 다른 데이터를 가져오는 변수가 필요했다. 그래서 DataManager에서 모든 데이터를 관리하고 저장하고 게임 클리어, 스킬 구매, 장착 등에서 데이터를 저장하도록 했다. 오늘 원래 다른 작업을 예정했었는데, 데이터 저장 기능이 더 급하다고 생각해서 다른 작업은 하지 못했다. 꼬박 하루를 날렸지만 Json에 대해서 처음 공부하고 구현하게 되었으며, 오히려 빌드 후, 이러한 문제점을 발견하지 않아서 다행이라고 생각했다. 내일 데이터 저장 기능을 마무리 하도록 하겠다.