Unity 导入资源时,它会存储并管理有关该资源的附加数据,例如 Unity 应使用哪些导入设置来导入资源,以及整个项目中资源的使用位置。下面介绍了此过程:
.meta 文件。任何给定资源的导入设置可以影响 Unity 对资源的处理方式。如果您修改资源文件或资源的任何导入设置,Unity 将重新导入该资源。有关更多信息,请参阅资源及其导入设置。
Unity 编辑器经常根据已知的资源列表检查 Assets 文件夹的内容。您将资源放入 Assets 文件夹时,Unity 会检测到您添加了新文件。
Unity 找到新文件时,会向此资源分配唯一 ID。这是 Unity 在内部使用的 ID,用于引用资源,以便 Unity 可以移动或重命名此资源而不会破坏任何内容。
这些 ID 通常在编辑器中不可见,
下图显示了 Unity 为项目的 .meta 文件夹中的每个项目创建的 Assets 文件。Unity 会为资源文件和文件夹创建元文件。
这些文件隐藏在 Unity 的项目窗口中,并且默认情况下也可能隐藏在文件系统中(请参阅维基百科:隐藏文件和隐藏目录),因此除非在计算机上显示隐藏的文件,否则可能无法在 Windows 资源管理器或访达中看到这些文件。
Assets 文件夹、元文件与 Unity 中的项目窗口之间的关系此示例表明,Unity会为项目的 Assets 文件夹中的每个资源或文件夹创建一个 .meta 文件,因为它们会出现在系统文件浏览器中。但是,这些 .meta 文件在项目窗口中不可见,因为它们默认为隐藏状态。要使这些文件可见,请打开模式 (Mode) 项目设置并启用可见元文件 (Visible Meta Files)。
Unity 为资源创建 .meta 文件时,会将此资源的 ID 写入 .meta 文件,并将 .meta 文件与资源文件存储在同一位置。
.meta 文件包含分配给资源的唯一 ID,还包含您在项目窗口中选择资源时在检视面板窗口中看到的所有导入设置的值。例如,对于纹理,这包括 Texture Type、Wrap Mode、Filter Mode 和 Aniso Level 导入设置。
如果更改资源的导入设置,Unity 会将这些新设置保存到资源附带的 .meta 文件中。随后,Unity 将根据更新的设置来重新导入资源,并在项目的 Library 文件夹中更新相应导入的“游戏就绪”数据。
重要提示:元文件包含有关如何在项目中使用资源的重要信息,元文件必须与相关的资源文件保存在一起。如果在 Unity 自己的项目窗口中移动或重命名资源,Unity 也会自动移动或重命名相应的 .meta 文件。但是,如果在 Unity 之外移动或重命名资源(即在 Windows 资源管理器中或 macOS 上的访达中),必须移动或重命名 .meta 文件以确保匹配。
如果资源丢失元文件(例如,如果在 Unity 之外移动或重命名资源,但不移动或重命名相应的 .meta 文件),则将破坏您的项目中对该资源的所有引用。在这种情况下,Unity 会注意到资源没有相应的元文件,并为移动/重命名的资源生成一个新的元文件,就像它是一个全新的资源一样,并删除旧的“孤立”的 .meta 文件。
此过程可能会导致项目出现严重问题。例如: * 如果纹理资源丢失 .meta 文件,则使用该纹理的任何材质都将失去对该纹理的引用。要修复此问题,需要手动将该纹理重新分配给任何需要该纹理的材质。 * 如果脚本资源丢失 .meta 文件,任何分配了该脚本的游戏对象或预制件都将改为具有一个 “unassigned script” 组件,并失去其功能。要解决此问题,需要手动将该脚本重新分配给任何需要该脚本的游戏对象。
Unity 会为项目的 Assets 文件夹中的每个文件夹分配自己的 .meta 文件。但是,某些 Version Control 系统 (VCS) 无法存储空文件夹。这意味着当您从项目中添加或删除一个空文件夹时,您的 VCS 会将 .meta 文件存储为添加或删除,但不会存储添加或删除文件夹本身的更改,这可能会造成混淆或产生问题。
为帮助解决此问题,Unity 针对空文件夹采用以下特定方式:
如果 Unity 检测到一个空文件夹不再含有相应的元文件,如果该文件夹以前有元文件,Unity 会假设元文件被另一个用户通过在 VCS 中删除该文件夹时删除,并在本地删除该空文件夹。
如果 Unity 检测到文件夹有一个新的元文件,但该文件夹在本地不存在,则 Unity 会假设新元文件是被另一个用户通过在 VCS 中添加文件夹而创建,并在本地创建相应的空文件夹。