了解预制件和实例化

在游戏过程中,实例化和销毁对象非常重要。实例化简单地意味着使之存在。游戏中会出现或"生成"物品,敌人会死亡,GUI 元素会消失,游戏中的场景会一直加载。了解如何正确清除不需要的对象以及如何引入需要的对象就变得更加重要。

让我们首先了解什么是预制件。预制件对于理解 Unity 中的实例化工作原理非常重要。

预制件就像游戏对象的蓝图。预制件在某种程度上是游戏对象的副本,可以复制并放入场景中,即使在制作场景时它并不存在;换句话说,预制件可用于动态生成游戏对象

要创建预制件,您只需将所需的游戏对象从场景层次结构拖到项目资产中即可。

预制件创建

现在,要实例化游戏对象,我们在脚本中调用Instantiate()方法。此方法在MonoBehaviour中定义,以游戏对象作为参数,因此它知道要创建/复制哪个游戏对象。它还具有各种覆盖,用于更改新实例化的对象的变换以及父级。

让我们尝试在按下 Space 键时实例化一个新的 六边形

创建一个名为 Instantiator 的新脚本并将其打开。在 Update 方法中,输入下面给出的代码。

在这里,我们使用 Input 类的 GetKeyDown 方法来检查玩家是否在上一帧中按下了特定按钮。由于我们希望它继续检查,因此我们将其放在 Update 中,它每秒运行 60 次。如果在该帧中按下了 KeyCode 枚举(列出标准键盘上所有可能的键)指定的键,则 GetKeyDown 方法返回 true

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
   // Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

顶部的公共 GameObject 声明会创建一个类似于我们在之前的课程中为 Rigidbody2D 创建的插槽。但是,此插槽仅接受 prefabs(在编辑器时间)和 gameObjects(在运行时)。

保存脚本并进行编译。完成后,转到对象层次结构右键单击菜单并选择 Create Empty,创建一个新的 empty GameObject。

Create Empty

将此对象命名为可识别的名称,例如 Instatiator Object,并将我们新创建的脚本附加到它。在 GameObject 显示的插槽中,拖入我们创建的预制件。

Instatiator Object

如果我们现在运行游戏,按空格键将创建一个新的六边形对象,该对象与我们用于创建预制件的对象相同。您可以在对象层次结构中看到正在创建的每个六边形。您无法看到它们出现在游戏中的原因是,目前,它们都是完全一个接一个地创建的。

六边形对象

在下一课中,我们将了解对象破坏的概念。