Unity represents prefabAn asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. More info
See in Glossary instances, nested prefabs, and prefab variants in serialized sceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary (.unity) and prefab (.prefab) files using a small set of related YAML elements. This page describes those elements and how they fit together.
Understanding this format is useful when you resolve merge conflicts in prefab files manually, inspect files produced by an automated build, or work with Unity assets from scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary that run outside the Editor.
For general information about Unity serialization format, refer to Format of text serialized files and UnityYAML. For annotated YAML examples from prefab files, refer to Example of YAML prefab serialization.
Unity represents a reference to a prefab inside a scene or another prefab file using four related elements:
PrefabInstance element that records individual property modifications and the objects added or removed relative to the source prefab.Transform).100100000, and PrefabInstance objects reference it through the m_SourcePrefab property.For information on how these elements are arranged in prefab variant files, refer to Prefab variants.
Unity represents a prefab instance as a YAML document with class ID 1001 and document type PrefabInstance:
--- !u!1001 &<fileID>
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
...
m_SourcePrefab: {fileID: 100100000, guid: <prefab-guid>, type: 3}
The key properties are:
m_Modification: a block of data that records everything that differs between this instance and the source prefab. For more information, refer to The m_Modification block.m_SourcePrefab: a cross-file reference to the source prefab asset. The fileID is always 100100000 (the prefab asset handle), so only the guid value varies between references. For more information, refer to The prefab asset handle.For a complete example of a prefab instance in a scene, refer to Prefab instance in a scene.
The m_Modification block stores data that differs between the instance and the source prefab, including property overrides and any objects that are added or removed. It has the following fields:
| Field | Description |
|---|---|
m_TransformParent |
Reference to this instance’s parent Transform component in the containing file. {fileID: 0} means that the instance has no parent, which is a characteristic of prefab variants because the instance is the root of the variant file. |
m_Modifications |
Array of property override entries. Each entry points to an object in the source prefab and records a new value for one property. For more information, refer to Property modifications. |
m_RemovedComponents |
Components from the source prefab that are removed in this instance. |
m_RemovedGameObjects |
GameObjectsThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info See in Glossary from the source prefab that are removed in this instance. |
m_AddedGameObjects |
GameObjects added to this instance that don’t exist in the source prefab. |
m_AddedComponents |
Components added to this instance that don’t exist in the source prefab. |
Unity writes empty lists for any of these fields even when there are no entries. A clean prefab instance with no overrides still contains m_Modifications: [], m_RemovedComponents: [], and so on.
Note: m_Modification (singular) is the name of the block. m_Modifications (plural) is the name of the property-override array inside the block. The two names differ by one letter.
Each entry in the m_Modifications array has four fields:
| Field | Description |
|---|---|
target |
Cross-file reference to the object inside the source prefab whose property this entry overrides. The guid matches the source prefab asset. |
propertyPath |
Path to the property being overridden. Matches SerializedProperty.propertyPath. Dotted paths such as m_LocalPosition.x describe subproperties. |
value |
The override value, stored as a string. Empty for object-reference overrides. |
objectReference |
Reference to another object when the override value is a reference. {fileID: 0} when the override isn’t an object reference. |
A typical property override uses the value field:
- target: {fileID: 599465214307944399, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
propertyPath: m_LocalPosition.x
value: 39.341
objectReference: {fileID: 0}
An object-reference override uses objectReference instead, with an empty value field:
- target: {fileID: 1773024279374141337, guid: 89d4c08db6b9096438cb6c7718d47f26, type: 3}
propertyPath: m_Material
value:
objectReference: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
For more information about the {fileID, guid, type} format in references, refer to Direct reference asset management.
A scene file or a containing prefab file can reference specific objects inside a prefab instance. For example, if a prefab instance’s root is a child of a GameObject in the scene, the parent GameObject’s Transform component contains the prefab instance’s root in its m_Children array.
In these cases, Unity doesn’t serialize the referenced object directly into the scene or containing prefab file. Instead, it adds a stripped placeholder element to that file. The placeholder contains only the information needed to identify the source object:
--- !u!4 &<fileID> stripped
Transform:
m_CorrespondingSourceObject: {fileID: <source-fileID>, guid: <source-guid>, type: 3}
m_PrefabInstance: {fileID: <PrefabInstance-fileID>}
m_PrefabAsset: {fileID: 0}
The stripped keyword on the document header indicates that the object is a placeholder. The fields are:
| Field | Description |
|---|---|
m_CorrespondingSourceObject |
Cross-file reference to the matching object in the source prefab asset. |
m_PrefabInstance |
Local reference to the PrefabInstance element in the current file that this placeholder belongs to. |
m_PrefabAsset |
Has the value {fileID: 0} in scenes and containing prefabs. This field is only set when the object is itself part of a prefab asset on disk. |
When Unity imports a .prefab asset, it creates a special object called the prefab asset handle with fileID 100100000. The handle doesn’t appear as a YAML document in the source .prefab file on disk. It’s generated during import and is stored in the prefab’s serialized artifact in the Library folder.
The handle is the target of the m_SourcePrefab reference on a PrefabInstance:
m_SourcePrefab: {fileID: 100100000, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
Because fileID 100100000 is constant for every prefab, only the guid changes between references to different prefabs. The type: 3 indicates that the reference resolves to the imported artifact in the Library folder rather than to a file in the Assets folder. For more information about type values, refer to Type field values.
A prefab variant is a .prefab file that inherits from a base prefab.
On disk, Unity represents a prefab variant’s root as a PrefabInstance element (class ID 1001) rather than as a separately serialized GameObject element. Inside that PrefabInstance, the m_Modification.m_TransformParent field has the value {fileID: 0}, because the instance has no parent inside the file. This is how Unity identifies a prefab as a variant.
The m_SourcePrefab field references the base prefab that the variant inherits from. The m_Modification block records the data unique to the variant, such as overridden property values, components, and added or removed objects, using the same format as any other prefab instance.
For an annotated example of a variant file, refer to Prefab variant.