元某人也元某人也

Unity YAML

Unity YAML 序列化结构、FILE ID / GUID / Class ID 与跨文件引用速查。

本文目录

Unity YAML

1. YAML 文件结构

YAML 文件整体结构

1.1 文件头

行内容
第一行YAML 版本号
第二行定义 !u! 的宏(Unity 专用标签前缀)

典型文件头示例:

1
2
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:

1.2 对象定义块

(1)标头格式

对象标头格式

格式示意:--- !u!<ClassID> &<FILE ID>

字段说明
Class IDUnity 内部类的唯一编号(如 1 对应 GameObject),表示对象类型
FILE ID该对象在当前 YAML 文件内的唯一 ID,用于文件内对象互相引用

Class ID 完整列表见官方:Class ID Reference

示例:

1
--- !u!1 &8410423576689524921
(2)标头下方

对象类型名称 + 全量序列化属性(字段名以 m_ 开头居多)。

GameObject 序列化示例


2. 同一 YAML 文件内引用

通过 {fileID: <FILE ID>} 格式实现。

同文件引用示例 1 同文件引用示例 2

示例:

1
m_GameObject: {fileID: 8410423576689524921}

注:在同一 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 字段示例

跨文件引用常见写法:

1
m_Script: {fileID: 11500000, guid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, type: 3}
type 值含义
2从 Assets 文件夹加载资源
3资源经导入写入 Library,由编辑器从 Library 加载

3.4 脚本序列化

所有自定义脚本在 YAML 中均序列化为 MonoBehaviour 类型;通过 m_Script 引用脚本对应 .meta 的 GUID 关联到具体 C# 文件。

1
2
MonoBehaviour:
  m_Script: {fileID: 11500000, guid: abcd1234..., type: 3}

C# 源文件本身不是 YAML;脚本的 .meta GUID 是 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 变化会导致引用丢失

关系速查

image-20260520092814044

概念作用域存放位置
FILE ID单个 YAML 文件内对象标头 &数字
GUID整个项目全局.meta 文件
Class IDUnity 类型系统对象标头 !u!数字

要点速查

主题要点
文件头YAML 版本 + !u! 宏
对象块Class ID 表类型,FILE ID 表文件内引用
文件内引用{fileID: ...}
跨文件引用{fileID, guid, type},type 2=Assets,3=Library
自定义脚本序列化为 MonoBehaviour,靠脚本 .meta 的 GUID
.metaGUID + 导入设置;与资产成对存在
仅用于交流学习,记录学习心得