> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Intelligent Delivery：设备修饰符

> Intelligent Delivery：设备修饰符

设备修饰符声明安装 chunk 中内容所适用的 XBOX One 家族主机和 XBOX Series 主机。设备修饰符可让你在主机世代上提供尽可能高保真的体验，同时避免为不使用该世代最高端主机的用户带来不必要的下载。在 XBOX One 家族设备中，你可以将某些内容（例如 HDR 图形）标记为仅需在 XBOX One X 设备上下载的 chunk。这样 XBOX One 和 XBOX One S 用户就能获得更高效的下载，无需包含它们不支持的 HDR 资源。有些内容对两种主机是通用的。例如，音频资源对于运行该游戏的任何设备可能都相同，包含这些资源的 chunk 就不需要设备修饰符。

设备修饰符支持以下场景。

* 当为整个 XBOX 主机家族发布新游戏时，你可以声明哪些内容只需要在主机家族中的更高端设备上安装。没有设备修饰符的内容会安装到所有主机。有关详细信息，请参阅[面向新游戏的打包设计](/build/core-features/common/packaging/intelligentdelivery-device#new-title)一节。

* 通过添加包含更高保真资源的新 chunk，你可以更新现有游戏以支持在 XBOX One X 或 XBOX Series X 设备上的更高分辨率。如果你使用正确的设备修饰符标记这些新 chunk，已在 XBOX One、XBOX One S 或 XBOX Series S 主机上安装了你的游戏的玩家不会受到不利影响。有关详细信息，请参阅[仅为 XBOX One X 或 Anaconda 设备指定资源](/build/core-features/common/packaging/intelligentdelivery-device#existing-title)一节。

<a id="new-title" />

## 面向在同一世代多种设备上运行且带有各设备专用资源的新游戏的打包设计

同时面向 XBOX One、XBOX One S 和 XBOX One X 设备，或面向 XBOX Series S 和 XBOX Series X 设备发布的新游戏，可以使用 Intelligent Delivery 针对特定设备类型交付特定内容。定位资源有两种通用策略。

* [为每类设备调整专用内容](/build/core-features/common/packaging/intelligentdelivery-device#ID4ERD)
* [向同一世代中能力最高的设备（XBOX One X、Anaconda）声明附加资源](/build/core-features/common/packaging/intelligentdelivery-device#console-specific)

<a id="ID4ERD" />

### 为每类设备调整专用内容

为不同设备定位资源的一种策略是为同一世代中的每种设备调整专用内容。在此场景中，你的游戏将各设备专用资源打包到目标为特定设备的 chunk 中。

<Note>即使一次只安装其中一个包含重复项的 chunk，不同 chunk 中也不能出现重复的文件名和路径。我们建议你要么按文件夹名称将文件分组到 chunk 中，例如将所有更高分辨率资源放到特定文件夹中，要么以能让游戏区分它们的方式修改文件名，例如在文件名上追加 “\_sco” 或 “\_ana”。</Note>

以下 layout.xml 文件示例片段声明了两个针对不同设备的 chunk。安装时，系统会根据硬件设备类型决定安装 chunk 2001 还是 chunk 2002。

XBOX One 世代：

```xml theme={null}
<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 设备：

```xml theme={null}
<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](/reference/system/xsystem/functions/xsystemgetdevicetype) 方法确定游戏运行在哪种设备上，并根据该信息使用相应的资源集。

```cpp theme={null}
#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](/reference/system/xsystem/functions/xsystemgetdevicetype) 值对应你将在 layout.xml 文件中使用的设备修饰符标签。请注意，`Xbox-Durango` 是 XBOX One 和 XBOX One S 共同的设备修饰符标签。

| 设备修饰符标签         | XSystemDeviceType        |
| --------------- | ------------------------ |
| `Xbox-Durango`  | XBOX One<br />XBOX One S |
| `Xbox-Scorpio`  | XBOX One X               |
| `Xbox-Lockhart` | XBOX Series S            |
| `Xbox-Anaconda` | XBOX Series X            |

设备修饰符标签就是你将在 layout.xml 文件中使用的值。

<a id="console-specific" />

### 声明 XBOX One X 或 Anaconda 专用资源

针对特定设备的第二种策略是声明仅安装到某一世代中特定主机设备上的附加资源。在此场景中，两种主机通用的所有资源都放入没有设备修饰符的 chunk 中，XBOX One X 或 Anaconda 专用资源放入各自的 chunk 中。

<a id="existing-title" />

## 仅为 XBOX One X 或 Anaconda 设备指定资源

要为游戏添加特定于某设备的资源，请识别仅适用于该设备的资源，将它们隔离到 layout.xml 文件中的新 chunk 中，然后为它们应用 `Xbox-Durango` 或 `Xbox-Anaconda` 设备修饰符，如下例所示。

XBOX One 世代

```xml theme={null}
<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 世代

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

<a id="ID4EYH" />

## 另请参阅

[Intelligent Delivery](/build/core-features/common/packaging/overviews/intelligentdelivery)
[XSystemGetDeviceType](/reference/system/xsystem/functions/xsystemgetdevicetype)


## Related topics

- [Intelligent Delivery](/zh-CN/build/core-features/common/packaging/overviews/intelligentdelivery.md)
- [Intelligent Delivery：自定义标签修饰符](/zh-CN/build/core-features/common/packaging/intelligentdelivery-custom.md)
- [Intelligent Delivery：features 与 recipes](/zh-CN/build/core-features/common/packaging/intelligentdelivery-features-recipes.md)
- [针对 PC 的 MSIXVC2 打包入门](/zh-CN/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2.md)
- [packageutil.exe](/zh-CN/build/core-features/common/packaging/deployment/packageutil.md)
