Unity YAML
1. YAML 文件结构
![]()
1.1 文件头
| 行 | 内容 |
|---|---|
| 第一行 | YAML 版本号 |
| 第二行 | 定义 !u! 的宏(Unity 专用标签前缀) |
典型文件头示例:
| |
1.2 对象定义块
(1)标头格式
![]()
格式示意:--- !u!<ClassID> &<FILE ID>
| 字段 | 说明 |
|---|---|
| Class ID | Unity 内部类的唯一编号(如 1 对应 GameObject),表示对象类型 |
| FILE ID | 该对象在当前 YAML 文件内的唯一 ID,用于文件内对象互相引用 |
Class ID 完整列表见官方:Class ID Reference
示例:
| |
(2)标头下方
对象类型名称 + 全量序列化属性(字段名以 m_ 开头居多)。

2. 同一 YAML 文件内引用
通过 {fileID: <FILE ID>} 格式实现。

示例:
| |
注:在同一 YAML 文件中,
Transform组件通过m_GameObject引用所属GameObject的 File ID。
3. 跨 YAML 文件引用
3.1 GUID
整个资产文件的全局唯一 ID,保存在与资产同路径、同名的 .meta 文件中。
3.2 .meta 文件
存储 GUID、资产导入设置、Asset Bundle 配置等核心元数据。
3.3 YAML 中的 type 字段
![]()
跨文件引用常见写法:
| |
type 值 | 含义 |
|---|---|
| 2 | 从 Assets 文件夹加载资源 |
| 3 | 资源经导入写入 Library,由编辑器从 Library 加载 |
3.4 脚本序列化
所有自定义脚本在 YAML 中均序列化为 MonoBehaviour 类型;通过 m_Script 引用脚本对应 .meta 的 GUID 关联到具体 C# 文件。
| |
C# 源文件本身不是 YAML;脚本的
.metaGUID 是MonoBehaviour与代码文件之间的唯一桥梁。
4. YAML 文件与 .meta 文件
4.1 YAML 文件(资产本体)
底层序列化存储格式,是资产的实际内容。
| 资产类型 | 扩展名 |
|---|---|
| 预制体 | .prefab |
| 场景 | .unity |
| 材质 | .mat |
| 动画片段 | .anim |
| ScriptableObject | .asset |
注:PNG / FBX / MP3 等源文件为二进制,引擎侧配置主要在
.meta中;C# 脚本不是 YAML,仅通过.meta的 GUID 与MonoBehaviour关联。
4.2 .meta 文件(元数据)
自动生成的元数据,与资产同目录、同名(如 Player.prefab → Player.prefab.meta),是资产的全局标识与配置。
Assets下所有内容均有对应.meta- 版本管理时 必须一并提交
.meta,否则 GUID 变化会导致引用丢失
关系速查

| 概念 | 作用域 | 存放位置 |
|---|---|---|
| FILE ID | 单个 YAML 文件内 | 对象标头 &数字 |
| GUID | 整个项目全局 | .meta 文件 |
| Class ID | Unity 类型系统 | 对象标头 !u!数字 |
要点速查
| 主题 | 要点 |
|---|---|
| 文件头 | YAML 版本 + !u! 宏 |
| 对象块 | Class ID 表类型,FILE ID 表文件内引用 |
| 文件内引用 | {fileID: ...} |
| 跨文件引用 | {fileID, guid, type},type 2=Assets,3=Library |
| 自定义脚本 | 序列化为 MonoBehaviour,靠脚本 .meta 的 GUID |
.meta | GUID + 导入设置;与资产成对存在 |