UDN
Search public documentation:

SteamCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

Steam

文档概要:如何在虚幻引擎3中使用及实现Steam集成。

文档变更记录:由John Scott创建, Josh MarkiewiczSteamPipe方面的内容进行了更新 .

使用Steam客户端

获取最初的游戏(在设置内容服务器后)

  • 获得最新版本的Steam SDK,并把sdk/client/Steam.exe和sdk/client/Steam.cfg复制到本地文件夹。
    • 授权用户可以从 '//depot/UnrealEngine3/Development/External/Steamworks/sdk/client/...'中复制它。
    • UDK用户可以从这里https://partner.steamgames.com/home注册并下载。
  • SteamPipe 内容发布
    • 将'steam_dev.cfg'和客户端放在相同的目录中,并添加@LocalContentServer "内容服务器ip"。
  • ContentTool(内容工具) 已废弃
    • 请确保'steam.cfg'是可写的,并设置 'SdkContentServerAdrs'为您正在运行您的本地内容服务器的机器的IP地址。
  • 运行'Steam.exe'
  • 在'My games(我的游戏)'标签面板上右击您游戏并进行安装(我们这里是‘虚幻开发工具包’)。
  • 当安装完成后,右击鼠标并‘Launch game(启动游戏)’。

获得更新 (当设置完内容服务器后)

  • 只要正在运行着Steam 客户端,那么更新是自动进行搜索获取的。
    • 如果您不想等待查询时间间隔,您可以重新启动Steam 客户端。

注意事项(仅针对已废弃的ContentTool(内容工具))

  • 如果您获得了一个更新,但是本地内容服务器有一个全新的版本(不是迭代的版本),那么客户端将会感到困惑。要想修复这个问题,那么请删除您本地文件夹中除'Steam.exe'和'Steam.cfg'之外的所有文件,然后重新启动。
    • 在初期开发时,这种情况很容易发生。

使用SteamPipe进行内容发布

SteamPipe是Valve最新最有效的将内容发布到Steam客户端的方法。它由两个部分组成;“Content Builder(内容编译器)”,一个SteamCmd.exe可执行文件及所有用于描述游戏及其内容的配置脚本;"Content Server(内容服务器)",一个可以本地运行的网络服务,提供游戏镜像。

在开始之前,请确保从您的Steam技术账户经理获得一个AppId及针对您的游戏的一组DepotId。

针对SteamPipe的所有文档,可以在Valve合作伙伴网站找到。

  • 按照*"Steam Build Account(Steam编译账户)"* 下的指示来创建一个制作游戏的编译账户。
  • 按照 "Initial Setup for New SteamPipe Apps(新SteamPipe应用程序初始设置)" 中的指示来配置游戏相关的元数据。

Steam SDK目录结构和\sdk\tools\steampipe\ 目录

SteamPipe工具位于\ContentBuilder\ 目录中

  • \Builder\ 目录中包含了steamcmd.exe,它是用于创建版本的主要工具
  • \Scripts\ 包含了游戏depot(库)的编译脚本 (这个可以改变,Epic将脚本文件(.vdf)存储在\MyGame\Build\Steam目录中,以便进行更好的管理)
  • \Content\ 包含了要编译到库中的所有游戏文件 (这个可以改变,Epic使用编译机器上的根路径\SteamContent\ 目录)
  • \Output\ 包含了编译日志,库缓存及中间文件 (这项可以改变, Epic使用编译机器上的根路径 \SteamContent\目录)

创建某种本地目录结构

从编译机器根路径开始创建 \SteamContent\ 目录(尽管从技术上讲,该目录可以在任何地方)。该文件夹应该包含两个额外的文件夹

  • \ContentBuilder\
    • 创建一个名称为'output' 的目录,这里存放了游戏镜像缓存
    • 包含了*.csd 和*.csm文件,这些文件是真正的缓存文件,可以不时地删除它们,但会导致下次编译速度变慢。
  • \ContentServer\
    • 这是Mongoose网络服务器的部分目录结构,包含了真正的编译镜像。
    • 创建一个名称为 'htdocs' 的目录,这里是和服务器内容相关的真正的游戏镜像和文件。
    • 这是您通过浏览器访问网络服务器时看到的根目录。

运行SteamCmd.exe

SteamCmd.exe第一次运行时,它将下载它所需的所有文件并放到其目录中,和Steam客户端很像。

注意: 如果该工具在正常登陆时提示错误或警告,那么说明该编译账户被Steam Guard保护起来了。在尝试重新运行之前,请检查针对Steam Guard源码的编译账户的特定邮件地址,并运行 steamcmd.exe "set_steam_guard_code emailedcodehere"

注意: 如果运行steamcmd.exe导致如下错误: "SteamUpdater: Error: Steam needs to be online to update. Please confirm your network connection and try again.(Steam需要联网更新。请确认您的网络是否连接并尝试。)" 解决方法: 跳转到 Internet Options(网络选项)->Connections(连接)->Lan Settings(局域网设置),并选中自动检测设置。(该问题在它们的常见问题解答中出现过但很难找到,我自己也遇到过该问题)

创建Depot(库)编译配置文件

在 \ContentBuilder\scripts文件夹中有一些示例脚本,但它看上去如下所示:

"DepotBuildConfig"
{
  "DepotID" "<yourdepotid>"

  // include all files recursively
  "FileMapping"
  {
    "LocalPath" "*"
    "DepotPath" "."
    "recursive" "1"
  }

  // but exclude all symbol files
  // "FileExclusion" "*.pdb"
}

创建应用程序编译文件

应用程序编译文件将所有depot(库)编译配置连接到一个游戏镜像中,如下所示:

"appbuild"
{
   "appid"   "<yourappid>"
   "desc" "<descriptive build name>" // description for this build
   "buildoutput" "D:\SteamContent\ContentBuilder\output\MyGame\" // build output folder for .log, .csm & .csd files, relative to location of this file
   "contentroot" "D:\Builds\UE3\" // root content folder, relative to location of this file
   "setlive"   "local" // branch to set live after successful build, none if empty
   "preview" "0" // to enable preview builds
   "nobaseline" "0" // build without using baseline manifest
   "local"   "D:\SteamContent\ContentServer\htdocs"   // set to file path of local content server
   "depotsskipped" "0" // if not partial build, fail if not all depots are included

   "depots"
   {
      "<firstdepotid>" "depot_build_<depotid>.vdf"
   }
}

SteamPipe支持三种编译类型:

  • "Preview(预览)" 仅编译输出日志和验证文件,用于在设置版本时进行快速迭代。
  • "Local(本地)" 针对本地内容服务器(LCS“ Mongoose服务器”)编译,用于游戏镜像的快速下载和本地存储。
  • "SteamPipe" 编译并上传到Valve服务器进行内容发布

运行应用程序编译文件脚本

以下示例将会运行上面的应用程序编译脚本来创建具有一个已经定义depot(库)的游戏镜像。

builder\steamcmd.exe +登录账户密码 +run_app_build ..\scripts\app_build.vdf +quit

您第一次运行时可能会将"preview(预览)“设置为"1",以确保manifest(验证效果)是正确的,当验证正确后再将其设置回"0"。

注意: 如果该版本在正常登陆时提示错误或警告,那么说明该版本账户被Steam Guard保护起来了。在尝试重新运行之前,请检查针对Steam Guard源码的编译账户的特定邮件地址,并运行 steamcmd.exe "set_steam_guard_code emailedcodehere" 。

管理版本

成功运行应用程序编译脚本后,可以通过 Valve的管理员网站(在App Admin, Technical Data, Builds 选卡下面)该版本。

请按照 SteamPipe 文档中的指示进一步在后端上设置元数据。

Steam本地内容服务器(Mongoose)

本地内容服务器(LCS)是位于编译机上的网络服务器,用于发布内容到Steam客户端,在Steam合作伙伴网站这里有相关文档。

可以在sdk目录结构中的 \ContentBuilder\ 目录内找到mongoose网站服务器。

  • 通过mongoose.conf文件配置网路服务器,以便知道这些输出文件的存放位置。
    • 设置 document_root 变量为在编译机上本地创建的目录,比如 C:\SteamContent\ContentServer\htdocs\ for example
    • 这将和应用程序编译文件中指定的 "local" 值相匹配
  • 启动网站服务器mongoose-3.1.exe,将会在系统托盘中出现一个”m"图标。
    • 该可执行文件可以独立运行,或者作为服务运行。 要想把它作为服务运行,在启动服务器后右击系统托盘图标,并选择 "Install Service(安装服务)"
  • 连接127.0.0.1,并验证服务器已经设立且这正在运行,在网页中点击depot(库)目录索引来验证来验证它正在访问正确的位置。
  • 一旦它正在作为一项服务运行,您可以再次运行该可执行文件来让系统托盘图标出现,以便您可以"Uninstall Service(卸载服务)”

请参照Steam合作伙伴网站上的SteamPipe内容服务器页面来获得关于设置它的其他信息。

已废弃 使用Steam内容工具

有两种方法:使用GUIde和使用Steam脚本。

已废弃 使用GUI创建一个具有解决方案和工程文件的初始版本

  • 本地复制您想发布的版本(比如'C:\Builds\UnrealEngine3')。
  • 运行内容工具(Steam SDK的一部分)'sdk/tools/ContentTool.exe'。 *点击'New Solution(新建解决方案)'按钮。
  • 点击‘Next(下一步)’。
  • Solution(解决方案)部分: 在'Solution Name(解决方案名称)'处输入(UTGame),在 location(位置)处输入 'C:\SteamGame'。
  • 点击‘Next(下一步)’。
  • Application (应用程序)部分: 在'Application Name(应用程序名称)'中输入('Unreal Development Kit(虚幻开发工具包)' - 这时出现在GUI上的东西),File Delivery(文件传送方式)是'Loose Files(松散文件)','Application ID(应用程序ID)'是13260。
  • 点击‘Next(下一步)’。
  • Depot(仓库)部分: Name(名称)是 'UTGame',Type(类型)是'Content(内容)','Project Location(项目位置)'是 'C:\SteamGame','Depot Location(仓库位置)'是'C:\SteamGame\Depot','Depot ID(仓库ID)'是13261。
  • 点击‘Next(下一步)’。
  • 点击右侧的列表框项,并输入'C:\Builds\UnrealEngine3'。
  • 点击 'Finish(完成)'(它将会列出它找到的要添加到项目中的文件 - 点击OK(确定)来同步depot)。
  • 点击GUI左上方附近的'Solution Properties(解决方案属性)'按钮;它就在 'Solution Explorer(解决方案浏览器)'文本的下方。
  • 展开树形结构‘Launch Options(启动选项) -> Label(标签) = Default(默认) -> Command line(命令行命令) = Unreal Development Kit’
  • 右击鼠标,并把命令行改为'Binaries\Win32\UDKGame.exe'。
  • 关闭那个窗口,当提示时选择保存。
  • 点击'Build(编译)'工具条按钮(这将花费一些时间)。
  • 'C:\SteamGame\Depot'现在包含了 '13261_0.dat'、'13261_0.blob'和'UTGame.depot'(这是appid_version.dat和appid_version.blob)。
  • 从Publish(发布)菜单中选择'Publish to Local Testing Server(发布到本地测试服务器)',这将会复制'13261_0.dat'、'13261_0.blob' 和'ContentDescriptionDB.xml'到本地服务器中。
  • 运行内容浏览器

已废弃 使用Steam脚本创建新版本

  • 产生一个DOS框
  • 运行'//depot/UnrealEngine3/Development/External/Steamworks/sdk/tools/ContentTool.com' /verbose /console /filename '//depot/UnrealEngine3/UDKGame/Build/Steam/SteamMakeVersion.smd'
  • 从'C:\SteamGame\Depot' to 'C:\Steam\DepotRoot'复制新的文件。
  • 把'C:\SteamGame\ContentDescriptionDB.xml'复制到'C:\Steam\DepotRoot'中。
  • 停止并重新启动内容服务器,以便它可以检测更新。

注意

  • 更新过程是自动在版本系统中完成的;请检查//depot/UnrealEngine3/Development/Builder/Scripts/Build/SteamVersion.build获得详细信息。
  • 当编辑 .sts和.spj文件时一定要非常小心,因为无意的修改可能会导致一些问题。同时,请不要改变相对路径;这样做也会导致一些问题。

已废弃 运行Steam内容服务器

有两种方法来运行内容服务器:从命令行提示符运行或者将其作为服务。

已废弃 从命令行提示符运行内容服务器

  • 产生一个DOS框
  • 运行'//depot/UnrealEngine3/Development/External/Steamworks/sdk/tools/contentserver/contentserver.exe' /verbose /DepotPath 'C:\SteamGame\LocalTestServer'。
  • 您将会看到很多调试信息,但是最后您会看到13261_0提示。
  • Steam客户端现在可以连接并下载该版本了。

已废弃 作为一项服务

  • 把'C:\SteamGame\LocalTestServer' 移动到'C:\Steam\DepotRoot'(除非你正在使用ContentServerCfg.txt来设置该服务的depot路径;请参照下文)
  • 产生一个DOS框
  • 运行'//depot/UnrealEngine3/Development/External/Steamworks/sdk/tools/contentserver/contentserver.exe' /install (这将自动地启动服务)。
  • Steam客户端现在可以连接并下载该版本了。

已废弃 注意事项

  • 内容服务器通常可以工作的很好,并且可以无缝地处理大量的典型的网络问题。
  • 我已经发现了两个显著的例外:
    • 内容服务器不能检测新的版本,要想注册新的版本您需要重新启动服务。
    • 当作为服务运行时,depot的位置不能从命令行进行设置。当作为服务运行时,depot的位置仅能通过和ContentServer.exe位于同一目录的ContentServerCfg.txt文件进行设置。否则,将使用\Steam\DepotRoot的默认值(路径是相对于根目录的路径)。这个文件的语法和UE3 .ini文件类似;比如,要想将库的位置从\Steam\DepotRoot改为 \LocalContentServer,ContentServerCfg.txt将需要包含以下两行语句:

           [ClientContent]
           DepotRootPath = "\LocalContentServer"

在游戏中使用Steam

当启动游戏时,简单地运行Steam客户端可以使您访问所有的Steam功能。如果Steam客户端没有运行,那么网络层将会在内部退回到普通的在线子系统(它基本具有了OnlineSubsystemPC的功能)。

验证系统非常的简单,如果您没有'拥有'那个游戏,那么您不能再服务器上玩这个游戏。请向Valve获取您自己的应用程序id来测试您的游戏的网络连接性;任何人都可以拥有 'Unreal Development Kit' 应用程序id。