本地存储
在 Xbox One 主机上可访问四种类型的本地存储:
- 临时本地存储
- 安装的游戏数据
- 开发者暂存分区
- 永久性本地存储
存储类型 | 位置 |
---|---|
安装的游戏数据 | G:\ |
临时本地存储 | T:\ |
开发者暂存分区 | D:\ |
永久性本地存储 | 调用 XPersistentLocalStorageGetPathSize 和 XPersistentLocalStorageGetPath 以获取路径大小和数据。 |
可下载内容 | 调用 XPackageMount 以装载 DLC,并调用 XPackageGetMountPath 以获取路径。 |
XR-133:本地存储写入限制
注意
在 Xbox Series S、Xbox Series X 或同一主机家族中的任何其他主机上运行的游戏,不得在连续 5 分钟的时段内将超过 1 GiB 的数据写入永久性本地存储 (PLS) 或临时本地存储。 写入数据超出 1GiB 的游戏不会成功通过认证测试。 超出写入限制后,开发人员可以查看警告的 PIX 计时捕获。 此外,游戏还可通过调用 XPackageGetWriteStats 在运行时监视其写入统计信息。
临时本地存储
临时本地存储对游戏公开为驱动器 T。游戏运行期间,对任何 XtfFileIO 命令使用 /x:/title 即可访问临时存储。 临时本地存储允许存储和远程检索临时文件,如日志文件。 写入到临时本地存储的文件保证仅在游戏运行时可用。 无法保证写入 T:驱动器的数据将保留从游戏启动到游戏启动。 在游戏终止后的某个时间点,可能会删除临时存储。
临时本地存储还具有以下功能:
- 2 GB 专用存储
- 内容在游戏终止后删除。
- 暂停和恢复时内容仍然存在,包括快速恢复。
安装的游戏数据
当前运行游戏的已安装游戏数据位置映射到驱动器 G。使用打包生成时,此卷在正在运行的游戏视图内是只读的。
开发者暂存分区
开发者暂存分区公开为驱动器 D。开发者暂存分区是仅在开发期间使用的本地存储。 您应该以零售模式编译对它的所有引用,以避免任何潜在的问题。
永久性本地存储
游戏可以请求访问作为其清单中一部分的永久性本地存储 (PLS)。
这一存储空间旨在用作存储非游戏保存数据(如游戏的重播和自定义呈现录制内容)的长期缓存。 PLS 并非设计用作主要数据存储空间。 切勿将其用于游戏保存、内容更新,或任何其他必须存在以使游戏运行的数据。 而是使用已连接存储 API 来存储游戏保存,或者,可以选择对仅联机的游戏使用 Xbox 服务游戏存储或发布者托管的云存储服务。
PLS 具有以下特征:
- 特定的游戏:此存储空间只能由请求它的游戏访问。
- 特定于主机的:此存储空间始终在特定于主机的 XVD 中创建(即使游戏安装在外部驱动器上),且不能在另一台主机上使用。
- 保证的分配:系统确保允许游戏启动之前已经分配了空间。 如果硬盘驱动器可用空间不足,系统将提示用户释放空间以便允许游戏运行。
- 用户控制:用户可以从系统 shell 删除的存储空间。 系统从不会自动删除该空间中的任何项。
- 绑定到游戏安装生存期:卸载游戏时,同时删除相关的本地存储空间。 如果重新安装游戏,则不会还原以前存在的任何数据。
- 复原和防篡改:该存储空间已加密并已进行完整性检查,所以无法篡改游戏所保存的数据。
要申请 PLS,将以下标记作为<游戏>的子级添加到 MicrosoftGame.config。
<?xml version="1.0" encoding="utf-8"?>
<Game configVersion="1">
<!-- snip -->
<PersistentLocalStorage><SizeMB>1024</SizeMB></PersistentLocalStorage>
</Game>
要获取本地永久性存储空间,请调用 XPersistentLocalStorageGetPathSize 和 XPersistentLocalStorageGetPath,这将返回游戏的永久性存储的路径。 可用空间总量由游戏在本地存储的 MicrosoftGame.config 声明中请求的内容来确定。
如果游戏使用内容更新来增加其请求的永久性本地存储空间的大小,以前的存储空间将被删除,并且其内容将在升级时会丢失。
可共享的永久性本地存储
游戏可以选择与其他游戏以只读方式共享其永久性本地存储。 允许一个游戏读取另一个游戏的 PLS 的关系如下所述:
产品共享 PLS | 产品读取可共享 PLS |
---|---|
特许经营游戏中心 | 依赖于此特许经营游戏中心的所有中心感知游戏,以及与此特许经营游戏中心有 RelatedProduct 关系的所有游戏。 |
中心感知游戏 | 关联的特许经营游戏中心和与此游戏有 RelatedProduct 关系的所有游戏。 |
中心未感知游戏 | 与此游戏有 RelatedProduct 关系的所有游戏。 |
若要使 PLS 可共享,请将标记<“可>共享”作为 PersistentLocalStorage> 的<子级添加到 MicrosoftGame.config。
<?xml version="1.0" encoding="utf-8"?>
<Game configVersion="1">
<!-- snip -->
<PersistentLocalStorage>
<Shareable>true</Shareable> <!--This is optional, and the default value is false -->
</PersistentLocalStorage>
</Game>
注意
如果游戏将其 PLS 标记为可共享,则它应确保在暂停游戏之前关闭其 PLS 的所有句柄,否则游戏暂停将失败,游戏将终止。
自增长永久性本地存储
可增长持久本地存储是 PLS 的扩展,可使游戏请求更大数量的本地存储空间的访问权限,而无需永久保留该空间。 它适用于会发生某些需要额外空间的情况(例如,用户生成的内容 (UGC) 下载)或有大型本地重播文件(并非所有用户都可使用)的游戏使用。
若要请求可增长 PLS,请将以下标记作为<游戏>的子级添加到 MicrosoftGame.config。
<?xml version="1.0" encoding="utf-8"?>
<Game configVersion="1">
<!-- snip -->
<PersistentLocalStorage>
<!-- <SizeMB>1024</SizeMB> --Optional. To be used if your title always wants 1024 MBs pre-allocated even before launch -->
<GrowableToMB>20480</GrowableToMB> <!-- This is not a static reservation, but the largest size your title PLS can grow to -->
</PersistentLocalStorage>
</Game>
在写入可增长 PLS 之前,游戏必须使用 XPersistentLocalStorageGetSpaceInfo API 检查可用空间。 请注意,调用 GetDiskFreeSpaceExW 只会告诉游戏 PLS 中剩余的最大可用空间量 - 这不能保证可用。 XPersistentLocalStorageGetSpaceInfo 还将返回总可用空间以及可用空间 (可用空间的最小值和基础驱动器上的实际空间)。
如果游戏需要比可用空间更多的空间,且尚未填充其自增长 PLS 分配,但驱动器上的基础空间不足,无法增加 PLS XVD,你将需要提示最终用户通过使用 XPersistentLocalStoragePromptUserForSpaceAsync 函数来释放游戏所需的额外空间。
如果游戏使用内容更新来从使用不可增长的持久性本地存储更改为可增长的存储空间,以前的存储空间将被删除,并且其内容将在升级时会丢失。
可下载内容
可下载内容一旦安装,即可按需装载和卸载。 调用 XPackageMount 以装载 DLC,并调用 XPackageGetMountPath 以获取路径。
注意
从不 对返回的路径值进行硬编码,因为它们可能会随时间而变化,并且仅在装载包后才有效。
使用远程主机工具访问游戏数据
通过使用 /X 开关指定 /title,远程主机工具可使用与运行的游戏相同的映射。 然后,远程主机工具可访问写入暂存卷的数据以及当前游戏的已安装游戏数据。
要将暂存卷文件复制到您的开发电脑,请按如下方式使用 xbcp:
xbcp /x:/title xd:\file-namec:\local-path
要将文件从您的开发电脑复制到游戏卷,请按如下方式使用 xbcp:
xbcp /x:/title c:\file-namexg:\dest-path
游戏运行时,只能从开发电脑访问 PLS。 可以使用 xb 命令将文件复制到该位置或从中复制文件。 例如:
xbcp /x:/title c:\file-namexr:\dest-path
有关使用远程主机工具处理主机上的文件所用语法的更多信息,请参阅文件复制 (xbcp.exe)(NDA 主题)要求授权。