게임을 껐다 켜도 진행 상황이 남아 있으려면 세이브·로드 시스템이 필요합니다. 단순히 파일에 값을 적는 일처럼 보이지만, 무엇을 저장할지, 어떤 형식으로 쓸지, 업데이트 후에도 옛 저장 파일을 읽을 수 있을지까지 고민해야 합니다. 이 글은 싱글 플레이 게임 기준으로 세이브·로드 시스템을 만드는 순서를 정리합니다.
1단계: 무엇을 저장할지 정하기
게임 세계의 모든 것을 저장할 필요는 없습니다. 다시 계산하거나 다시 불러올 수 있는 것은 빼고, 플레이어의 선택과 진행 결과만 저장하는 것이 원칙입니다. 맵 모양은 게임 파일에 이미 있으니 저장하지 않고, 어떤 상자를 열었는지만 저장하는 식입니다.
- 플레이어: 위치, 체력, 레벨, 경험치, 장비
- 진행: 클리어한 스테이지, 퀘스트 상태, 대화 선택
- 세계 변화: 열린 상자, 처치한 보스, 해금된 지역
- 설정: 음량, 키 설정, 그래픽 옵션(보통 세이브와 분리해 따로 저장)
저장 항목은 기획자와 목록으로 정리해 두는 것이 좋습니다. 나중에 '이 값도 저장해야 했다'는 사실을 출시 뒤에 알게 되면, 이미 쌓인 세이브 파일을 고려하며 고쳐야 해서 작업이 훨씬 까다로워집니다.
2단계: 직렬화 형식 고르기
직렬화는 메모리 속 데이터를 파일에 쓸 수 있는 형태로 바꾸는 일이고, 역직렬화는 그 반대입니다. 어떤 형식을 쓰느냐에 따라 파일 크기, 속도, 다루기 쉬움이 달라집니다.
| 형식 | 장점 | 단점 |
|---|---|---|
| JSON | 사람이 읽을 수 있어 디버깅이 쉬움 | 파일이 커지고 쉽게 수정될 수 있음 |
| 바이너리 | 작고 빠름 | 직접 열어 확인하기 어렵고 구조 변경에 민감 |
| 엔진 기본 저장 기능 | 간단한 설정값 저장에 편리 | 큰 데이터나 복잡한 구조에는 부적합 |
개발 중에는 JSON으로 만들어 내용을 쉽게 확인하고, 필요하면 출시 전에 바이너리나 압축 형식으로 바꾸는 방식도 많이 씁니다. 객체를 통째로 저장하기보다 저장 전용 데이터 클래스를 따로 만들어 필요한 값만 옮겨 담으면 구조가 깔끔해집니다.
3단계: 저장 시점과 위치
수동 저장, 체크포인트 자동 저장, 일정 시간마다 자동 저장 중 어떤 방식을 쓸지는 기획과 함께 정합니다. 전투 중 저장을 막을지, 저장 슬롯을 몇 개 줄지도 함께 결정합니다.
저장 파일은 게임 설치 폴더가 아니라 운영체제가 사용자 데이터용으로 정해 둔 경로에 둡니다. 엔진마다 이 경로를 알려 주는 기능이 있습니다. 모바일과 콘솔은 플랫폼 규칙이 따로 있고, 클라우드 저장을 지원하는 플랫폼도 있어 출시 대상에 맞춰 확인해야 합니다.
4단계: 버전 관리
업데이트로 새 아이템이나 새 퀘스트가 추가되면 저장 데이터 구조도 바뀝니다. 이때 예전 세이브 파일을 읽지 못하면 플레이어 진행이 날아가는 큰 사고가 됩니다.
- 저장 파일 맨 앞에 버전 번호를 기록합니다.
- 불러올 때 버전을 확인하고, 옛 버전이면 새 구조로 바꾸는 변환 코드를 거칩니다.
- 새로 추가된 값은 기본값을 채워 넣습니다.
- 삭제된 항목은 무시하되, 오류로 멈추지 않게 합니다.
5단계: 파일 손상과 조작 대비
저장 도중 게임이 꺼지거나 배터리가 나가면 파일이 반쯤 쓰인 채 깨질 수 있습니다. 이를 막으려면 임시 파일에 먼저 다 쓴 뒤, 완료되면 원래 파일과 바꾸는 방식을 씁니다. 직전 세이브를 백업으로 하나 더 남겨 두면 손상 시 복구할 수 있습니다.
싱글 게임에서 저장 파일 조작을 완전히 막기는 어렵습니다. 체크섬(내용이 바뀌었는지 확인하는 값)이나 간단한 암호화로 우발적인 손상과 손쉬운 조작은 걸러 낼 수 있습니다. 온라인 게임에서는 중요한 데이터를 서버에 저장하므로 접근 방식이 다릅니다.
테스트할 때 확인할 것
- 저장 직후 불러왔을 때 모든 값이 같은가
- 저장 중 강제 종료해도 이전 세이브가 살아 있는가
- 이전 버전 세이브를 새 버전에서 불러올 수 있는가
- 저장 공간이 부족할 때 안내 메시지가 나오는가
SBS아카데미게임학원 게임프로그래밍 과정은 WinAPI 단계에서 파일 입출력을 다루고, 이후 엔진 기반 게임 시스템 구현으로 이어집니다.
자주 묻는 질문
유니티 PlayerPrefs로 세이브를 만들어도 되나요?
음량 같은 간단한 설정값에는 편리하지만, 진행 데이터처럼 크고 구조가 복잡한 저장에는 파일 기반 저장을 따로 만드는 것이 일반적입니다.
세이브 데이터 암호화는 꼭 해야 하나요?
싱글 게임은 필수는 아니지만 손상 확인과 간단한 조작 방지를 위해 체크섬 정도는 넣는 경우가 많습니다. 온라인 요소가 있다면 서버 검증이 우선입니다.
