Table of Contents

10. SaveSystem

왜 필요한가

저장 포맷(MemoryPack), 실패 처리, 슬롯 관리가 프로젝트마다 다르면 세이브 버그가 나기 쉽다. SaveSystem이 표준을 강제한다.

언제 사용하는가

게임 진행 저장/불러오기, 슬롯 존재 확인이 필요할 때.

프로젝트에서 어떤 역할인가

로컬 저장 데이터는 MemoryPack으로 직렬화한다 (JsonUtility 금지). Save.SaveCount/LoadCount/FailCount/LastSaveDurationMs를 Diagnostics에 자가 등록한다.

실제 게임에서는 언제 호출되는가

체크포인트 도달, 수동 저장, 앱 종료 직전.

코드 예제

[Inject] private ISaveSystem _save;
await _save.SaveAsync("slot1", myData);
var loaded = await _save.LoadAsync<MyData>("slot1");

관련 Sample

Samples/Save/SaveSystemSample.cs

Best Practice

저장 실패는 예외가 아니라 Result<T>로 반환되므로 반드시 IsSuccess를 확인한다. 에러 처리는 Controller 책임, Service는 결과만 반환한다.

자주 하는 실수

  • 저장 데이터에 JsonUtility 사용
  • 저장 실패 결과를 확인하지 않고 무시

실습 과제

  1. 임의의 저장 데이터 클래스를 만들어 SaveAsync/LoadAsync로 왕복시켜본다.
  2. Diagnostics WorkspaceSave.FailCount를 확인한다.

이전 문서 / 다음 문서

이전: 09_SceneSystem.md 다음: 11_Localization.md

관련 API

MCP_Index.md Save 섹션