Version: 6000.3
语言: 中文
资产数据库的内容
使用资产数据库进行编程

刷新资产数据库

Unity 在以下情况下会刷新资产数据库:

  • 当 Unity 编辑器重新获得焦点时(如果您在“首选项”窗口中启用了“自动刷新”)
  • 当您从菜单中选择 资产 > 刷新 时。
  • 当您调用AssetDatabase.Refresh从代码。其他一些AssetDatabaseAPI 会触发刷新,但仅限于您指定的资产。

刷新过程

Unity 在资产数据库刷新期间执行以下步骤:

  1. 检查AssetsPackages自上次检查以来已添加、修改或删除文件夹,并相应地更新资产数据库。
  2. 导入和编译与代码相关的文件,例如 .dll、.asmdef、.asmref、.rsp 和 .cs 文件。
  3. 重新加载脚本域,如果未从脚本调用 Refresh
  4. 对导入的代码相关文件的所有资产进行后处理。
  5. 导入与代码无关的资产,并对所有剩余的导入资产进行后处理。
  6. 热重载资产。

重新启动刷新过程

如果出现以下情况,Unity 将重新启动资产数据库刷新过程:

  • 资产导入失败。
  • 导入后,导入器使用的文件在磁盘上发生了更改。
  • OnPostProcessAllAssets时,您可以调用以下任一选项:
  • 导入文件的上次修改时间戳在导入时会发生变化。如果您开始从版本控制用于管理文件更改的系统。您可以将 Unity 与最常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。更多信息
    请参阅术语表
    系统,而编辑器具有焦点。
  • 导入器在导入过程中创建一个文件。例如,FBX模型可以通过从模型中提取其纹理来重新启动刷新。
  • 编译后发生程序集重新加载脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
    请参阅术语表
    .如果在刷新过程中生成 C# 文件,则必须编译该新文件。
  • 仅将资产另存为文本,但该资产必须序列化为二进制文件。例如场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
    请参阅术语表
    其中的地形必须序列化为 Binary,因为地形场景中的地形。地形游戏对象会向场景添加一个大型平面,您可以使用地形的检查器窗口创建详细的景观。更多信息
    请参阅术语表
    如果将数据视为文本文件中的字符数组,则数据将变得笨拙。

依赖关系跟踪

资产数据库跟踪两种类型的资产依赖项:静态依赖项动态依赖项。如果资产的任何依赖项发生变化,则 Unity 会重新导入该资产。

静态依赖项

静态依赖项是导入器所依赖的值、设置或属性。静态依赖关系在导入资产之前是已知的,并且在导入过程中不受导入器行为的影响。如果资产的任何静态依赖项发生变化,则 Unity 会重新导入该资产。

静态依赖项包括:

  • 资产的名称。
  • 与资产关联的导入者的 ID。
  • 导入器的版本。
  • 当前选择的构建目标平台。

动态依赖关系

动态依赖关系由源资产的内容定义,通常在导入过程中发现。例如,一个着色器在 GPU 上运行的程序。更多信息
请参阅术语表
可能会引用另一个着色器,并且预制件:一种资产类型,允许您存储包含组件和属性的游戏对象。预制件充当模板,你可以从中在场景中创建新的对象实例。更多信息
请参阅术语表
可能取决于其他预制件。

导入器还可以根据源资产的内容有条件地使用全局状态,在这种情况下,它也会成为动态依赖项。例如,目标平台、项目的色彩空间、图形API、脚本运行时版本或纹理压缩一种存储数据的方法,可减少所需的存储空间量。请参阅纹理压缩动画压缩音频压缩构建压缩
请参阅术语表
州。

Unity 将资产的动态依赖项存储在AssetImportContext.

导入和编译代码相关文件

在更改或添加的文件列表中,Unity 会收集与代码相关的文件,并将它们发送到脚本编译管道。编译器从项目中的脚本文件和程序集定义文件生成程序集。有关此步骤的详细信息,请参阅将脚本组织到程序集中

导入与代码无关的资产

每个资产的导入器都会处理该类型的资产,并根据文件扩展名识别要导入的文件。例如,TextureImporter 负责导入.jpg、.png和.psd文件等。

有两种类型的进口商:

Unity 首先处理所有本机导入器,然后在单独的阶段处理所有脚本导入器。

预处理和后处理

AssetPostprocessorclass 提供了一系列回调,允许您在导入之前(预处理)和导入后(后处理)为不同的资产类型执行工作。有关这些回调和使用示例的详细信息,请参阅AssetPostprocessorAPI 参考。

热重载

热重载是在编辑器打开时对脚本和资产应用更改的过程。当编辑器处于 运行(Play) 模式或 编辑(Edit) 模式时,可能会发生这种情况,无需重新启动编辑器即可使更改生效。

当您更改并保存脚本时,Unity 会热重载项目的所有脚本数据。它首先将可序列化变量的值存储在所有加载的脚本中,重新加载脚本,然后恢复值。存储在不可序列化变量中的数据将丢失。

这会影响项目中的所有编辑器窗口和所有 MonoBehaviour 脚本。与其他序列化情况不同,Unity 在重新加载时默认序列化私有字段,即使它们没有 SerializeField 属性。

其他资源

资产数据库的内容
使用资产数据库进行编程