理解预制体和实例化



在游戏过程中,实例化和销毁对象非常重要。实例化简单来说就是创造。游戏中的物品出现或“生成”,敌人死亡,GUI 元素消失,场景不断加载。了解如何正确地移除不需要的对象以及如何引入所需的对象变得更加重要。

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

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

要创建一个预制体,你只需将所需的 GameObject 从场景层次结构拖放到项目资源中。

Prefabs Creation

现在,要实例化一个 GameObject,我们在脚本中调用Instantiate() 方法。此方法在MonoBehaviour中定义,它接受一个 GameObject 作为参数,以便知道要创建/复制哪个 GameObject。它还具有各种重载方法,用于更改新实例化对象的变换以及父子关系。

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

创建一个名为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 创建的槽。但是,此槽仅接受预制体(在编辑器时间)和游戏对象(在运行时)。

保存脚本并让它编译。完成后,通过转到对象层次结构右键菜单并选择创建空对象来创建一个新的 GameObject。

Create Empty

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

Instatiator Object

如果我们现在运行游戏,按下空格键将创建一个与我们用来创建预制体的六边形对象相同的新六边形对象。你可以在对象层次结构中看到每个创建的六边形。你暂时看不到它们出现在游戏中,是因为它们都是完全重叠创建的。

Hexagon object

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

广告