适用于 UWP 应用的游戏技术

在此指南中,你将了解可用于开发通用 Windows 平台 (UWP) 游戏的技术。

Windows 10 对于游戏开发的优势

通过在 Windows 10 中引入 UWP,Windows 10 标题将能够跨越所有 Microsoft 平台。 通过从以前版本的 Windows 的免费迁移,Windows 10 客户端数量将稳定增加。 这两个事实的结合意味着你的 Windows 10 标题能够通过 Microsoft Store 覆盖大量客户。

此外,Windows 10 还提供了许多对游戏极其有益的新功能:

  • 减少了内存分页和整体内存系统大小
  • 经改进的图形内存管理可为前台游戏主动分配和保护更多内存

使用 C++ 和 DirectX 的 UWP 游戏

需要高性能的实时游戏应充分利用 DirectX API。 DirectX 是用于创建需要高性能的游戏和多媒体应用程序(如 3D 游戏)的本机 API 集合。

开发环境

若要创建 UWP 游戏,将需要通过安装 Visual Studio 2015 或更高版本来设置开发环境。 建议安装最新版本的 Visual Studio,以获取最新的开发和安全更新。 Visual Studio 允许你创建 UWP 应用 并提供用于游戏开发的工具:

  • 用于 DX 游戏编程的 Visual Studio 工具 - Visual Studio 提供用于创建、编辑、预览和导出图像、模型和着色器资源的工具。 还有一些工具,可以用来在生成时转换资源以及调试 DirectX 图形代码。 有关详细信息,请参阅使用 Visual Studio 工具进行游戏编程
  • Visual Studio 图形诊断功能 - 图形诊断工具现在在 Windows 中作为可选功能提供。 诊断工具允许你 执行图形调试、图形帧分析以及实时监视 GPU 使用情况。 有关详细信息,请参阅使用 DirectX 运行时和 Visual Studio 图形诊断功能

有关详细信息,请参阅“准备通用 Windows 平台和 DirectX 编程

DirectX 游戏项目模板入门

设置开发环境后,可以使用 DirectX 相关项目模板之一创建 UWP DirectX 游戏。 Visual Studio 2015 具有三个可用于创建新的 UWP DirectX 项目的模板:DirectX 11 应用(通用 Windows)DirectX 12 应用(通用 Windows)以及 DirectX 11 和 XAML 应用(通用 Windows)。 有关详细信息,请参阅从模板创建通用 Windows 平台和 DirectX 游戏项目

Windows 10 API

Windows 10 提供可用于游戏开发的大量 API 集合。 有用于游戏的几乎所有方面的 API,包括 3D 图形、2D 图形、音频、输入、文本资源、用户界面和网络。

有许多与游戏开发相关的 API,但并非所有游戏都需要使用所有 API。 例如,某些游戏仅使用 3D 图形,因此仅使用 Direct3D, 某些游戏可能仅使用 2D 图形,因此仅使用 Direct2D,而其他游戏可能同时使用这两者。 下图显示按功能类型分组的游戏开发相关 API。

game platform technologies

  • 3D 图形 - Windows 10 支持两个 3D 图形 API 集:Direct3D 11 和 Direct3D 12。 这些 API 都提供创建 3D 和 2D 图形的功能。 Direct3D 11 和 Direct3D 12 不在一起使用,但是其中任何一个都可与 2D 图形和 UI 组中的任何 API 一起使用。 有关在游戏中使用图形 API 的详细信息,请参阅 DirectX 游戏的基本 3D 图形

    API 说明
    Direct3D 12

    Direct3D 12 引入了下一版本的 Direct3D,它是 DirectX 的核心 3D 图形 API。 此版本的 Direct3D 设计为比以前版本的 Direct3D 更快速且更高效。 Direct3D 12 提升了速度的代价是,它较低级,需要你自行管理你的图形资源 并且拥有更广泛的图形编程经验才能实现速度的提升。

    何时使用

    当你需要最大限度提升游戏性能并且你的游戏占用大量 CPU 时,请使用 Direct3D 12。

    详细信息

    请参阅 Direct3d 12 文档。

    Direct3D 11

    Direct3D 11 是以前版本的 Direct3D,可允许你使用比 D3D 12 更高级的硬件抽象创建 3D 图形。

    何时使用

    如果你有现有的 Direct3D 11 代码、你的游戏不占用大量 CPU,或者你希望拥有为你管理资源的优势,请使用 Direct3D 11。

    详细信息

    请参阅 Direct3D 11 文档。

     

  • 2D 图形和 UI - 与 2D 图形(例如文本和用户界面)相关的 API。 所有 2D 图形和 UI API 都是可选项。

    API 说明
    Direct2D

    Direct2D 是硬件加速、直接模式的 2D 图形 API,可为 2D 几何图形、位图和文本提供高性能且高质量的渲染。 Direct2D API 基于 Direct3D 生成,设计用于与 GDI、GDI+ 和 Direct3D 进行良好的交互操作。

    何时使用

    可使用 Direct2D 而不是 Direct3D 来为纯 2D 游戏(如横版游戏和棋盘游戏)提供图形,或者可以与 Direct3D 结合使用来简化在 3D 游戏中创建 2D 图形(如用户界面或提醒显示)的工作。

    详细信息

    请参阅 Direct2D 文档。

    DirectWrite

    DirectWrite 提供处理文本的额外功能,可与 Direct3D 或 Direct2D 结合使用,为需要文本的用户界面或其他区域提供文本输入。 DirectWrite 支持多格式文本的测试、绘制和命中测试。 DirectWrite 处理使用全球和本地化应用程序的所有受支持的语言的文本。 对于希望执行其自己的布局和 Unicode 到字形处理的开发人员,DirectWrite 还提供低级的字形呈现 API。

    何时使用

    详细信息

    请参阅 DirectWrite 文档。

    DirectComposition

    DirectComposition 是一个 Windows 组件,可通过 转换、效果和动画支持高性能的位图合成。 应用程序开发人员可以使用 DirectComposition API 创建视觉上吸引人的用户界面,该用户界面以从一个视觉对象到另一个视觉对象的丰富且流畅的动画切换为特征。

    何时使用

    DirectComposition 设计用于简化合成视觉对象和创建动画过渡的过程。 如果游戏需要复杂的用户界面,可以使用 DirectComposition 简化 UI 的创建和管理。

    详细信息

    请参阅 DirectComposition 文档。

     

  • 音频 - 与播放音频和应用音频效果相关的 API。 有关在游戏中使用音频 API 的信息,请参阅游戏音频

    API 说明
    XAudio2

    XAudio2 是低级的音频 API,可提供信号处理和混音的基础。 XAudio 设计用于对游戏音频引擎快速响应,同时保持能够创建自定义音频效果与音频效果和过滤的复杂链。

    何时使用

    当游戏需要以最少的开销和延迟播放声音时,请使用 XAudio2。

    详细信息

    请参阅 XAudio2 文档。

    音频图

    对于可使用 XAudio2 来实现的功能,可以改为使用 Windows 运行时音频图 API 来实现。 为帮助你在这两种替代方法之中做出决定,请参阅选择 Windows 运行时 AudioGraph 或 XAudio2

    何时使用

    如果你需要游戏以最小开销和延迟播放声音,但使用比 XAudio2 更易于使用的 API,且可以支持 C#,请使用音频图。

    详细信息

    请参阅音频图文档。

    媒体基础

    Microsoft 媒体基础设计用于媒体文件和流媒体(音频和视频)的播放,但是当需要比 XAudio2 更高级的功能并且可接受一些更多的开销时,也可用于游戏中。

    何时使用

    媒体基础对于游戏中的电影场景或非交互组件尤其有用。 媒体基础对于使用 XAudio2 解码音频文件用于播放也很有用。

    详细信息

    请参阅 Microsoft 媒体基础概述。

     

  • 输入 - 与从键盘、鼠标、游戏板和其他用户输入源的输入相关的 API。

    API 说明
    XInput

    XInput 游戏控制器 API 支持应用程序从游戏控制器接收输入。

    何时使用

    如果游戏需要支持游戏板输入,并且你有现有的 XInput 代码,则可以继续使用 XInput。 XInput 已替换为适用于 UWP 的 Windows.Gaming.Input,如果你要编写新的输入代码,应使用 Windows.Gaming.Input,而非 XInput。

    详细信息

    请参阅 XInput 文档。

    Windows.Gaming.Input

    Windows.Gaming.Input API 替换了 XInput,并提供相同的功能,但具有以下 Xinput 不具备的优势:

    • 资源使用率较低
    • 检索输入时 API 调用延迟较低
    • 可同时处理多于 4 个游戏板
    • 能够使用其他游戏手柄功能,例如触发器振动马达
    • 可在控制器连接/断开连接时通过事件而非轮询收到通知
    • 可将输入分配给特定用户 (Windows.System.User)

    何时使用

    如果游戏需要支持游戏板输入,并且不使用现有 XInput 代码,或者需要以上列出的优势之一,则应使用 Windows.Gaming.Input。

    详细信息

    请参阅 Windows.Gaming.Input 文档。

    Windows.UI.Core.CoreWindow

    Windows.UI.Core.CoreWindow 类提供用于跟踪指针按下和移动的事件,以及键按下和键放开事件。

    何时使用

    需要在游戏中跟踪鼠标或按键时,请使用 Windows.UI.Core.CoreWindows 事件。

    详细信息

    有关在游戏中使用鼠标或键盘的详细信息,请参阅适用于游戏的移动观看控件

     

  • 数学 - 与简化常用数学运算相关的 API。

    API 说明
    DirectXMath

    DirectXMath API 提供 SIMD 友好的 C++ 类型和函数,用于游戏中常用的线性代数和图形数学运算。

    何时使用

    可以选择使用 DirectXMath,并且可以简化常用数学运算。

    详细信息

    请参阅 DirectXMath 文档。

     

  • 网络 - 有关通过 Internet 或专用网络与其他计算机和设备通信的 API。

    API 说明
    Windows.Networking.Sockets

    Windows.Networking.Sockets 命名空间提供 TCP 和 UDP 套接字,这些套接字允许可靠或不可靠的网络通信。

    何时使用

    如果游戏需要通过网络与其他计算机或设备通信,请使用 Windows.Networking.Sockets。

    详细信息

    请参阅在你的游戏中使用网络

    Windows.Web.HTTP

    Windows.Web.HTTP 命名空间提供可用于访问网站的 HTTP 服务器的可靠连接。

    何时使用

    如果游戏需要访问网站以检索或存储信息,请使用 Windows.Web.HTTP。

    详细信息

    请参阅在你的游戏中使用网络

     

  • 支持实用工具 - 基于 Windows 10 API 生成的库。

    说明
    DirectX 工具包

    DirectX 工具包 (DirectXTK) 是用于使用 C++ 编写 DirectX 11.x 代码的帮助程序类集合。

    何时使用

    如果你是正在寻找旧版 D3DX 实用工具代码的现代替代项的 C++ 开发人员,或者你是过渡到本机 C++ 的 XNA Game Studio 开发人员,请使用 DirectX 工具包。

    详细信息

    请参阅 DirectX 工具包项目页面 https://github.com/Microsoft/DirectXTK

    Win2D

    Win2D 是易于使用的 Windows 运行时 API,用于直接模式 2D 图形渲染。

    何时使用

    如果你是一名 C++ 开发人员并且需要更易于使用的 Direct2D 和 DirectWrite 的 WinRT 包装器,或者你是要使用 Direct2D 和 DirectWrite 的 C# 开发人员,请使用 Win2D。

    详细信息

    请参阅 Win2D 项目页面 https://github.com/Microsoft/Win2D

Xbox Live 服务

Xbox 开发人员计划允许任何开发人员将 Xbox Live 集成到其 UWP 游戏中,并发布到 Xbox One 和 Windows 10。 你可以使用最少的开发时间,将 Xbox Live 社交体验(如登录、状态、排行榜等)集成到游戏中。 Xbox Live 社交功能旨在有机增加你的受众,在 5,500 多万名活跃玩家中扩大你的知名度。

如果想访问主 Xbox One 应用商店中特别推荐的更多 Xbox Live 功能、专门的营销和开发支持和机会,则你可以申请 ID@Xbox 计划。 若要查看可用于 Xbox Live 创意者计划和 ID@Xbox 计划的功能,请参阅功能表

有关详细信息,请转到将 Xbox Live 添加到游戏

使用 DirectX 和 UWP 编写游戏的替代项

不使用 DirectX 的 UWP 游戏

具有最小性能要求的较简单的游戏(例如纸盘或棋盘游戏)可在不使用 DirectX 的情况下编写,并且不一定需要使用 C++ 编写。 此类游戏可使用 UWP 支持的任何语言,例如 C#、Visual Basic、C++ 和 HTML/JavaScript。 如果你的游戏不需要高性能和密集图形,请查阅 JavaScript 和 HTML5 触摸游戏示例作为一个示例。

游戏引擎

作为使用 Windows 游戏开发 API 编写你自己的游戏引擎的替代项,许多基于 Windows 游戏开发 API 生成的高质量游戏引擎都可用于 在 Windows 平台上开发游戏。 在考虑使用游戏引擎或库时,你有多个选项:

  • 完整的游戏引擎 - 一个完整的游戏引擎会封装在从头开始编写游戏引擎时将使用的大多数或全部 Windows 10 API,例如图形、音频、输入和网络。 完整的游戏引擎还提供游戏逻辑功能,例如人工智能和寻路。
  • 图形引擎 - 图形引擎封装 Windows 10 图形 API、管理图形资源并支持各种模型和现实格式。
  • 音频引擎 - 音频引擎封装 Windows 10 音频 API、管理音频资源并提供高级音频处理和效果。
  • 网络引擎 - 网络引擎封装用于将点对点或基于服务器的多人支持添加到游戏中的 Windows 10 网络 API,并且可能包括用于支持大量玩家的高级网络功能。
  • 人工智能和寻路引擎 - AI 和寻路引擎提供用于控制游戏中的代理行为的框架。
  • 特殊用途引擎 - 存在各种其他引擎用于处理你可能遇到的几乎任何与游戏开发相关的任务,例如创建存货系统和对话树。

将游戏提交到 Microsoft Store

一旦准备好发布游戏,将需要创建一个开发者帐户并将游戏提交到 Microsoft Store。

有关将游戏提交到 Microsoft Store 的信息,请参阅提交和发布游戏