.meta 文件记录 Unity 资产的稳定身份和导入配置,团队项目中必须与对应资产一起提交到版本控制。

1. .meta 文件是什么

当 Unity 导入 Assets 目录中的文件或文件夹时,会为其创建同名 .meta 文件。
例如:
文件夹也有对应 .meta
.meta 通常是 Unity 使用的文本序列化格式,主要包含:
  • 资产的 GUID;
  • 对应导入器类型;
  • 纹理、模型、音频等导入设置;
  • 资源标签、AssetBundle 等部分配置。
它不是通用 JSON 文件,也不应随意手动修改。

2. GUID 的作用

Unity 为资产分配 GUID,用来稳定标识资产。
场景、Prefab、材质等序列化文件引用资源时,常保存类似信息:
这里的 guid 来自目标资产的 .meta 文件。
因此,即使资产在 Unity Project 窗口中被重命名或移动,只要 .meta 与资产一起移动,GUID 不变,原有引用通常仍然有效。

3. .meta 存储什么,不存储什么

本章从「存储」和「不应简单理解为存储」两方面说明 .meta 存储什么,不存储什么。

3.1 存储

  • 资产 GUID;
  • 资产导入器及导入设置;
  • 与导入流程相关的元数据。

3.2 不应简单理解为存储

  • 所有资源依赖关系;
  • 场景中每个对象如何引用该资产;
  • 项目运行时的全部状态。
资源引用通常存储在引用方的序列化文件中,并通过目标资产 GUID 建立关联。.meta 提供稳定身份,但不是一张完整的依赖关系数据库。
Unity 还会在 Library 目录中维护可再生成的导入结果和数据库,但 Library 一般不提交到版本控制。

4. Unity 如何处理 .meta

本章从「新增资产」「修改导入设置」和「在 Unity 内移动或重命名」等方面说明 Unity 如何处理 .meta。

4.1 新增资产

把文件放入 Assets 后,Unity:
  1. 检测新资产;
  1. 生成 GUID;
  1. 创建 .meta
  1. 根据导入器生成 Library 中的导入数据。

4.2 修改导入设置

在 Inspector 中修改纹理压缩、模型比例、音频加载方式等设置时,Unity 会更新 .meta,然后重新导入资产。
因此团队成员必须同时获得资产文件和对应 .meta,否则导入结果可能不一致。

4.3 在 Unity 内移动或重命名

在 Project 窗口中操作时,Unity 会同时处理资产和 .meta,这是最安全的方式。

4.4 在文件管理器中移动或重命名

必须确保资产和 .meta 同步移动、同步改名。
错误示例:
Unity 可能把新位置的图片识别成新资产,并生成新 GUID;旧位置的 GUID 则消失,原引用会断开。

5. 删除 .meta 会发生什么

删除 .meta 后再次打开或刷新 Unity,编辑器通常会生成新的 .meta 和新的 GUID。
可能结果:
  • Prefab 或场景中的脚本显示 Missing;
  • 材质丢失纹理;
  • 动画、音频、模型引用失效;
  • Addressables、AssetBundle 或自定义资源表关联异常;
  • 合并分支后出现大量引用丢失。
“材质变粉”通常表示 Shader 缺失、不兼容或编译失败。删除某些 Shader 或材质相关 .meta 可能间接导致粉色,但不能把所有粉色材质都归因于 .meta

6. 版本控制规则

本章从「必须提交」「通常忽略」和「Git 示例」等方面说明版本控制规则。

6.1 必须提交

6.2 通常忽略

具体规则应根据 Unity 版本、IDE 和团队流程调整。

6.3 Git 示例

不要添加:
忽略所有 .meta 会破坏资产引用体系。

7. 团队协作推荐方法

  • 统一在 Unity Project 窗口中移动和重命名资产。
  • 资产文件与 .meta 必须在同一次提交中出现。
  • 代码评审时检查是否存在“新增资产但没有 .meta”。
  • 不提交 Library,它体积大且可再生成。
  • 不手工复制已有 .meta 给另一个新资产。
  • 合并冲突时不要随意保留双方 GUID。
  • 二进制资源使用 Git LFS 或支持锁定的版本控制方案。
  • 场景和 Prefab 尽量使用文本序列化,便于差异比较和合并。
  • 提交前运行 Unity,确认 Console 无 Missing Script 和资源丢失。
  • 切换大分支后如出现异常,可先确认 .meta 和包版本,再考虑删除 Library 重新导入。

8. 常见事故与处理

8.1 资产还在,但引用全丢了

检查:
  1. 资产 .meta 是否被删除或重新生成;
  1. Git 历史中旧 .meta 的 GUID;
  1. 场景或 Prefab 引用的 GUID;
  1. 是否能从正确提交恢复原 .meta
恢复原 GUID 往往比逐个重新绑定资源更高效。

8.2 Git 显示文件删除后又新增

可能原因:
  • 资产在文件管理器中移动;
  • 大小写变化;
  • .meta 没有一起移动;
  • 不同操作系统对路径大小写的处理不同。
应确认 Git 是否识别为 rename,并检查目标资产 GUID 是否保持不变。

8.3 出现两个资产共用同一 GUID

常见原因是手工复制了资产和 .meta,又保留同一个 GUID。
处理:
  • 不要让两个独立资产长期共享 GUID;
  • 让 Unity 为真正的新资产生成独立 .meta
  • 确认引用应该指向哪一个资产;
  • 提交修复前完整检查场景和 Prefab。

9. 总结

只要 GUID 无故变化,引用就可能断裂。

10. 官方参考