使用 Unity 应用的 DevOps

开发新式平台的应用不仅涉及编写代码,还涉及许多活动。 这些活动(称为 DevOps(开发 + 操作)跨越应用的完整生命周期,包括规划和跟踪工作、设计和实现代码、管理源代码存储库、运行生成、管理持续集成和部署、测试(包括单元测试和 UI 测试)、在开发和生产环境中运行各种形式的诊断,以及通过遥测和实时监视应用性能和用户行为分析学。

Visual Studio 与 Azure DevOps Services 和 Team Foundation Server 一起提供了各种 DevOps 功能。 其中许多项目适用于跨平台项目,包括使用 Unity 创建的游戏和沉浸式图形应用,尤其是在将 C# 用作脚本语言时。 但是,由于 Unity 有自己的开发环境和运行时引擎,因此许多 DevOps 功能不适用于 Visual Studio 中生成的其他类型的项目。

下表确定 Visual Studio 中的 DevOps 功能在使用 Unity 时如何应用或不适用。 有关功能本身的详细信息,请参阅链接的文档。

敏捷工具

参考链接:关于敏捷工具和敏捷项目管理(使用 Azure Boards 或 TFS,包括 Team Explorer Everywhere)

常规注释:所有规划和跟踪功能都独立于项目类型和编码语言。

功能 / 特点 通过 Unity 提供支持 其他注释
管理积压工作和冲刺 (sprint) 是的
跟踪工作 是的
团队聊天室协作 是的
看板 是的
报告和可视化进度 是的

建 模

参考链接:分析和模型体系结构

常规注释:尽管这些设计功能与编码语言无关,或者使用 C# 等 .NET 语言,但它们在具有对象层次结构和类关系的传统应用程序范例上运行。 在 Unity 中设计游戏涉及不同的范例,即图形对象、声音、着色器、脚本等的关系。 因此,Visual Studio 建模关系图工具与整个 Unity 项目并不特别相关。 它们可能用于管理 C# 脚本中的关系,但这只是整个部分。

功能 通过 Unity 提供支持 其他注释
序列图
依赖项图
调用层次结构
类设计器
建筑探索者
UML 关系图(用例、活动、类、组件、序列和 DSL)
层关系图
层验证

代码

功能 由 Unity 提供支持 其他注释
使用 Team Foundation 版本控制 (TFVC) 或 Azure Repos 是的 Unity 项目只是一组文件,可以像任何其他项目一样放置在版本控制系统中,但此表后面介绍了一些特殊注意事项。
Azure Repos 中的 Git 入门 是的 请参阅表后面的备注。
提高代码质量 是的
查找代码更改和其他历史记录 是的
使用代码映射调试应用程序 是的

使用 Unity 进行版本控制的特殊注意事项:

  1. Unity 跟踪默认隐藏的单个不透明库中有关游戏资产的元数据。 若要使文件和元数据保持同步,必须使元数据可见,并将其存储在更易于管理的区块中。 有关详细信息,请参阅 将外部版本控制系统与 Unity(Unity 文档)配合使用。

  2. 并非所有 Unity 项目中的文件和文件夹都适用于源代码管理,如上述链接中所述。 应添加 Assets 和 ProjectSettings 文件夹,但不应添加“库”和“临时”文件夹。 有关不会执行源代码管理的生成的文件的附加列表,请参阅 Stack Overflow 上的讨论如何使用 Git 进行 Unity3D 源代码管理?。 许多开发人员还单独撰写了关于此主题的博客。

  3. Unity 项目中的二进制资产(如纹理或音频文件)可能会占用大量存储。 各种源代码管理系统(如 Git)为每个所做的更改存储文件的唯一副本,即使更改仅影响文件的一小部分。 这可能会导致 Git 存储库膨胀。 为了解决此问题,Unity 开发人员通常选择仅将最终资产添加到其存储库,并使用不同的方法来保留其资产的工作历史记录,例如 OneDrive、DropBox 或 git-annex。 此方法的工作原理是,此类资产通常不需要随源代码更改一起进行版本控制。 开发人员通常还会将项目编辑器的资产序列化模式设置为强制文本,以便以文本格式而不是二进制格式存储场景文件,从而允许在源代码管理中合并。 有关详细信息,请参阅 编辑器设置(Unity 文档)。

生成

参考链接:Azure Pipelines

功能 通过 Unity 提供支持 其他注释
本地 Team Foundation Server (TFS) 可能 Unity 项目通过 Unity 环境生成,而不是通过 Visual Studio 生成系统(在 Visual Studio Tools for Unity 中生成)将编译脚本,但不生成可执行文件。 可以通过命令行 (Unity 文档) 生成 Unity 项目,以便在 TFS 服务器上配置 MSBuild 进程以执行相应的 Unity 命令,前提是 Unity 本身安装在该计算机上。

Unity 还提供 Unity Cloud Build,用于监控 Git 或 SVN 存储库并运行定期构建。 目前,它不适用于 TFVC 或 Azure DevOps Services。
链接到 Azure DevOps Services 的本地生成服务器 可能 给定上述相同条件,更有可能指向通过 Azure DevOps Services 触发的生成,以便使用本地 TFS 计算机。 有关说明,请参阅 生成和发布代理
Azure DevOps Services 的托管控制器服务 目前不支持 Unity 生成。
使用前脚本和后脚本生成定义 是的 使用 Unity 命令行运行生成的自定义生成定义还可以配置为预生成和后生成脚本。
持续集成,包括门控签入 是的 仅在 Git 用于拉取请求(而非签入)时,封闭签入才适用于 TFVC。

测试

功能 通过 Unity 提供支持 其他注释
规划测试、创建测试用例和组织测试套件 是的
手动测试 是的
测试管理器(录制和播放测试) 仅限 Windows 设备和 Android 模拟器
代码覆盖率 n/a Unity 内进行单元测试时以及不是 Visual Studio 时不适用,请参阅下文。
单元测试代码 在 Unity 中,但不在 Visual Studio 中 Unity 提供自己的单元测试框架,作为 Unity 测试工具(Unity 资产存储)的一部分。 单元测试结果在 Unity 中报告,不会显示在 Visual Studio 中。
使用 UI 自动化来测试代码 编码的 UI 测试依赖于应用的 UI 中的可读控件;Unity 应用本质上是图形应用,因此编码的 UI 测试工具无法读取内容。

提高代码质量

参考链接:提高代码质量

功能 通过 Unity 提供支持 其他注释
分析托管代码的质量 是的 可以在 Visual Studio 中分析 C# 脚本代码。
使用代码克隆检测 查找重复代码 是的 可以在 Visual Studio 中分析 C# 脚本代码。
度量托管代码的复杂性和可维护性 是的 可以在 Visual Studio 中分析 C# 脚本代码。
性能工具 使用 Unity 性能分析器(Unity 网站)。
分析 .NET Framework 内存问题 Visual Studio 工具不具有进入 Mono 框架(用于 Unity)进行探查的挂钩。 使用 Unity 性能分析器(Unity 文档)。

发布管理

参考链接:Azure Pipelines 和 TFS 中的生成和发布

功能 通过 Unity 提供支持 其他注释
管理发布过程 是的
部署到服务器以通过脚本进行侧载 是的
上传到应用商店 部分的 扩展可用于自动执行某些应用商店的此过程。 请参阅 Azure DevOps Services 扩展;例如,Google Play 扩展。

使用 HockeyApp 进行监视

参考链接:使用 HockeyApp 进行监视

功能 通过 Unity 提供支持 其他注释
故障分析、遥测和 beta 版本分发 是的 HockeyApp 主要用于处理 beta 分发和获取崩溃报告。

对于 C# 脚本的遥测数据,可以使用在 Unity 使用的 .NET 版本上运行的任何分析框架。 但是,这只允许在游戏脚本中进行分析,而不是更深入地在 Unity 引擎内部进行分析。 目前,Application Insights 没有插件,但插件可用于其他分析解决方案,例如 Unity AnalyticsGoogle Analytics。 当然,了解 Unity 项目性质的 Unity Analytics 等服务会提供比泛型框架更有意义的分析。