要在运行时实例化预制件,代码需要对该预制件的引用。为此,可以在代码中创建一个 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);
}
}
要使用此示例,请执行以下操作:
InstantiationExample。
进入运行模式后,您应该会在场景的 (0, 0, 0) 位置看到预制件被实例化。
您可以通过将不同的预制件拖拽到检视面板窗口的 My Prefab 字段中,更改实例化的预制件,而无需修改脚本。
虽然这个第一个示例非常简单,似乎与您手动将预制件放置到场景中并无优势。但是,通过代码实例化预制件可以实现强大的功能:在游戏或应用程序运行时动态创建复杂的游戏对象配置,如本节中的其他示例所示。
在运行时实例化预制件在以下常见场景中非常有用:
通过在不同位置(例如网格或圆形排列)多次复制单个预制件来构建结构。
从发射器发射飞弹预制件。飞弹预制件可能是一个复杂的配置,包含网格、刚体、碰撞体、音频源、动态光源以及一个带有轨迹粒子系统的子游戏对象。
车辆、建筑物或角色(例如机器人)分解成多个部分。在这种场景中,示例脚本会删除完整的机器人预制件,并替换为一个残骸预制件。残骸预制件由机器人的各个破碎部分组成,每个部分都配备了刚体和粒子系统。通过这种方式,只需一行代码即可将机器人炸成碎片,同时将原始游戏对象替换为残骸预制件。
以下各节说明如何实现这些情况。