ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내일배움캠프 67일차 TIL - 최종 프로젝트 개발 확장 6
    TIL/Unity 2024. 7. 22. 21:37

     

    [한 줄 요약]

    데이터 매니저와 저장/불러오기 기능을 구현하고, 스타트 씬을 제작하였다.


    [학습 내용]

     

    최종 프로젝트 개발 확장


    데이터 매니저

    데이터 분리 작업

    직렬화하여 사용할 데이터들을 따로 분리하였다. 특히 슬롯 쪽의 데이터들을 분리하여 SlotData 클래스로 만들고, 이를 상속시켜 ItemSlotData, SkillSlotData 등을 만들었다.

     

    직렬화

    이후 분리된 데이터들을 직렬화하는 작업을 진행하였다.


    !! 문제 발생 !!

     

    * 내용

    JsonUtility 기능을 활용하여 직렬화를 진행하려고 하였다. 그런데 옳게 구현한 거 같은데, 자꾸 Json 데이터가 빈 상태로 출력되었다.

     

    * 탐색

    그래서 우선 Serializable 어트리뷰트 문제인가 싶어서 연관된 클래스 이곳저곳에 붙여보았다. 그러나 소용이 없었다.

    그 다음에는 문제의 위치를 찾기 위해 데이터를 모두 로그로 찍어보았다. 그런데, JsonUtility로 Json 변환 후에 데이터가 증발되는 것을 확인할 수 있었다.

    구글에 찾아보니 JsonUtility는 경량화되어있기 때문에, List까지는 지원을 하나, 복합적인 구조는 직렬화가 어렵다고 한다. 그래서 따로 클래스를 만들어볼까 하였으나 그냥 다른 직렬화 툴을 사용하기로 하였다.

     

    * 해결

    NewtonSoft의 JsonConverter 기능을 이용하기로 하였다. 따로 파일을 다운받고, Plugin 폴더를 만들어 넣어주었다. 그냥 넣어주고 사용하기만 하면 돼서 생각했던 것보다 간단하게 사용할 수 있었다.


    JsonUtility 사용 시
    NewtonSoft JsonConverter 사용 시

     


    !! 문제 발생 !!

     

    * 내용

    이번에는 Sprite에 관한 오류가 발생하였다. 직렬화 과정에서 Vector3에 관련된 오류가 떠서 읽어보니 스프라이트 쪽 문제인 거 같았다.

     

    * 탐색

    스프라이트를 직렬화하는 방법을 찾아보았다. 그런데 Raw 데이터로 저장하는 방법 외에는 딱히 찾을 수 없었다. 스프라이트를 직렬화하는 대신, 스프라이트에 대한 정보를 담아서 역직렬화할 때 사용하면 된다는 방법을 찾을 수 있었다.

     

    * 해결

    마침 스프라이트가 Resources 폴더에 있었으므로, 바로 사용할 수 있었다. 그런데 Resources 폴더를 사용하면 별로 좋지 않다는 걸 알기 때문에, 나중에 이 부분은 수정이 필요할 거 같다.


     

    저장 기능 구현

    데이터 매니저 기능이 어느 정도 완성이 되었고, 저장/불러오기 기능을 수행할 수 있도록 구현하였다. 현재는 고양이리스트, 스킬리스트, 인벤토리가 구현되었다.

    고양이 리스트 저장
    스킬 리스트 저장
    인벤토리 저장

     

     

    스타트 씬

    스타트 씬 추가

    스타트 씬에 사용할 배경이미지와 로고 등을 넣고, 일단 아무 곳이나 터치하여 빌리지 씬으로 넘어갈 수 있도록 구현하였다. 이후에 닉네임 설정 패널이라든가, 새 게임/불러오기 선택 패널을 추가할 예정이다.

    스타트 씬

     


    [회고]

    오늘 데이터 매니저까지 끝낼 수 있어서 다행이다. 깃 충돌이 크게 날 줄 알았는데 안 나서 의외였다. 내일은 오전부터 저장하기 버튼 패널을 만들고, 오후에는 버그 수정이나 PPT 제작을 도울 거 같다.