理解预制体和实例化

17 Mar 2025 | 阅读 2 分钟

在任何游戏中,实例化和销毁角色或对象都是非常常见的操作。实例化意味着将对象引入存在。在游戏中,对象出现或生成,敌人死亡,GUI 元素消失,并且场景一直被加载。

当您想要在运行时实例化复杂的 GameObject 或 GameObject 集合时,预制体非常有用。与使用代码从头开始创建 GameObject 相比,使用代码实例化预制体更好,并且它具有许多优点。

让我们了解什么是预制体;因为预制体被认为是理解 Unity 中实例化工作原理的重要组成部分。

预制体就像 GameObject 的蓝图。所以我们可以说,预制体是 GameObject 的副本,可以被复制并放入场景中,即使在制作场景时它不存在;换句话说,预制体可以用于动态生成 GameObject。

让我们创建一个预制体;为此,您需要将所需的 GameObject 从场景层级拖到项目资源中。

Understanding Prefabs and instantiation

现在,要实例化 GameObject,我们在脚本中调用 Instantiate() 方法。此方法在 MonoBehaviour 中可用,并接收一个 GameObject 作为参数,因此它知道要创建或复制哪个 GameObject。它还具有不同的重载,用于更改新实例化对象的变换以及父级。

现在创建一个名为 Instantiator.cs 的新脚本,并将以下代码复制到其中。

在上面的程序中,我们使用了 Input 类的 GetKeyDown 方法来检查玩家是否在最后一帧按下了特定的按钮。如果 KeyCode 枚举(用于列出标准键盘上所有可能的键)指定的键在该帧中被按下,则 GetKeyDown() 方法返回 true。

保存脚本。现在,通过在层级选项卡中右键单击场景来创建一个空 GameObject。

Understanding Prefabs and instantiation

从检查器选项卡将该脚本文件 (Instantiator.cs) 附加到新创建的 GameObject 的组件。

现在,在 Diamond 变量中拖动我们创建的预制体。

Understanding Prefabs and instantiation

现在运行游戏时,按空格键将创建一个新的 Diamond 对象,该对象与我们用于创建预制体的对象相同。您可以看到每个钻石都创建在对象层级中。您无法在游戏中看到它们的原因是,目前,它们都在彼此之上创建。但是您可以从“层级”选项卡验证它。每次按空格键时,它都会在选项卡中显示为 Diamond (clone)。

Understanding Prefabs and instantiation
下一主题GameObject 销毁