智能交付:设备说明符

设备说明符声明安装区块中的内容将适用于的 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-Durango 或 Xbox-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