当 Unity 导入资源时,它还会存储和管理有关该资源的其他数据,例如 Unity 应该使用哪些导入设置来导入资源,以及资源在整个项目中的使用位置。以下是此过程的工作原理说明
.meta
文件来伴随资源文件。任何给定资源的导入设置都会影响 Unity 如何处理该资源。如果修改资源文件或任何资源的导入设置,Unity 将重新导入资源。有关更多信息,请参阅资源及其导入设置。
Unity 编辑器会频繁检查Assets
文件夹的内容与它已知的资源列表是否一致。当您将资源放置在Assets
文件夹中时,Unity 会检测到您添加了一个新文件。
当 Unity 找到新文件时,它会为资源分配一个唯一的 ID。这是一个 Unity 在内部用于引用资源的 ID,以便 Unity 可以移动或重命名资源而不会破坏任何内容。
ID 通常在编辑器中不可见,
下图显示了 Unity 为项目Assets
文件夹中的每个项目创建的.meta
文件。Unity 为资源文件和文件夹创建元文件。
这些文件在 Unity 的项目窗口显示Assets
文件夹内容的窗口(项目选项卡)更多信息
参见术语表中隐藏,并且默认情况下也可能在您的文件系统中隐藏(请参阅维基百科:隐藏文件和隐藏目录),因此除非您在计算机上显示隐藏文件,否则您可能无法在 Windows 资源管理器或 Finder 中看到它们。
此示例演示了 Unity 为项目Assets
文件夹内的每个资源或文件夹创建了一个.meta
文件,因为它们出现在系统文件浏览器中。但是,这些.meta
文件在项目窗口中不可见,因为它们默认情况下是隐藏的。要使其可见,请打开模式项目设置并启用可见元文件。
当 Unity 为资源创建.meta
文件时,它会将资源的 ID 写入.meta
文件中,并将.meta
文件存储在与资源文件相同的位置。
.meta
文件包含分配给资源的唯一 ID,以及在检视器Unity 窗口,显示当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。更多信息
参见术语表窗口中选择项目窗口中的资源时看到的所有导入设置的值。例如,对于纹理渲染游戏对象、精灵或 UI 元素时使用的图像。纹理通常应用于网格的表面以使其具有视觉细节。更多信息
参见术语表,这包括纹理类型、环绕模式、滤镜模式和各向异性级别纹理的各向异性过滤 (AF) 级别。允许您在以陡峭角度查看纹理时提高纹理质量。适用于地板和地面纹理。更多信息
参见术语表导入设置。
如果更改资源的导入设置,Unity 会将这些新设置保存到伴随资源的.meta
文件中。然后,Unity 会根据更新的设置重新导入资源,并更新项目Library
文件夹中相应的导入“游戏就绪”数据。
重要:元文件包含有关资源如何在项目中使用的重要信息,并且必须与它们相关的资源文件保持在一起。如果在 Unity 自身的项目窗口中移动或重命名资源,Unity 也会自动移动或重命名相应的 .meta 文件。但是,如果在 Unity 外部(即在 Windows 资源管理器或 macOS 上的 Finder 中)移动或重命名资源,则必须移动或重命名 .meta 文件以匹配。
如果资源丢失了其元文件(例如,如果在 Unity 外部移动或重命名资源,但没有移动或重命名相应的 .meta 文件),则项目中对该资源的任何引用都将断开。在这种情况下,Unity 会注意到该资源没有相应的元文件,会为移动/重命名的资源生成一个新的元文件,就像它是一个全新的资源一样,并删除旧的“孤立” .meta 文件。
此过程可能会导致项目出现重大问题。例如:* 如果纹理资源丢失了其 .meta 文件,则使用该纹理的任何材质都会丢失对其的引用。要修复它,您需要手动将该纹理重新分配给任何需要它的材质。* 如果脚本资源丢失了其 .meta 文件,则任何已分配该脚本的游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路点等。游戏对象的功能由附加到它的组件定义。更多信息
参见术语表或预制件一种资源类型,允许您存储包含组件和属性的游戏对象。预制件充当模板,您可以从中在场景中创建新的对象实例。更多信息
参见术语表都将具有“未分配脚本”组件,并丢失其功能。要修复它,您需要手动将该脚本重新分配给任何需要它的游戏对象。
Unity 为项目Assets
文件夹中的每个文件夹分配其自己的.meta
文件。但是,某些版本控制用于管理文件更改的系统。您可以将 Unity 与大多数常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。更多信息
参见术语表系统 (VCS) 无法存储空文件夹。这意味着,当您向项目添加或删除空文件夹时,您的 VCS 会将.meta
文件存储为已添加或已删除,但不会存储添加或删除文件夹本身的更改,这可能会令人困惑或产生问题。
为了解决此问题,Unity 在与空文件夹相关的以下特定方式下运行
如果 Unity 检测到一个空文件夹不再具有相应的元文件,而该文件夹以前具有元文件,则 Unity 假设元文件是通过 VCS 中的其他用户删除该文件夹而删除的,并在本地删除该空文件夹。
如果 Unity 检测到文件夹的新元文件,但该文件夹在本地不存在,则 Unity 假设新元文件是通过 VCS 中的其他用户添加该文件夹而创建的,并在本地创建相应的空文件夹。