Unity 会自动导入资源并管理有关它们的各种附加数据,例如应使用哪些导入设置来导入资源,以及整个项目中资源的使用位置。下面介绍了此过程。
在 Assets 文件夹中放置诸如纹理之类的资源时,Unity 将首先检测到已添加新文件(Editor 经常根据已知的资源列表来检查 Assets 文件夹的内容)。
Unity 采取的第一步是为资源分配唯一 ID。Unity 在内部使用此 ID 来引用资源,因此可以移动或重命名资源,而不会破坏对资源的引用。
在上图中可以看到,在文件系统中为 Assets 文件夹中创建的每个资源和文件夹列出了 .meta 文件。这些文件在 Unity 的 Project 窗口中不可见。Unity 会为每个资源创建这些文件,但这些文件默认情况下为隐藏状态,因此在资源管理器/Finder 中也看不到它们。但可以将这些文件显示出来,方法是 Unity 中选择以下选项:Edit > Project Settings > Editor > Versions Control,Mode:Visible Meta Files。
Unity 分配给每个资源的 ID 都存储在 .meta 文件中(Unity 在资源文件本身旁边创建 .meta 文件)。此 .meta 文件必须与其相关的资源文件存储在同一个位置。
重要信息:.meta 文件必须与其各自资源文件匹配并与它们存储在同一个位置。如果在 Unity 自己的 Project 窗口中移动或重命名资源,Unity 也会自动移动或重命名相应的 .meta 文件。如果在 Unity 之外移动或重命名资源(如在 Windows 资源管理器中或 Mac 上的 Finder 中),必须*移动或重命名 .meta 文件以确保匹配。
如果资源丢失其元 (meta) 文件(例如,如果在 Unity 之外移动或重命名资源,而不移动/重命名相应的 .meta 文件),则将破坏对该资源的所有引用。Unity 将为移动/重命名的资源生成一个新的 .meta 文件,就像它是一个全新的资源一样,并删除旧的“孤立”.meta 文件。
例如,在纹理资源丢失其 .meta 文件的情况下,使用该纹理的任何材质现在都无法引用该纹理。要修复此问题,必须手动将该纹理重新分配给任何需要该纹理的材质。
在脚本资源丢失其 .meta 文件的情况下,任何分配了该脚本的游戏对象或预制件最终都将出现“unassigned script”组件,并将失去其功能。必须手动将脚本重新分配给这些对象才能解决此问题。
Unity 读取并处理您添加到 Assets 文件夹的任何文件,将文件内容转换为可直接用于游戏的内部数据版本。实际资源文件保持不变,经过处理和转换的数据版本将存储在项目的 Library 文件夹中。
通过使用资源的内部格式,Unity 可以准备好可直接用于游戏的资源版本,以便在编辑器中在运行时使用,同时将未修改的源文件保留在 assets 文件夹中,以便可以快速编辑它们并让编辑器自动获取更改。例如,Photoshop 文件格式使用起来很方便,可以直接保存到 Assets 文件夹中,但移动设备和 PC 显卡等硬件不能直接接受将该格式渲染为纹理。资源在 Unity 内部表示形式的所有数据都存储在 Library 文件夹中,该文件夹可以被认为类似于缓存文件夹。作为用户,切勿手动更改 Library 文件夹,尝试这样做可能会影响 Unity Editor 中项目的功能。但是,删除 Library 文件夹(当项目未在 Unity 中打开时)始终是安全的,因为它的所有数据都是通过 Assets 和 ProjectSettings 文件夹中存储的内容生成的。这也意味着不应将 Library 文件夹纳入版本控制。
某些资源文件可能会导致创建多个资源。在以下情况下可能会发生这种情况:
3D 文件(例如 FBX)定义材质和/或包含嵌入的纹理。
在这种情况下,定义的材质和嵌入的纹理在 Unity 中被提取并表示为单独的资源。
导入为多个精灵的图像文件。
通过使用 Unity 的精灵编辑器 (Sprite Editor),可以从单个图形图像定义多个精灵。在这种情况下,编辑器中定义的每个精灵将在 Project 窗口中显示为单独的精灵资源。
3D 文件包含多个动画时间轴,或者在其动画导入设置中定义了多个单独的剪辑。
在这种情况下,多个动画剪辑将在 Project 窗口中显示为单独的动画剪辑资源。
除了分配给资源的唯一 ID 外,元文件还包含您在项目窗口中选择资源时在 Inspector 中看到的所有导入设置的值。对于纹理,这包括 Texture Type、Wrap Mode、Filter Mode 和 Aniso Level 等设置。
如果更改资源的导入设置,则这些更改的设置将存储在资源附带的 .meta 文件中。系统将根据新设置重新导入资源,并在项目的 Library 文件夹中更新相应导入的“游戏就绪”数据。
备份项目或将项目添加到版本控制库时,应包括 Unity 主项目文件夹,其中包含 Assets 和 ProjectSettings 文件夹。这些文件夹中的所有信息对于 Unity 的运行都至关重要。在备份时应忽略 Library 和 Temp 文件夹。
注意:如果未显式启用,在 Unity 4.2 及更早版本中创建的项目可能没有 .meta 文件。删除这些项目中的 Library 文件夹将导致数据丢失和永久性项目损坏,因为生成的资源内部格式以及元数据都存储在 Library 文件夹中。