Version: 2019.1

PrefabUtility.SaveAsPrefabAssetAndConnect

Switch to Manual
public static GameObject SaveAsPrefabAssetAndConnect (GameObject root, string assetPath, InteractionMode action);

Parameters

instanceRootThe GameObject to save as a Prefab and make into a Prefab instance.
assetPathThe path to save the Prefab at.
actionThe interaction mode to use for this action.
successThe result of the save action, either successful or unsuccessful. Use this together with the console log to get more insight into the save process.

Returns

GameObject The root GameObject of the saved Prefab Asset, if available.

Description

Use this function to create a Prefab Asset at the given path from the given GameObject including any children in the Scene and at the same time make the given GameObject into an instance of the new Prefab.

In case some of the children are Prefab instances they will automatically become nested inside the new Prefab.

The input object has to be a plain GameObject or the outermost root of a Prefab Instance. It cannot be a child inside a Prefab instance.

If the input object is a Prefab instance root the resulting Prefab will be a Variant Prefab. Should you in this case actually want to create a new uniqueue Prefab you need to unpack the instance first.

The returned object is the root GameObject of the saved Prefab Asset, if available. If the editor in currently in the middle of an asset editing batch operation, as controlled with AssetDatabase.StartAssetEditing and AssetDatabase.StopAssetEditing, assets are not immediately imported upon being saved. In this case, SaveAsPrefabAsset will return null even if the save was successful because the saved Prefab Asset was not yet reimported and thus not yet available.

If you are saving over an existing Prefab, Unity tries to preserve references to the Prefab itself and the individual parts of the Prefab such as child GameObjects and Components. To do this, it matches the names of GameObjects between the new saved Prefab and the existing Prefab.

Note: Because this matching is done by name only, if there are multiple GameObjects with the same name in the Prefab's hierarchy, you cannot predict which will be matched. Therefore if you need to ensure your references are preserved when saving over an existing prefab, you must ensure all GameObjects within the Prefab have unique names.

Also note: You may encounter a similar problem in the case of preserving references to existing Components when you save over an existing Prefab, if a single GameObject within the Prefab has more than one of the same Component type attached. In this case you cannot predict which of them will be matched to the existing references.

See Also: SaveAsPrefabAsset, UnpackPrefabInstance.