티스토리 뷰
아무래도 게임이라면 세이브 로드 시스템이 빠질 수는 없을 것이다.
요즘에는 단판으로 진행하는 게임들도 누적되는 성장 요소는 있기 마련이고, 그렇지 않더라도 리더보드 같은 요소들은 거진 있으니 말이다.
본 프로젝트도 당연하지만 세이브 로드 시스템이 필요하다. 다른 게 아니라, '핵 & 슬래시 장르'를 표방하기 때문에 아이템을 모으는 것이 메인 컨텐츠이고, 그런 측면에서 세이브 로드 시스템이 없다는 것은 말이 안되니 말이다.
다만, 세이브 로드 시스템 자체는 그 비중에 비해서 원리가 간단해서 내용이 간단하다.
아마 간단하게 작성되지 싶다.
세이브 데이터 형성 방식
본 작품에는 레벨이 없다. 그 대신에 장비의 능력치와 특성 총계로 능력치가 상승하는 구성으로 되어 있다.
그렇기 때문에 본작은 인벤토리와 장비 상황, 여기에 더해서 게임 진행 상황 정도만 저장하면 충분하였다.
본 프로젝트에서는 이 세이브 - 로드 시스템은 SaveLoadManager에서 처리한다.
장착 중인 아이템과 인벤토리 안의 아이템들을 모두 구조체로 정리하여 Json으로 저장하고, 불러올 때에는 해당 Json 파일을 읽어와서 이를 다시 장착 중인 아이템과 인벤토리 안의 아이템들로 전환하는 구성으로 되어있다.
Excel과 연동할 경우에는 구조체를 이용해서 항목을 정리하는 게 상당히 껄끄러운 편이지만, 세이브 데이터는 엑셀을 거치지 않아서 그냥 전부 구조체로 취합한 것을 구조체로 엮어서 데이터를 형성했다.
세이브 데이터의 경로는 Application.persistentDataPath/Save를 사용했다.
트러블 슈팅
사실, Json 직렬화/역직렬화를 빼면 단순 파일 입출력 시스템이기 때문에 문제가 그리 크게 발생하지는 않았었다.
다만, 한 가지 좀 고생한 내용이 있는데, 바로 'File.WriteAllText()는 디렉토리를 만들지는 않는다'는 점이었다.
문제는 이게 로그 상으로는 '권한이 없다'고 나왔다는 것.
때문에 관련 내용을 샅샅이 뒤져 봤었다. 에러 로그를 GPT에도 질문 해 보고, 저장 경로와 관련해서 검색도 많이 했었다.
그럼에도 불구하고 본인처럼 '권한' 문제가 발생한 경우는 없었다.
여기서 발상을 전환 해 봤다. '로그가 잘못된 것이다'라고.
[정확히는 '상황' 자체는 맞지만, 그 원인이 '권한'이 아니라고 가정하였다.]
그래서 가장 먼저 한 것이 디렉토리를 생성하고, 그 위치에 파일을 제작한 뒤에 덮어 쓰도록 구성하는 것이었다.
이 시점에서 잘 작동하기에, 문제의 원인을 '디렉토리의 부재'로 정정, 다시 작업하였다.
그 결과, 디렉토리가 없으면 디렉토리 생성 이후에 File.WriteAllText()로 작성하는 방식으로 구성, 완성시켰다.
이제 세이브 까지 작성 완료했다.
이제 남은 것은 에셋을 적용하는 것과 데이터 작업 뿐이다.
QA라던지 유저 테스트가 남아있고, 발표 자료도 만들어야 하지만, 그래도 얼마 남지 않았다.
남은 기간 힘내서 완성하자. 아자. 아자.
'스파르타 내일배움캠프 > 최종 프로젝트 리포트' 카테고리의 다른 글
최종 프로젝트 리포트 - 9 [최종 발표회] (0) | 2025.01.22 |
---|---|
최종 프로젝트 리포트 - 8 [빌드 - 유저 테스트 시작] (0) | 2025.01.13 |
최종 프로젝트 리포트 -6 [절차적 생성을 이용한 필드 무한 확장] (1) | 2025.01.09 |
최종 프로젝트 리포트 - 5 [중간 발표] (0) | 2025.01.07 |
최종 프로젝트 리포트 - 4 [컴포넌트 기반 오브젝트 풀] (0) | 2025.01.06 |