Unity中asset的序列化有两种方式:Binary,Text。
一般项目里会使用Text的方式,主要原因是可以使用版本控制,Merge这些文件。
在Text模式下,所有在Unity中创建的asset资源都可以通过文件编辑器打开,阅读其中的内容。例如Main.unity, building.prefab, building.material, role.controller等等。
Unity使用YAML标记语言来组织说明这些asset。
制作一个GameObject的Prefab,打开asset文件内容如下:
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1428368473011942}
m_IsPrefabParent: 1
--- !u!1 &1428368473011942
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4169282005572874}
m_Layer: 0
m_Name: GameObject
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4169282005572874
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1428368473011942}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.57, y: 3.4948516, z: -0.6245509}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
可看出,整个文件的结构如下:
- 前两行固定信息
- 多个组件信息
每个资源都是由若干组件构成,每个组件描述了各种属性
- 文件头
前两行固定信息
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
- 各个组件信息
- 组件类型ID,内部对象ID
--- !u!1001 &100100000
第一个数字1001,表示此asset的类型,代表Prefab。
第二个数字100100000,是在当前文件中的对象ID,只在当前文件中有效。有可能不同的asset的对象ID是相同的。注意这个不是FileID,FileID存在.meta中, 是合局唯一的。
- 组件类型名
Prefab:
这里的名称与组件类型ID对应,对应表如下。
https://docs.unity3d.com/560/Documentation/Manual/ClassIDReference.html
- 组件的各种属性
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1428368473011942}
m_IsPrefabParent: 1
https://docs.unity3d.com/560/Documentation/Manual/FormatDescription.html
网友评论