ISteamRemoteStorage API 메서드를 사용하여 모든 읽기/쓰기를 수행할 수 있으며, 이 API는 로컬 하드 드라이브의 게임 스토리지 폴더에 파일을 기록하고 이를 클라우드와 동기화합니다. 또는 컴퓨터의 파일 시스템에 직접 모든 읽기/쓰기를 수행한 다음, Steam Auto-Cloud를 사용하여 게임 데이터를 포함하는 로컬 폴더를 자동으로 클라우드와 동기화할 수도 있습니다.
XBOX Game Development Kit(GDK)는 두 가지 접근 방식 모두를 지원합니다.
- 코드 기반 클라우드 저장의 경우, GDK는
ISteamRemoteStorage의 메서드와 유사한 기능을 제공하는 보다 복잡한XGameSavesAPI의 간소화된 래퍼를 제공합니다. - Steam Auto-Cloud와 유사한 방식의 경우, GDK는 파일 I/O 코드를 변경할 필요 없이 지정된 로컬 폴더를 클라우드와 동기화하는 코드 없는 클라우드 저장을 사용하여 이전 타이틀을 PC 게임 저장으로 이식하기를 지원합니다.
래핑되지 않은 전체
XGameSaves API는 이 단순한 래퍼보다 더 많은 기능과 유연성을 제공합니다. 해당 API의 기능을 사용하고자 하는 경우에는 래퍼를 사용하지 않아야 하는데, 이는 게임이 두 방식 사이를 전환하거나 API 호출을 혼합하여 사용해서는 안 되기 때문입니다. XGameSaves API에 대한 자세한 내용은 게임 저장을 참조하세요.파일 작업 비교
다음 코드 예제는 Steamworks Remote Storage API 및 이와 동등한 GDK에서 기본 파일 작업을 수행하는 방법을 보여줍니다.provider 변수가 초기화된 Microsoft::Xbox::Wrappers::GameSave::Provider 객체에 대한 포인터를 보유하고 있다고 가정합니다.
Steam Remote Storage API를 사용하지 않고 Steam Auto-Cloud를 사용하기로 선택한 경우, Remote Storage API 호출을 이에 상응하는 파일 시스템 API 호출로 대체하세요.
파일 읽기
Steamworks
GDK
참조 문서
Microsoft.Xbox.Wrappers.XGameSave.Provider.Load파일 쓰기
Steamworks
XBOX Game Development Kit(GDK)
참조 문서
Microsoft.Xbox.Wrappers.XGameSave.Provider.Save파일 삭제
Steam에서는 클라우드의 파일을 삭제하고 로컬 사본은 유지하거나(FileForget), 두 위치에서 모두 파일을 삭제(FileDelete)할 수 있습니다. XGameSave 래퍼 API에는 FileForget과 동등한 기능이 없습니다. Delete 함수는 Steamworks의 FileDelete처럼 동작합니다.
Steamworks
XBOX Game Development Kit(GDK)
참조 문서
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string)
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string, std::string)
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string, BlobNames)
모든 파일 가져오기
Steamworks
XBOX Game Development Kit(GDK)
참조 문서
- Microsoft.Xbox.Wrappers.XGameSave.Provider.QueryContainers
- Microsoft.Xbox.Wrappers.XGameSave.Provider.QueryContainerBlobs
사용 가능한 공간 확인
다음 예제에서totalBytes는 클라우드 스토리지 공급자에서 게임에 부여된 공간의 양이며, availableBytes는 남아 있는 여유 공간의 양(즉, availableBytes = totalBytes – bytesUsed)입니다.
Steamworks
XBOX Game Development Kit(GDK)
참조 문서
Microsoft.Xbox.Wrappers.XGameSave.Provider.GetQuota용어의 차이
Steam에서는 원격 저장 데이터가 로컬 하드 드라이브의 파일처럼 동작하는 파일로 관리됩니다. 읽기 및 쓰기는 읽거나 쓸 파일을 지정하고, 해당 파일에 포함된 바이트를 가져오거나 설정하는 방식으로 수행됩니다. XBOX Game Development Kit(GDK)에서는 Steam 파일에 상응하는 것이 _blob_이며, blob은 _container_라고 하는 구조로 함께 그룹화됩니다. 컨테이너는 단순히 이름이 지정된 blob 그룹입니다. 예를 들어, 각 슬롯에 동일한 파일 이름이 있는 여러 사용자당 저장 슬롯을 허용하기 위해 컨테이너를 사용할 수 있습니다. 컨테이너가 제공하는 추가적인 조직화 계층이 필요하지 않다면, 모든 blob(파일)을 동일한 컨테이너에 배치하면 됩니다.컨테이너 이름에는 공백을 포함할 수 없습니다. 공백이 포함된
0x80830001(지정된 볼륨이 스토리지 계층을 지원하지 않음)을 반환합니다.
스토리지 제한
XBOX Game Development Kit(GDK)는 Steam보다 최대 blob/파일 쓰기 크기와 전체 스토리지 한도가 더 낮습니다. Steam에서는 각 파일 쓰기 작업이 100메비바이트(MiB)로 제한됩니다. 각 파일은 200MiB보다 클 수 없지만,XGameSave API와 해당 래퍼는 각 blob이 16MB보다 크지 않도록 허용하며 사용자당 게임당 최대 저장 허용량이 256MB입니다.
blob에 16MB보다 많은 데이터를 저장해야 하는 경우, 데이터를 여러 blob으로 나누고 한 번에 하나의 blob씩 데이터를 읽고 쓰기 위한 순차적 읽기/쓰기 함수를 구현해야 합니다.
래퍼 함수는 블로킹입니다
ISteamRemoteStorage 인터페이스는 읽기/쓰기 함수의 두 가지 버전(FileRead/FileWrite 및 FileReadAsync/FileWriteAsync)을 제공합니다. 후자는 파일 읽기/쓰기가 완료되면 콜백을 호출하는 비동기 함수입니다. 간소화된 XGameSave 래퍼 함수는 FileRead/FileWrite에 상응하는 비동기 버전을 제공하지 않습니다. 그러나 Provider::Load와 Provider::Save는 모두 블로킹이므로, 게임에서 사용할 때 이 점을 반드시 염두에 두세요.
이러한 이유로 Provider::Initialize는 UI 스레드에서 호출되면 예외를 던집니다.
초기화
다른 작업을 수행하기 전에 게임 솔루션에 래퍼용 헤더 파일을 포함시켜야 합니다. 이 파일은 _%GRDKLatest%\GameKit\Include\xgamesavewrappers.hpp_에서 찾을 수 있습니다.XGameSaves 래퍼의 메서드를 사용하기 전에, Provider 클래스의 인스턴스를 생성하고(게임의 생애 주기 동안 이에 대한 포인터를 보유해야 함) Provider::Initialize 메서드를 호출해야 합니다. 다시 강조하지만, 이 메서드는 UI와 별개의 스레드에서 호출되어야 하며 UI 스레드에서 호출되면 예외를 던진다는 점에 유의하세요. 래퍼 공급자를 초기화하려면 현재 사용자에 대한 XUserHandle과 게임의 서비스 구성 식별자(SCID)가 필요합니다.
