Unity 会自动导入资源并管理有关它们的各种附加数据,例如应使用哪些导入设置来导入资源,以及整个项目中资源的使用位置。下面介绍了此过程。
在 Assets 文件夹中放置诸如纹理之类的资源时,Unity 将首先检测到已添加新文件(Editor 经常根据已知的资源列表来检查 Assets 文件夹的内容)。
Unity 采取的第一步是为资源分配唯一 ID。Unity 在内部使用此 ID 来引用资源,因此可以移动或重命名资源,而不会破坏对资源的引用。
You’ll notice in the image above that there are .meta files listed in the file system for each asset and folder created within the Assets folder. These are not visible in Unity’s Project Window. Unity creates these files for each Asset, but they are hidden by default, so you may not see them in your Explorer/Finder either. You can make them visible by selecting the Mode setting to Visible Meta Files on the Editor window (main menu: Edit > Project Settings, then select the Editor category, and navigate to the Version Control section).
The ID that Unity assigns to each Asset is stored inside the .meta file which Unity creates alongside the asset file itself. This .meta file must stay with the asset file it relates to.
Important: .meta files must match and stay with their respective Asset files. If you move or rename an asset within Unity’s own Project window, Unity will also automatically move or rename the corresponding .meta file. If you move or rename an asset outside* of Unity (i.e. in Windows Explorer, or Finder on the Mac), you must move or rename the .meta file to match.
如果资源丢失其元 (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 文件夹中。