智能交付:设备说明符

设备说明符声明安装区块中的内容将适用于的 Xbox One 系列主机和 Xbox Series 主机。 设备说明符允许你在一代主机上提供尽可能高保真体验,而不会为未使用该代最高端主机的用户造成不必要的下载。 在 Xbox One 设备系列中,可以将某些内容(如 HDR 图形)标记为区块,只需在Xbox One X设备上下载。 这将允许 Xbox One 和Xbox One S用户获得更高效的下载,但不包括这些设备不支持的 HDR 资产。 某些内容将为这两种主机所共有。 例如,对于正在运行游戏的任何设备来说,音频资产可能都相同。 包含这些资产的区块不会有设备说明符。

设备说明符支持以下情形。

  • 在整个 Xbox 系列主机中为设备提供新游戏时,可以声明仅在主机系列的高端设备上需要哪些内容。 没有设备说明符的内容安装到所有主机上。 有关详细信息,请参阅新游戏的打包设计部分。

  • 通过添加资产保真度更高的新区块,可更新现有游戏,使其支持 Xbox One X 或 Xbox Series X 设备上更高的分辨率。 如果你使用正确的设备说明符标记这些新区块,则已在 Xbox One、Xbox One S 或 Xbox Series X 主机上安装了你的游戏的玩家不会受到负面影响。 要了解详细信息,请参阅有关如何只为 Xbox One X 或 Anaconda 设备指定资产的部分

针对同一代中多个设备上运行的新游戏的打包设计,每个设备具有专用资产

同时针对 Xbox One、Xbox One S 和 Xbox One X 设备,或 Xbox Series S 和 Xbox Series X 设备推出的新游戏可使用智能交付来针对具有特定内容的特定设备类型。 有两个常规策略用于面向资产。

针对各设备类别优化特定内容

面向不同设备的资产的一个策略是针对每台同一代设备优化特定内容。 在这种情况下,你的游戏会将设备特定的资产打包到面向某一特定设备的区块中。

注意

文件名和路径不能跨不同的区块复制,即使一次只安装了一个包含重复项的区块。 建议根据文件夹名称将文件分组到区块中(例如通过将所有分辨率较高的资产组合到一个特定文件夹中),或者采用使你的游戏可消除文件名歧义的方式来修改文件名,例如通过在文件名末尾追加“_sco”或“_ana”。

layout.xml 文件的下列示例段声明了两个面向不同设备的区块。 在安装时,系统会根据硬件设备类型确定是安装区块 2001 还是区块 2002。

对于 Xbox One 代设备:

<Chunk Id="2001" Devices="Xbox-Durango">
    <FileGroup DestinationPath="\Data\Maps\XboxOneOnly\LightMaps"             SourcePath="Y:\Maps\Level1\XboxOneOnly\LightMaps" Include="*.map"/>
<Chunk>
<Chunk Id="2002" Devices="Xbox-Scorpio">
    <FileGroup DestinationPath="\Data\Maps\Scorpio\HiResLightMaps"             SourcePath="Y:\Maps\Level1\Scorpio\HiResLightMaps" Include="*.map"/>
<Chunk>  

对于 Lockhart 和 Anaconda 设备:

<Chunk Id="2001" Devices="Xbox-Lockhart">
    <FileGroup DestinationPath="\Data\Maps\LockhartOnly\LightMaps"             SourcePath="Y:\Maps\Level1\LockhartOnly\LightMaps" Include="*.map"/>
<Chunk>
<Chunk Id="2002" Devices="Xbox-Anaconda">
    <FileGroup DestinationPath="\Data\Maps\Anaconda\HiResLightMaps"             SourcePath="Y:\Maps\Level1\Anaconda\HiResLightMaps" Include="*.map"/>
<Chunk>  

获取设备类型

在运行时,让游戏使用 XSystemGetDeviceType 方法来确定游戏在哪个设备上运行,并且它需要根据该信息使用适当的资产集。

#include <XSystem.h>

XSystemDeviceType deviceType = XSystemGetDeviceType();

switch (deviceType)
{
case XSystemDeviceType::Pc:                     ... break;
case XSystemDeviceType::XboxOne:                ... break;   //Xbox-Durango device specifier tag
case XSystemDeviceType::XboxOneS:               ... break;   //Xbox-Durango device specifier tag
case XSystemDeviceType::XboxOneX:               ... break;   //Xbox-Scorpio device specifier tag
case XSystemDeviceType::XboxOneXDevkit:         ... break;
case XSystemDeviceType::XboxScarlettLockhart:   ... break;   //Xbox-Lockhart device specifier tag
case XSystemDeviceType::XboxScarlettAnaconda:   ... break;   //Xbox-Anaconda device specifier tag
case XSystemDeviceType::XboxScarlettDevkit:     ... break;
case XSystemDeviceType::Unknown:                ... break;
}

零售主机的 XSystemGetDeviceType 值对应于你将在 layout.xml 文件中使用的设备说明符标记。 请注意,Xbox-Durango是 Xbox One 和 Xbox One S的设备说明符标记。

设备说明符标记 XSystemDeviceType
Xbox-Durango Xbox One
Xbox One S
Xbox-Scorpio Xbox One X
Xbox-Lockhart Xbox Series S
Xbox-Anaconda Xbox Series X

设备说明符标记是在 layout.xml 文件中使用的值。

声明特定于 Xbox One X 的资产或 Anaconda 特定的资产

针对特定设备的第二个策略是声明仅在同一代特定主机设备上安装的附加资产。 在这种情况下,两种主机所共有的所有资产都放在没有设备说明符的区块中。 特定于 Xbox One X 的资产或特定于 Anaconda 的资产放在它们各种的区块中。

仅为 Xbox One X 或 Anaconda 设备指定资产

若要将特定于设备的资产添加到游戏,请标识仅适用于该设备的资产,将它们隔离到 layout.xml 文件中的新区块中,然后对其应用 Xbox-DurangoXbox-Anaconda 设备说明符。 下面的示例对此进行了展示。

Xbox One 代

<Chunk Id="2002" Devices="Xbox-Scorpio">
    <FileGroup DestinationPath="\Data\Maps\Scorpio\HiResLightMaps"             SourcePath="Y:\Maps\Level1\Scorpio\HiResLightMaps" Include="*.dat"/>
<Chunk>  

Xbox Series X|S生成

<Chunk Id="2002" Devices="Xbox-Anaconda">
    <FileGroup DestinationPath="\Data\Maps\Anaconda\HiResLightMaps"             SourcePath="Y:\Maps\Level1\Anaconda\HiResLightMaps" Include="*.dat"/>
<Chunk>  

另请参阅

智能交付
XSystemGetDeviceType