Version:

Prefab文件类型支持

概述

本页旨在回答以下问题: “我们如何才能安全地支持基于元数据文件的Prefab文件资产重定位?”

这并不是一项详尽的调查,调查时间被限制在几天之内。

Prefab产品资产类型

  • spawnable - 可在运行时生成的Prefab。一般通过组件上的资产引用来引用,因此对资产重定位比较稳定。在许多情况下,可以通过代码引用;在这种情况下,如果代码引用不是通过资产 ID 进行的,代码将不会处理生成可生成Prefab的Prefab的重命名或移动,但这被认为是可以接受的工作流程–代码引用不需要处理。
  • network spawnable - 与spawnable的引用方式相同。

如果使用基于稳定元文件的 UUID 重命名Prefab文件,现在会发生什么?

Prefab 到 Prefab 引用

Prefab可以引用其他Prefab。这是通过扫描文件夹根目录的路径实现的。

这意味着如果一个Prefab被重命名,任何通过嵌套引用该Prefab(而不是引用可生成Prefab)的Prefab都会中断引用。

Prefab程序Prefab的引用

Prefab也可以以与普通Prefab类似的方式(在Prefab文件中)引用程序Prefab。这里的细微差别会在后面的解决方案中出现。对于 prefab 之间的引用,我们需要通过源资产的 UUID 进行跟踪。对于Prefab到程序Prefab的引用,该链接将由资产 ID 代替,因为程序Prefab是一种产品资产。

组件对spawnable的引用

spawnable是通过资产 ID 引用的,因此它们是稳定的。这里有一个小问题: 资产提示的是源资产而不是产品资产。工作流程也让你选择源资产而不是产品。目前这还不是一个问题,但如果除了Prefab之外还有其他东西可以生成可再生资源,那么在 script canvas 中就不能很好地工作了。

建议

  • 更新Prefab,以便通过源资产 UUID 而非相对路径引用其他Prefab。
  • 更新Prefab,使其通过资产 ID 而非相对路径引用程序Prefab。
  • 在进行这两项更新时,可以加载基于路径引用的旧Prefab,下次保存Prefab时,将保存稳定的 ID 而不是相对路径。
  • 构建一个可以升级指定文件夹下所有Prefab的工具(处理项目和宝石升级),该工具可以发送给用户,用户可以在启用Prefab资产重置之前在自己的项目上运行。

相关但不妨碍的问题

产品资产有一个 AssetID 的代码概念。它包含源资产的 UUID、产品资产的子 ID 和一个资产提示,以提供一个人类可读的路径。

源资产没有这样的概念。因此,改用 UUID 只意味着人类将很难直观地检查Prefab文件,以了解这些关系。

当用户必须直接查看内容时,这将明显降低合并和手动管理Prefab文件的质量。