# InstantiatePrefab

> Instantiates the given Prefab in a given Scene.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor](/engine/6000.6/script-reference/unityeditor.md)
* **Assembly:** UnityEditor.CoreModule

## InstantiatePrefab(Object)

Instantiates the given Prefab in a given Scene.

```csharp
public static Object InstantiatePrefab(Object assetComponentOrGameObject)
```

### Parameters

**** (\[Object]\(/engine/6000.6/script-reference/unityengine/object)): Prefab Asset to instantiate.

### Returns

| Type                                                            | Description                               |
| --------------------------------------------------------------- | ----------------------------------------- |
| [Object](/engine/6000.6/script-reference/unityengine/object.md) | The GameObject at the root of the Prefab. |

### Remarks

This is similar to Instantiate but creates a Prefab connection to the Prefab. If you do not specify a Scene handle, the Prefab is instantiated in the active Scene.

**Note:** You should not instantiate Prefabs from the [OnValidate()](/engine/6000.6/script-reference/unityengine/monobehaviour/onvalidate.md) or [Awake()](/engine/6000.6/script-reference/unityengine/monobehaviour/awake.md) method. This is because the order in which GameObjects become awake is not deterministic, and therefore can result in unexpected behaviour. If you try this, Unity will generate a warning reading "SendMessage cannot be called during Awake, CheckConsistency, or OnValidate".

### Examples

```csharp
using UnityEngine;
using UnityEditor;

public class Example
{
    [MenuItem("Examples/Instantiate Selected")]
    static void InstantiatePrefab()
    {
        Selection.activeObject = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject);
    }

    [MenuItem("Examples/Instantiate Selected", true)]
    static bool ValidateInstantiatePrefab()
    {
        GameObject go = Selection.activeObject as GameObject;
        if (go == null)
            return false;

        return PrefabUtility.IsPartOfPrefabAsset(go);
    }
}
```

## InstantiatePrefab(Object, Scene)

Instantiates the given Prefab in a given Scene.

```csharp
public static Object InstantiatePrefab(Object assetComponentOrGameObject, Scene destinationScene)
```

### Parameters

**** (\[Object]\(/engine/6000.6/script-reference/unityengine/object)): Prefab Asset to instantiate.**** (\[Scene]\(/engine/6000.6/script-reference/unityengine/scenemanagement/scene)): Scene to instantiate the Prefab in.

### Returns

| Type                                                            | Description                               |
| --------------------------------------------------------------- | ----------------------------------------- |
| [Object](/engine/6000.6/script-reference/unityengine/object.md) | The GameObject at the root of the Prefab. |

### Remarks

This is similar to Instantiate but creates a Prefab connection to the Prefab. If you do not specify a Scene handle, the Prefab is instantiated in the active Scene.

**Note:** You should not instantiate Prefabs from the [OnValidate()](/engine/6000.6/script-reference/unityengine/monobehaviour/onvalidate.md) or [Awake()](/engine/6000.6/script-reference/unityengine/monobehaviour/awake.md) method. This is because the order in which GameObjects become awake is not deterministic, and therefore can result in unexpected behaviour. If you try this, Unity will generate a warning reading "SendMessage cannot be called during Awake, CheckConsistency, or OnValidate".

### Examples

```csharp
using UnityEngine;
using UnityEditor;

public class Example
{
    [MenuItem("Examples/Instantiate Selected")]
    static void InstantiatePrefab()
    {
        Selection.activeObject = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject);
    }

    [MenuItem("Examples/Instantiate Selected", true)]
    static bool ValidateInstantiatePrefab()
    {
        GameObject go = Selection.activeObject as GameObject;
        if (go == null)
            return false;

        return PrefabUtility.IsPartOfPrefabAsset(go);
    }
}
```

## InstantiatePrefab(Object, Transform)

Instantiates the given Prefab in a given Scene.

```csharp
public static Object InstantiatePrefab(Object assetComponentOrGameObject, Transform parent)
```

### Parameters

**** (\[Object]\(/engine/6000.6/script-reference/unityengine/object)): Prefab Asset to instantiate.**** (\[Transform]\(/engine/6000.6/script-reference/unityengine/transform)):&#x20;

### Returns

| Type                                                            | Description                               |
| --------------------------------------------------------------- | ----------------------------------------- |
| [Object](/engine/6000.6/script-reference/unityengine/object.md) | The GameObject at the root of the Prefab. |

### Remarks

This is similar to Instantiate but creates a Prefab connection to the Prefab. If you do not specify a Scene handle, the Prefab is instantiated in the active Scene.

**Note:** You should not instantiate Prefabs from the [OnValidate()](/engine/6000.6/script-reference/unityengine/monobehaviour/onvalidate.md) or [Awake()](/engine/6000.6/script-reference/unityengine/monobehaviour/awake.md) method. This is because the order in which GameObjects become awake is not deterministic, and therefore can result in unexpected behaviour. If you try this, Unity will generate a warning reading "SendMessage cannot be called during Awake, CheckConsistency, or OnValidate".

### Examples

```csharp
using UnityEngine;
using UnityEditor;

public class Example
{
    [MenuItem("Examples/Instantiate Selected")]
    static void InstantiatePrefab()
    {
        Selection.activeObject = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject);
    }

    [MenuItem("Examples/Instantiate Selected", true)]
    static bool ValidateInstantiatePrefab()
    {
        GameObject go = Selection.activeObject as GameObject;
        if (go == null)
            return false;

        return PrefabUtility.IsPartOfPrefabAsset(go);
    }
}
```
