# 实例化预制件简介

> Introductory context and common scenarios in which instantiating prefabs is useful.

要在运行时实例化预制件，代码需要对该预制件的引用。为此，可以在代码中创建一个 `GameObject` 类型的公共字段，然后在检视面板中将要使用的预制件分配给该字段。

下面的脚本示例包含一个公共变量 `myPrefab`，它是一个预制件的引用。该脚本在 `Start` 方法中实例化该预制件。

```
using UnityEngine;
public class InstantiationExample : MonoBehaviour 
{
    // Reference to the Prefab. Drag a Prefab into this field in the Inspector.
    public GameObject myPrefab;

    // This script will simply instantiate the Prefab when the game starts.
    void Start()
    {
        // Instantiate at position (0, 0, 0) and zero rotation.
        Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);
    }
}
```

要使用此示例，请执行以下操作：

1. 在项目中创建一个新的 MonoBehaviour 脚本，并命名为 `InstantiationExample`。
2. 将上述代码复制并粘贴到新脚本中，然后保存。
3. 使用菜单：**游戏对象 (GameObject)** > **创建空游戏对象 (Create Empty)** 创建一个空游戏对象。
4. 通过将脚本拖动到空游戏对象上，将脚本作为一个组件添加到新的游戏对象。
5. [创建任意预制件](/engine/6000.0/manual/working-in-unity/working-with-gameobjects/prefabs/creating.md)，并将其从**项目 (Project) 窗口**拖拽到脚本组件的 **My Prefab** 字段中。


**将预制件从项目窗口拖到脚本组件中的 My Prefab 字段中:**
![](/api/media?file=/engine/6000.0/media/images/PrefabDragIntoField.png)

进入运行模式后，您应该会在场景的 (0, 0, 0) 位置看到预制件被实例化。

您可以通过将不同的预制件拖拽到**检视面板**窗口的 **My Prefab** 字段中，更改实例化的预制件，而无需修改脚本。

虽然这个第一个示例非常简单，似乎与您手动将预制件放置到场景中并无优势。但是，通过代码实例化预制件可以实现强大的功能：在游戏或应用程序运行时动态创建复杂的游戏对象配置，如本节中的其他示例所示。

## 常见情况

在运行时实例化预制件在以下常见场景中非常有用：

* 通过在不同位置（例如网格或圆形排列）多次复制单个预制件来构建结构。

* 从发射器发射飞弹预制件。飞弹预制件可能是一个复杂的配置，包含**网格**、**刚体**、**碰撞体**、**音频源**、**动态光源**以及一个带有轨迹**粒子系统**的子游戏对象。

* 车辆、建筑物或角色（例如机器人）分解成多个部分。在这种场景中，示例脚本会删除完整的机器人预制件，并替换为一个残骸预制件。残骸预制件由机器人的各个破碎部分组成，每个部分都配备了刚体和粒子系统。通过这种方式，只需一行代码即可将机器人炸成碎片，同时将原始游戏对象替换为残骸预制件。

以下各节说明如何实现这些情况。

## 其他资源

* [使用预制件构建结构](/engine/6000.0/manual/scripting/object-oriented-development/instantiating-prefabs/structure.md)
* [实例化飞弹和爆炸](/engine/6000.0/manual/scripting/object-oriented-development/instantiating-prefabs/projectiles.md)
* [模拟角色破坏](/engine/6000.0/manual/scripting/object-oriented-development/instantiating-prefabs/wrecks.md)
