Steamworks 文献库
Steam 云
简要说明
Steam 云会在 Steam 服务器上自动存储您游戏的文件,这样您的玩家就可以从任意的计算机登录 Steam 并访问自己保存的游戏。
集成水平
需要在 Steamworks 网站上配置文件路径。 此外,还可以选择在游戏内代码中使用某些 API 来调用 Steamworks,以进行上传、下载、枚举和删除。

Steam 云概览

Steam 云为您的游戏提供了一个简单而透明的远程文件存储系统。 在自动云配置中指定的文件或使用云 API 写入磁盘(创建、修改、删除等)的文件将在游戏退出后自动复制到 Steam 服务器上。

如果用户换了一台电脑使用,在游戏启动之前,文件会自动下载到新电脑上。 然后,游戏可通过云 API 读取文件,或像往常一样直接从磁盘读取文件。 请避免设置电脑特定配置,例如视频设置。

Steam 客户端确保了文件在用户可能访问的所有电脑上都能保持同步。

用户可以在 Steam 云设置下通过取消勾选“为支持的程序启用 Steam 云同步”来全面禁用云同步。

用户还可以在每个游戏的属性中禁用单个游戏的云同步。

Spacewar_Cloud_Properties.png

备注和最佳实践


在每次会话开始和结束后,Steam 会为用户同步您游戏的 Steam 云文件;记住这点很重要。 任何在会话中发生改变的相符文件都会立即在会话后上传至云存储。 如果您的游戏要将非常大的文件,或是很多小文件,写入 Steam 云,那么这可能会对用户的网络带宽造成可见的影响,也会延迟他们关闭 Steam 或是重新启动游戏的速度。

总体来说,较小的文件处理起来会更好。 如果某用户的保存状态可拆分为频繁变动及不频繁变动的不同类型,我们建议为这些类型分别使用不同的文件。 这样一来,没有改变的状态就不会在每次会话后都重新上传了。

文件大小限制


Steam 云对文件大小的绝对限制可能会随着时间而改变。 以下是一些当前的限制和临界值:

大小限制
100MB调用 ISteamRemoteStorage::FileWrite 或 ISteamRemoteStorage::FileWriteStreamWriteChunk 的大小上限
256MB可能会造成所选择的存储终结点对用户的位置而言并非最佳,对上传/下载性能带来消极影响

初始设置

要设置 Steam 云,您必须在 Steamworks 应用管理员面板中的 Steam 云设置页面设置每个用户的字节配额每个用户的文件数量配额选项。

此配额按用户、按游戏在每款启用云的游戏上强制执行。 我们建议您为您的游戏设置合理的值。

注意: 务必点击页面底部的“保存”,并发布您更新的设置。 发布后,拥有您的游戏的所有人都将在 Steam 客户端看见云图标。

如果您的游戏已经公开发布,那么您可以勾选标有仅为开发人员启用云支持的复选框。 如果仅限开发者模式启用,那么只有拥有您产品的“Developer Comp”权限的 Steam 帐户能看见云图标,并且能够使用 Steam 云。 这样即可安全地测试 Steam 云集成,也不会破坏公共用户体验。 这对于未发行游戏不会造成任何影响,因为还没人拥有该游戏,他们无法看到或访问该特定 App ID 的任何云存储。

通过填写共享的云 App ID 字段,您可以在两个 App ID 之间共享云存储空间。 此操作最常用于在试用版和完整版之间共享游戏存档。 值为 0 则禁用此功能。

Steam 云 API 和 Steam 自动云

Steam 提供了使用 Steam 云的两种不同方法,请继续阅读以了解这两种方法的不同之处,确定哪种方法最适合您的应用程序。

首先是 Steam 云 API。
该云 API 提供了一系列的功能,允许您直接将 Steam 云集成到您的游戏中。 该云 API 将单个 Steam 用户文件互相分离,从而加大了对 Steam 云的控制程度。

Steam 云 API 通过 ISteamRemoteStorage API 接口公开,您可以在 Steamworks API 示例应用程序(SpaceWar)项目中找到示例用法。

其次是 Steam 自动云
Steam 自动云针对您选择不集成 Steam 云 API 的游戏而设计。 它虽然上手快速简便,但缺乏 Steam 云 API 提供的灵活性。

如果您偏好更加深度地集成 Steam Cloud(比如,允许选择将哪些存档文件存储在云端),那么您应该使用云 API。 如若不然,您可以使用 Steam 自动云。

Steam 自动云

Steam 自动云是 Steam 云 API 的替代品,无需编写代码或以任何方式修改游戏,应用即可使用 Steam 云。 您只需指定出想要保存到云上的文件组。 Steam 将在应用程序启动和退出时自动同步文件组。 请避免针对特定电脑的配置,例如视频质量。
注意:将会在您的 Steamworks 云路径指明的每个位置生成 steam_autocloud.vdf 文件。 该文件由 Steam 使用,您的游戏可忽略。

设置

完成初始设置后,Steam 自动云的配置栏将在 Steam 云设置页面解锁。

根路径对保存至 Steam 云中的文件组进行了描述。 每个根路径可具体指定单个文件,也可宽泛指定给定子文件夹下的所有文件。 请使用一个新的路径来同步每组文件。

一个根路径由 5 个部分组成:
  1. 这是一个预先确定的路径列表,游戏保存通常位于此处。
    支持的操作系统对应路径
    应用安装目录全部[Steam Install]\SteamApps\common\[Game Folder]\
    SteamCloudDocuments全部平台特定路径,例如:在 Linux 上为 ~/.SteamCloud/[username]/[Game Folder]/
    WinMyDocumentsWindows%USERPROFILE%\My Documents\
    WinAppDataLocalWindows%USERPROFILE%\AppData\Local\
    WinAppDataLocalLowWindows%USERPROFILE%\AppData\LocalLow\
    WinAppDataRoamingWindows%USERPROFILE%\AppData\Roaming\
    WinSavedGamesWindows%USERPROFILE%\Saved Games\
    MacHomemacOS~/
    MacAppSupportmacOS~/Library/Application Support/
    MacDocumentsmacOS~/Documents/
    LinuxHomeLinux~/
    LinuxXdgDataHomeLinux$XDG\_DATA\_HOME/
  2. 子目录

    与根相关的云存储文件的子目录路径。 如子目录不存在,请使用“.”。

    自动云特殊路径值
    自动云允许在子目录路径中使用唯一的 Steam 用户标识符。 您可以为使用电脑的每位 Steam 用户单独存储文件。 您可以在您的游戏中使用 ISteamUser::GetSteamID 获取当前用户的 SteamID 或 AccountID,用于保存和读取。
    • {64BitSteamID} - 在 Steam 路径中使用此变量,插入用户的 64 位 Steam ID。 64 位的 Steam ID 示例:76561198027391269
    • {Steam3AccountID} - 在 Steam 路径中使用此变量,插入用户的 3 位 Steam 帐户 ID。 帐户 ID 示例:67125541
    示例:SavesDir/{64BitSteamID}
  3. 模式

    匹配的文件掩码模式。 您可使用 * 作为通配符。 如果您希望目录中包括所有文件,只需使用 *

    示例:*.sav
  4. 操作系统

    设置作为这些文件同步来源的和同步目的地的操作系统。 仅在文件为操作系统专用时才作要求,希望不会出现这种情况!
  5. 递归

    查找匹配文件时包括子目录下的文件。 此操作对于具有非确定性名称,例如非 Steam 用户名或 ID 的子目录很有帮助。 如果使用 Steam ID,强烈推荐在子目录字段中使用特殊路径值。

根先决替代

如果您的应用程序是跨平台的,并且每个操作系统都需要不同的目录, 您可以使用根先决替代功能来指定您在上方设置的根路径的先决替代。

上面指定的根路径能够被先决替代,以对应另一个操作系统上的不同路径。 如果您使用根先决替代,则必须在上面的根路径操作系统下拉菜单中指明[所有操作系统]。

根先决替代由 5 个部分组成。
  1. 原始根

    对应于您上面设置的根之一。
  2. 操作系统

    使用此先决替代的操作系统。
  3. 新根

    原始根映射到指定操作系统的新位置。
  4. 添加/替代路径

    您可以选择性地添加插入到新根和原始子目录之间的子目录路径。
  5. 替代路径

    一旦启用,将导致在“添加/替代路径”中指定的路径完全替换原始子目录。

示例:为 Unity 应用程序配置自动云

下面是一个为配合 Unity 和 Application.persistentDataPath 属性使用而设置自动云的例子,后者每个操作系统的值都不同。 Windows 版本被配置为根路径,在 Unity 中公司将设置为 DefaultCompany,项目名设置为 AutocloudSample。 在 macOS 和 Linux/SteamOS 上,在“添加/替代路径”字段中设置 Application.persistentDataPath 的替代路径,并启用“替代路径”。

有了这些设置,自动云文件将在三个文件夹中同步,如预览示例所示。

Cloud_Unity_Auto-Cloud_Example.png

预发行测试

如果您正在为已发行游戏添加 Steam 自动云,并且您已经在初始设置中启用了仅限开发者模式,那么您必须完成一些额外的步骤来测试功能。
  1. Sign in to Steam with an account that owns the app that you are testing.
  2. 在您的浏览器中导航至 steam://open/console,打开 Steam 控制台。
  3. 在控制台中输入 testappcloudpaths<AppId> 以及您正在测试的给定 App ID, 如:testappcloudpaths 480
  4. 在控制台中输入 set_spew_level 4 4
  5. 从 Steam 启动您的应用程序。
  6. 检查控制台活动,如果文件已经存在于自动云路径中,那么您应该看到文件被上传。 否则,从您的应用程序中保存一些文件,然后关闭此应用程序来触发同步。
  7. 换一台 PC,重复以上步骤,以测试从 Steam 自动云下载文件。
  8. 确保在所有支持的操作系统上进行测试。
  9. 设置 testcloudapppaths 0set_spew_level 0 0 以结束测试。 您可重新启动 Steam 客户端以删除控制台选项卡。

不要忘记禁用仅限开发者专用模式,并在完成测试时发布更改。

调试

首先,永远确保您已经在 Steam 合作伙伴网站上发布了您的更改,并已等待最多 10 分钟或已重新启动了您的 Steam 客户端来接收已发布的更改。

如果您的 Steam 云出现问题,您应该检查位于 %Steam Install%\logs\cloud_log.txt 的日志文件。

参见Steamworks API 调试,了解更多信息。