.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:- 检测新资产;
- 生成 GUID;
- 创建
.meta;
- 根据导入器生成
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 资产还在,但引用全丢了
检查:
- 资产
.meta是否被删除或重新生成;
- Git 历史中旧
.meta的 GUID;
- 场景或 Prefab 引用的 GUID;
- 是否能从正确提交恢复原
.meta。
恢复原 GUID 往往比逐个重新绑定资源更高效。
8.2 Git 显示文件删除后又新增
可能原因:
- 资产在文件管理器中移动;
- 大小写变化;
.meta没有一起移动;
- 不同操作系统对路径大小写的处理不同。
应确认 Git 是否识别为 rename,并检查目标资产 GUID 是否保持不变。
8.3 出现两个资产共用同一 GUID
常见原因是手工复制了资产和
.meta,又保留同一个 GUID。处理:
- 不要让两个独立资产长期共享 GUID;
- 让 Unity 为真正的新资产生成独立
.meta;
- 确认引用应该指向哪一个资产;
- 提交修复前完整检查场景和 Prefab。
9. 总结
只要 GUID 无故变化,引用就可能断裂。