2021年11月15日

Evergine 包系统

可重用性是软件开发中一个广泛的概念,作为开发者,我们总是在思考如何隔离部分代码,以创建可在不同项目中使用的库、代码片段或资产。在 .NET 世界中,创建 NuGet 包来共享库非常普遍。

Evergine 本身使用 NuGet 格式进行分发,得益于此,我们提供了许多内置行为、组件或服务。但如果您想从 Evergine 项目的 Content 文件夹中共享纹理、效果或材质等资产,就没那么容易了。为了解决这个问题,我们一直在开发一个新的包系统,让您可以分发可在多个项目中重用的资产。

添加现有包

添加包后,其所有资产、源代码和 NuGet 依赖项都将为您添加。

目前,无法通过 Evergine Studio 用户界面添加包,您需要手动操作。只需使用您喜欢的文本编辑器打开 Evergine 项目文件(.weproj 文件),并更新 Packages 部分,加入您想要包含的包。

只需查看 官方包 ID 列表 即可添加新条目。

例如:

完成此操作后,使用 Evergine Studio 打开项目时,应在 Project Explorer 中添加一个 Dependencies 节点。该节点将包含所有引用的包。您可以展开包节点以查看其内容。

作为包的一部分,资产被标记为只读。如果您需要修改其中任何资产,是可以的:将在您的项目中创建该资产的副本。此本地副本会覆盖当前项目的原始包资产。

或者,您也可以通过本地路径引用包。如果您包含自己制作的包,这将非常有用。在这种情况下,语法为:

请注意,引用本地包不会将包资产标记为只读,如果您修改它们,您正在更改本地包文件!

创建您自己的包

要创建您自己的 Evergine 包,您需要创建一个单独的项目,其中包含您想要包含的资产和源代码文件。为了说明这一点,我们将创建一个名为 DummyPackage 的虚构包,其中包含一个纹理和一个组件。

创建空项目后,我们需要创建一个包定义文件。它应以 .wespec 作为扩展名,您可以在其中指定:

  • Owners:包所有者的名称。
  • Authors:包作者的名称。
  • Description:包内容的描述。
  • Tags:用于对包进行分类的标签列表。
  • Nugets:通过 NuGet 包提供的依赖项列表。

包定义文件应与项目文件放在同一层级。

所有资产(如纹理、材质、效果等)应放在名为 Content 的文件夹下,源代码文件应放在名为 Source 的文件夹下。

此外,您需要将 Evergine.Packages.Targets NuGet 包包含到您的项目中,以便在构建项目时执行打包过程。

完成以上所有设置后,只需构建你的项目。在你的 bin/Debug 或 bin/Release 文件夹中,你会找到生成的 wepkg 文件。

如果你想将此包作为本地包引用,请记得在你的 weproj 文件中添加相应的条目。

要查看一个可运行的示例,只需看看我们的任何一个包仓库,比如 MixedRealityToolkit 仓库。

总之,这个新的包系统是为了让我们开发者生活更轻松而诞生的。在未来的版本中,我们计划添加完整的 Evergine Studio 体验来管理这些包,并使其更容易添加和移除包。

Sergio Escalada
作者
Sergio Escalada
Plain Concepts Research