Xbox 服务游戏存储概述

本主题介绍什么是 Xbox 服务游戏存储及其功能,并演示如何配置它们。 Xbox 服务游戏存储服务为每个玩家或每个游戏的大量数据提供云存储。 可使用它存储玩家统计信息和资产。 所有 Xbox 平台上运行的游戏均可使用游戏存储。

Xbox 服务游戏存储的功能

Xbox 服务游戏存储包含以下高级功能。

  • 可以跨玩家、游戏和各种平台共享

  • 支持 JSON、二进制文件和配置文件

存储类型

存储类型 配额(托管合作伙伴) 配额(创意者计划) 用途 平台 玩家
受信任平台 每个用户 256 MB 每个用户 64 MB 已保存的游戏或游戏状态(游戏/暂停/继续)等每个玩家数据。 更安全,但具有平台限制。 任何平台均可读取,但仅 Xbox One 系列(或更高版本)、Xbox 360 或 Windows Phone 可写入。 可公开配置或仅所有者可配置。
通用平台 每个用户 64 MB 每个用户 64 MB 已保存的游戏或游戏状态(游戏/暂停/继续)等每个玩家数据。 任何平台均可读取或写入。 可公开配置或仅所有者可配置。
全局 256 MB 256 MB 每个人均可读取的数据,如名单、地图、挑战,或艺术资源。 仅可通过 Xbox 开发者门户或合作伙伴中心写入,任何平台均可读取。 所有用户均可读取。

调节限制

游戏在每分钟内所能读取或写入的次数并没有限制,但平均情况下,在一个小时的会话中,通常每分钟不超过一次。 例如,在会话开始时,可对一个游戏进行 60 次读取或写入,但在不到一个小时的剩余时间内,将无法再进行读取或写入。 为应对以后进行更多调用,应对游戏进行强化,以防 Xbox 服务需要限制请求。

注意

若游戏具有特殊分区要求,例如额外的读取或写入,请联系 Microsoft 代表。

数据类型

本部分介绍了三种支持的类型。

二进制信息

二进制信息包括图像、声音和自定义数据等内容。 因为数据必须通过 HTTP 传输,所以必须将二进制数据编码为 HTTP 支持的字符。 例如,可将数据转换成十六进制字符串或使用 base64 编码。 游戏存储不处理编码数据,因此当读取和写入游戏存储时,你的游戏必须为编码和解码数据使用相同的方案。

JSON 信息

JSON 信息包括结构化数据(键值对)。 可通过支持 JSON 对象的语言(如 JavaScript)来使用它们。 从 JSON 文件检索数据时,游戏可提供 selectQuery 参数,以在结构内返回特定项目。 例如,可使用包含以下信息的 JSON 文件。

{
"difficulty" : 1,
"level" :
    [
        { "number" : "1", "quest" : "swords" },
        { "number" : "2", "quest" : "iron" },
        { "number" : "3", "quest" : "gold" },
        { "number" : "4", "quest" : "queen" }
        ],
"weapon" :
    {
            "name" : "poison",
            "timeleft" : "2mins"
    }
}

注意

出于安全考虑,JSON 数据的第一个元素不得为数组。 提交根目录具有数组的 JSON 会被该服务拒绝。

你的游戏可以将 JSON 结构的某些部分选择为 selectQuery(例如 weapon.name),然后它将收到以下内容:

{
    "name" : "poison"
}

配置信息

配置 blob 是存储在全局游戏存储中的数据结构。 配置 blob 的格式与 JSON 对象的格式类似。 配置 blob 可包含虚拟节点,此节点从可能性列表返回设置。 虚拟节点对为特定情况(如用于游戏或区域设置)提供设置非常有用。 虚拟节点包含若干可能的设置和值以及用于从值中选择的条件。 在以下示例中,defaultCardDesign 设置可具有虚拟节点中的一个值。

{
    "defaultCardDesign":
    {
    "_virtualNode":
    {
        "_selectBy":"titleId",
        "_sourceNodes":
        [
        {"_selector":"123456799", "_data":"RobotUnicornCard.png,binary"},
        {"_selector":"default", "_data":"StandardCard.png,binary"}
        ]
    }
    },
}

当游戏读取此文件时,系统将从 \_sourceNodes 数组中选择一个值。 在这种情况下,将基于游戏的游戏 ID 选择此项目。 例如,玩游戏 12456799 的玩家将看到以下内容:

{
    "defaultCardDesign":"RobotUnicornCard.png,binary",
    "_sourceNodes":["defaultCardDesign:titleID:1234567899"]
}

未玩该游戏的玩家将看到以下内容:

{
    "defaultCardDesign":"StandardCard.png,binary",
    "_sourceNodes":["defaultCardDesign:titleID:default"]
}

游戏可定义与请求中的参数相匹配的自定义选择器。 例如,在此配置 blob 中请考虑以下 JSON 对象。

{
    "defaultCardDesign":
    {
        "_virtualNode":
        {
            "_selectBy":"custom:gameMode",
            "_sourceNodes":
            [
                {"_selector":"silly", "_data":"RobotUnicornCard.png,binary"},
                {"_selector":"serious", "_data":"SeriousCard.png,binary"},
                {"_selector":"default", "_data":"StandardCard.png,binary"}
                ]
        }
    },
    "backgroundColor":"green",
    "dealerHitsOnSoft17":true
}

游戏将在 customSelector 参数中传递一个字符串以选择要返回的项目。 例如,为获取第二个选项,游戏会请求 gameMode.serious 作为 selectQuery

开始使用 Xbox 服务游戏存储

  1. 确定要存储的数据类型。 示例包括已保存的游戏、游戏状态、每日挑战、游戏地图以及艺术资源。

  2. 确定访问数据所需的游戏和平台。 游戏存储支持来自单个平台上的单个游戏和来自多个平台上的多个游戏的云数据访问。