命令行参数
AssetDatabase

幕后工作

Unity 会自动导入资源并管理有关它们的各种附加数据,例如应使用哪些导入设置来导入资源,以及整个项目中资源的使用位置。下面介绍了此过程。

Unity 导入资源时会发生什么?

1.分配唯一 ID

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

The first step Unity takes it to assign a unique ID to the asset. This ID is used internally by Unity to refer to the asset which means the asset can be moved or renamed without references to the asset breaking.

2.创建 .meta 文件

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

在上图中可以看到,在文件系统中为 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 文件的情况下,使用该纹理的任何材质现在都无法引用该纹理。要修复此问题,必须手动将该纹理重新分配给任何需要该纹理的材质。

In the case of a script asset losing its .meta file, any Game Objects or Prefabs which had that script assigned would end up with an “unassaigned script” component, and would lose their functionality. You would have to manually re-assign the script to these objects to fix this.

3.处理源资源

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 窗口中显示为单独的动画剪辑资源。

导入设置可能改变资源的处理方式

As well as the unique ID assigned to the asset, the meta files contain values for all the import settings you see in the inspector when you have an asset selected in your project window. For a texture, this includes settings such as the Texture Type, Wrap Mode, Filter Mode and Aniso Level.

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

备份项目或将项目添加到版本控制库时,应包括 Unity 主项目文件夹,其中包含 AssetsProjectSettings 文件夹。这些文件夹中的所有信息对于 Unity 的运行都至关重要。在备份时应忽略 LibraryTemp 文件夹。

注意如果未显式启用,在 Unity 4.2 及更早版本中创建的项目可能没有 .meta 文件。删除这些项目中的 Library 文件夹将导致数据丢失和永久性项目损坏,因为生成的资源内部格式以及元数据都存储在 Library 文件夹中。

命令行参数
AssetDatabase