Version:

使用Asset Processor Batch移动或删除资产

Open 3D Engine (O3DE) 中开发项目期间,您可能会出于多种原因决定移动或删除资产。移动资产时,需要更新资产的所有引用。如果在移动资产时未更新对该资产的任何引用,则上游内容可能会因引用中断而无法正常工作。

为支持资产搬迁和删除,Asset Processor Batch工具提供了--move--delete 命令。这些命令将检查对该内容的部分(但不是全部)传入引用,并在可能的情况下执行一些自动引用更新。 更多详情,请参阅 “限制 ”部分。

注意:

某些包含引用的资产可能是二进制格式。例如,.fbx 文件既可以是 ascii 格式,也可以是二进制格式。二进制格式文件中的引用不会自动更新。

由于移动或删除文件可能是破坏性操作,因此 -move-delete命令需要额外的--confirm选项来执行操作。在不使用 --confirm 选项的情况下使用这两条命令,只能预览命令的结果。

Asset Processor Batch 移动语法

您可以使用下面的 --move 命令和 Asset Processor Batch 来移动项目中的源资产。此操作还可用于重命名资产。

--move=<FromPath>,<ToPath>

在指定 FromPathToPath 参数以移动资产时,请使用以下指导。

  • FromPathToPath可以是绝对路径,也可以是扫描目录根目录(如项目或 Gem 目录)的相对路径。
  • 指定的路径必须指向文件,而不是目录。要重命名目录,请使用带通配符 (*) 的目录名,例如 OriginalDirectoryName/*,DirectoryRenamed/*.
  • FromPathToPath可包含通配符,可匹配当前级别文件或目录名中的任意数量字符。如果路径以通配符结尾,则会递归匹配通配符层级上下的任何目录层级中的任意字符数。
  • FromPathToPath **必须包含相同数量的通配符。

下面的示例说明了如何使用通配符和 --move 选项。

路径匹配
Textures/*路径末尾的通配符会递归匹配目录中包含的所有文件。它还包括所有子目录的内容。
Materials/*.material文件名中的通配符可匹配该目录级别下的所有文件。在示例中,名为 Materials 的目录中所有扩展名为.material 的文件都匹配。
Textures*/目录名称末尾的通配符不会匹配任何目录或文件。路径必须指向文件,因为源代码控制中不跟踪目录。

Asset Processor Batch 删除语法

您可以使用下面的 --delete 命令和资产处理器批处理功能删除项目中的源资产。

--delete=<Path>

在指定删除资产的路径参数时,请使用以下指导。

  • 路径可以是绝对路径,也可以是扫描目录根目录(如项目或 Gem 目录)的相对路径。
  • 指定的参数必须是指文件,而不是目录。要删除目录,请使用带通配符的目录名,例如 DirectoryName/*.
  • 路径可以包含通配符,通配符可以匹配当前级别文件或目录名称中的任意字符数。如果路径以通配符结尾,则会递归匹配通配符层级上下任何目录层级的任意字符数。

Asset Processor Batch 迁移选项

使用资产处理器批处理功能移动或删除资产时,可以使用下面的附加命令行选项。

选项说明
--confirm执行移动或删除,修改磁盘上的文件。如果没有这个功能,移动和删除只能提供结果预览。
--leaveEmptyFolders默认情况下,即使在 --move过程中,空文件夹也会被删除。此选项可保留空文件夹。
--allowBrokenDependencies默认情况下,如果存在断开的依赖关系,移动和删除命令会失败。这样就能在依赖关系中断的情况下继续执行操作。
--updateReferences该选项仅适用于 --move 命令。该选项会尝试更新引用所选文件的文件。这是一个简单的查找并替换绝对路径和 UUID/AssetId 的过程。二进制资产中的引用不会更新。
--enablescm在资产处理程序批处理中,版本控制管理默认为禁用。这将启用源控制插件,以便该命令可以检查文件,并根据情况进行编辑/移动/删除。

Asset Processor Batch 迁移限制

资产处理器批量搬迁工具有一些限制:

  • C++ 中对资产的引用未在本工具中注册或已知。如果资产有一个硬编码的 C++ 加载,那么当资产被重新定位时,该引用就会中断,需要手动查找和更新。
  • 该工具支持 Perforce 集成,但不支持其他源控制集成。Git 有时会自己发现文件被重新定位,但并不总是如此。如果不使用源代码控制的文件重定位功能就重定位资产,新文件就不会轻易映射到旧文件的历史记录。
  • 如果依赖关系图中存在缺口,例如构建程序没有正确声明要重置的资产的产品依赖关系,该工具就不会知道,而未注册的资产引用也会随着重置而中断。
  • O3DE 以外对该文件的引用将不会更新。
    • 源资产通常位于 DCC 工具的下游。资产重定位工具不会更新像这样的上游引用。
      • 例如,从 Blender 导出 FBX 文件,并通过 blend 文件跟踪用于生成该文件的原始资产。
    • O3DE 外部可能还有其他引用源资产的文件。
      • 例如,您的团队可能会使用 Excel 电子表格文件来管理一些游戏数据,并将其导出。资产搬迁者不会意识到这一点,也不会更新这些引用。

手动移动、重命名和删除资产

如果你想在不使用该工具的情况下手动重新定位资产,或者想了解该工具的内部操作,请按照以下流程操作:

  1. 收集源资产和由源资产生成的所有产品资产的所有引用。这包括以下内容:
    • 重定位无法处理的 C++ 引用。
    • 来自 DCC 工具的引用。
      • 例如,如果你想重新定位一个图像文件,它可能会被输出 FBX 文件的 Blender .blend 文件中的相对路径引用。如果更新 FBX 文件而不更新 Blender 文件,下次从 Blender 导出 FBX 文件时,可能会包含不再解析到引用图像的旧路径。
    • 其他文件中与团队和项目相关的参考资料。
      • 例如,如果您使用 Excel 电子表格管理游戏数据,而该电子表格引用了您希望迁移的资产,那么您也需要更新该电子表格。
  2. 对于每个参考文献,确定需要如何更新参考文献。
    • 您可能需要让其他团队成员参与执行此操作。
      • 例如,如果要重新定位 FBX 文件中引用的图像,则需要更新原始 DCC 文件,如用于导出 FBX 的 Maya 文件。
  3. 您可能会发现,先将文件复制到新位置会更容易,这样就可以更新新旧引用。
    • 您可能需要谨慎处理此步骤,以便在源控制工具中保留文件历史记录。
  4. 现在,要移动、重命名或删除的文件的所有引用都已收集完毕,您可以更新这些引用,使其全部引用重新定位/重命名的源和/或产品资产。如果要删除,则需要更新这些引用,以处理不再存在的资产。
  5. 现在你可以完成移动、重命名或删除操作了。建议在源控制中保留文件历史记录。