📜  了解预制件和实例化

📅  最后修改于: 2020-10-29 04:20:01             🧑  作者: Mango


在游戏过程中,实例化和销毁对象非常重要。实例化只是意味着要存在。物品在游戏中出现或“生成”,敌人死亡,GUI元素消失,场景始终在游戏中加载。知道如何正确清除不需要的对象以及如何引入这些对象就变得更加重要。

首先让我们了解什么是预制件。预制件被认为对理解实例化如何在Unity中起作用很重要。

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

要创建一个预制件,只需要将所需的GameObject从场景层次结构中拖到项目Assets中

预制件的制作

现在,要实例化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所做的插槽。但是,此插槽仅接受预制件(在编辑器中)和gameObjects (在运行时)。

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

创建空

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

煽动者对象

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

六角形物体

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