선생님: 오늘은 비디오 게임의 세이브 시스템에 대해 이야기할 거예요. 여러분은 게임 진행 상황을 세이브해 본 적이 있나요?

학생 1: 네, 해봤어요. 저는 게임을 멈출 때마다 진행 상황을 세이브해서 나중에 중단한 부분부터 이어서 해요.

선생님: 그렇군요! 그럼 게임에서 세이브 시스템이 어떻게 작동하는지 알고 있어요?

학생 2: 잘 모르겠어요.

게임 세이브 시스템의 작동 원리

선생님: 그럼 제가 설명해 드리죠. 게임 세이브 시스템은 디스크 파일이나 메모리 카드에서 게임 월드의 상태를 불러온다는 점에서 월드 청크(world chunk) 로딩 시스템과 비슷합니다. 하지만 두 시스템에는 몇 가지 차이점이 있어요. 월드 청크와 저장된 게임 파일의 차이점을 설명해 볼 수 있나요?

학생 3: 월드 청크에는 환경과 같은 정적 오브젝트를 포함한 게임 월드의 모든 오브젝트에 대한 정보가 포함되어 있는 반면, 저장된 게임 파일에는 동적 오브젝트와 플레이어의 진행 상황에 대한 정보만 포함되어 있습니다.

선생님: 맞아요! 세이브된 게임 파일은 월드 청크 데이터를 읽어서 확인할 수 있는 정보를 중복으로 저장할 필요가 없습니다. 또한 모든 오브젝트 상태의 모든 세부 사항을 저장할 필요도 없고, 플레이어가 중단한 부분부터 계속 진행하기 위해 필요한 정보만 저장하면 된답니다.

학생 2: 그럼 저장된 게임 파일은 월드 청크 파일보다 크기가 작다는 건가요?

선생님: 네, 맞아요. 훨씬 더 작을 수 있어요. 그리고 일부 게임에서는 게임의 특정 지점에서만 저장할 수 있기 때문에 저장된 게임 파일은 더 작아집니다.

세이브 위치를 제한하는 이유

학생 1: 어떤 게임들은 왜 저장할 수 있는 시점을 제한하나요?

선생님: 저장된 게임 파일 크기를 줄이기 위한 한 가지 방법이죠. 또한 언제 어디서나 저장할 수 있다면 게임이 너무 쉬워질 수도 있죠. 일부 게임은 난이도가 높도록 설계되었기 때문에 저장을 제한하면 게임이 더 어려워질 수 있습니다. 하지만 어떤 게임은 원할 때마다 저장할 수 있어요.

많은 게임들이 세이브 위치를 제한한다

학생 3: 하지만 그러면 저장된 게임 파일이 너무 커지지 않나요?

선생님: 네, 그렇죠. 어디서나 저장할 수 있으면 게임 상태에 대한 더 많은 정보를 저장해야 하므로 저장된 게임 파일이 커집니다. 그리고 몇몇 게임은 저장된 게임에 월드 청크와는 다른 형식의 데이터 포맷을 사용해야 하는 경우도 있어요.

학생 1: 저장된 게임 파일을 압축하여 더 작게 만들 수 있나요?

선생님: 네, 데이터 압축을 사용하여 저장된 게임 파일을 더 작게 만들 수 있어요. 또한 플레이어가 중단한 부분부터 계속 플레이하는 데 필요하지 않은 경우 게임 상태에 대한 특정 세부 정보를 제외할 수도 있지요.

학생 2: 그럼 세이브된 게임 시스템은 게임 세계의 특정 시점에 대한 캡처본 같은 건가요?

선생님: 네, 그렇게 생각하면 좋아요. 나중에 게임 세계로 돌아와서 중단한 부분부터 다시 시작할 수 있도록 게임 세계를 고정시키는 방식이죠.

두 가지 게임 저장 방식

선생님: 이제 월드 청크와 세이브 게임 파일의 차이점을 이해했으니 게임 세이브를 위한 두 가지 주요 접근 방식에 대해 이야기해 볼게요. 첫 번째 접근 방식은 체크포인트라고 하는 특정 지점에서 게임을 저장하는 방식이에요. 두 번째 접근 방식은 ” 어디서나 저장(save anywhere)” 방식으로, 플레이어가 게임 플레이 중 언제든지 게임을 저장할 수 있어요.

학생 3: 왜 어떤 게임에서는 아무 곳에나 저장하는 대신 체크포인트를 사용하나요?

선생님: 체크포인트를 사용하면 게임 상태에 대한 대부분의 정보가 각 체크포인트 부근의 현재 월드 청크에 이미 저장되어 있기 때문에 저장 공간이 적게 필요하다는 이점이 있어요. 즉, 체크포인트를 기반으로 저장된 게임 파일은 훨씬 더 작아질 수 있다는 이야기죠. 하지만 체크포인트가 서로 너무 멀리 떨어져 있으면 플레이어가 진행 상황을 잃어버리거나 게임의 일부 구간을 다시 플레이해야 하는 불편함을 겪을 수 있다는 단점이 있어요.

학생 2: “어디서나 저장”은 어떤가요? 게임에서 왜 이런 방식을 사용하나요?

교사: ‘어디서나 저장’을 사용하면 플레이어가 게임 플레이 중 언제든 게임을 저장할 수 있어 매우 편리해요. 하지만 게임 플레이와 관련된 모든 게임 오브젝트의 현재 위치와 내부 상태를 저장하고 나중에 게임을 다시 로드할 때 이를 복원해야 하므로 보다 많은 저장 공간이 필요해지죠. 즉, 세이브된 게임 파일에 포함된 정보는 월드 청크에서 월드의 정적 컴포넌트를 뺀 것과 기본적으로 동일합니다.

학생 3: 그러니까 게임을 저장할 때 모든 오브젝트 상태의 세부 정보를 모두 저장할 필요는 없다는 거죠?

선생님: 맞아요. 게임플레이에 영향을 주지 않는 일부 오브젝트는 아예 생략할 수 있습니다. 어떤 게임 오브젝트의 경우 부분적인 상태 정보만 저장하면 될 수도 있지요. 게임플레이와 관련된 정보만 저장하면 되고, 플레이어가 저장하고 다시 로드하기 전후의 게임 월드 상태를 알아볼 수 없도록 하면 됩니다.

효과적인 세이브 시스템 구현 방법

학생 1: 그렇다면 세이브 게임 시스템을 구현하는 가장 좋은 방법은 무엇인가요?

선생님: 가장 좋은 방법은 게임과 플레이어의 선호도에 따라 달라져요. 어떤 게임은 체크포인트가 잘 어울리는 반면, 어떤 게임은 ‘어디서나 저장’ 시스템이 더 적합하기도 해요. 어떤 방식을 사용하든 저장된 게임 파일 크기를 최대한 작게 유지하는 것이 중요해요. 불필요한 정보를 생략하거나 데이터 압축을 사용하면 가능합니다. 또한 플레이어의 불만 정도를 염두에 두고 합리적인 지점에서 게임 진행 상황이 저장되도록 하는 것도 매우 중요해요.

참고한 도서: Game Engine Architecture, Third Edition

추천 학습 자료