Version: 2021.1
导入器一致性
资源数据库

资源元数据

Unity 导入资源时,它会为您存储并管理有关该资源的附加数据,例如应使用哪些导入设置来导入资源,以及整个项目中资源的使用位置。下面介绍了此过程:

  1. Unity 为资源分配唯一 ID。
  2. Unity 创建一个伴随资源文件的 .meta 文件。
  3. Unity 对资源进行处理

任何给定资源的导入设置可以影响 Unity 对资源的处理方式。如果您修改资源文件或资源的任何导入设置,Unity 将重新导入该资源。有关更多信息,请参阅资源及其导入设置

唯一 ID

Assets 文件夹中放置诸如纹理之类的资源时,Unity 将检测到已添加新文件,因为 Editor 经常根据已知的资源列表来检查 Assets 文件夹的内容。

Unity 找到新文件时会向此资源分配唯一 ID。这是 Unity 在内部使用的 ID,用于引用资源,以便 Unity 可以移动或重命名此资源而不会破坏任何内容。

这些 ID 通常在编辑器中不可见,

元文件

下图显示了 Unity 为项目 Assets 文件夹中的每个项目创建的 .meta 文件。Unity 为资源文件和文件夹创建元文件。

它们隐藏在 Unity 的项目窗口中,您可能还会发现它们在默认情况下隐藏在文件系统,因此除非您在计算机上显示隐藏文件,否则可能不会在 Windows 资源管理器或 Finder 中看到它们。

计算机上 Unity 项目中的 Assets 文件夹、元文件与 Unity 中的 Project 窗口之间的关系
计算机上 Unity 项目中的 Assets 文件夹、元文件与 Unity 中的 Project 窗口之间的关系

此示例表明,Unity 为项目的 Assets 文件夹中的每个资源或文件夹创建了一个 .meta 文件,就像它们出现在系统文件浏览器中一样。然而,这些 .meta 文件在 Project 窗口中不可见,因为默认情况下,它们会被隐藏。您可以显示这些文件,方法是从 Mode 项目设置中选择 Visible Meta Files

Unity 为资源创建 .meta 文件时,会将此资源的 ID 写入 .meta 文件,并将 .meta 文件与资源文件存储在同一位置。

除了分配给资源的唯一 ID 外,.meta 文件还包含您在 Project 窗口中选择资源时在 Inspector 窗口中看到的所有导入设置的值。例如,对于纹理,这包括 Texture TypeWrap ModeFilter ModeAniso Level 导入设置。

如果更改资源的导入设置,则这些新设置将保存到资源附带的 .meta 文件中。随后,Unity 将根据更新的设置来重新导入资源,并在项目的 Library 文件夹中更新相应导入的“游戏就绪”数据。

重要:_元文件中包含有关资源在项目中的使用方式的重要信息,必须将元文件与其相关的资源文件放在一起,因此,如果在文件系统中移动或重命名资源文件,也必须移动/重命名元文件以进行匹配。如果在 Unity 自己的 Project 窗口中移动或重命名资源,Unity 也会自动移动或重命名相应的 .meta 文件。如果在 Unity 之外移动或重命名资源(如在 Windows 资源管理器中或 macOS 上的 Finder 中),必须移动或重命名 .meta 文件以确保匹配。

如果资源丢失其元 (meta) 文件(例如,如果在 Unity 之外移动/重命名资源,而不移动/重命名相应的 .meta 文件),则将破坏您的项目中对该资源的所有引用。在这种情况下,Unity 会注意到资源没有相应的元文件,并为移动/重命名的资源生成一个新的元文件,就像它是一个全新的资源一样,并删除旧的“孤立”的 .meta 文件。

作为这可能导致的问题类型的一个示例,在纹理资源丢失其 .meta 文件的情况下,使用该纹理的任何材质现在都无法引用该纹理。要修复此问题,必须手动将该纹理重新分配给任何需要该纹理的材质。

或者,在脚本资源丢失其 .meta 文件的情况下,任何分配了该脚本的游戏对象或预制件最终都将出现一个 “unassigned script” 组件,并将失去其功能。必须手动将脚本重新分配给这些对象才能解决此问题。

空文件夹、元文件和版本控制

在 Unity 中,项目 Assets 文件夹中的文件夹分配有自己的 .meta 文件 - 但是一些版本控制系统 (VCS) 不能存储空文件夹。这意味着当您从项目中添加或删除一个空文件夹时,您的 VCS 会将 .meta 文件存储为添加或删除,但不会存储添加或删除文件夹本身的更改,这可能会造成混淆或产生问题。

为帮助解决此问题,Unity 针对空文件夹采用以下特定方式:

如果 Unity 检测到一个空文件夹不再含有相应的元文件,如果该文件夹以前有元文件,Unity 会假设元文件被另一个用户通过在 VCS 中删除该文件夹时删除,并在本地删除该空文件夹。

如果 Unity 检测到文件夹有一个新的元文件,但该文件夹在本地不存在,则 Unity 会假设新元文件是被另一个用户通过在 VCS 中添加文件夹而创建,并在本地创建相应的空文件夹。

导入器一致性
资源数据库