Unity - 了解预制件和实例化

  • 简述

    在游戏过程中,实例化和销毁对象被认为是非常重要的。实例化仅仅意味着实现。物品在游戏中出现或“生成”,敌人死亡,GUI 元素消失,场景一直在游戏中加载。知道如何正确地摆脱不需要的对象以及如何引入那些你做的东西变得更加重要。
    我们先来了解一下prefabs是。预制件对于理解实例化在 Unity 中的工作方式非常重要。
    Prefabsblueprints一个游戏对象。预制件在某种程度上是一种copy可以复制并放入场景中的游戏对象,即使在制作场景时它不存在;换句话说,预制件可用于dynamically generate GameObjects.
    要创建预制件,您只需将所需的游戏对象从场景层次结构中拖到项目中即可Assets.
    预制件创作
    现在,为了实例化一个 GameObject,我们调用Instantiate()我们脚本中的方法。这种方法,定义在MonoBehaviour,接受一个游戏对象作为参数,因此它知道要创建/复制哪个游戏对象。它还具有用于更改新实例化对象的变换以及父级的各种覆盖。
    让我们尝试实例化一个新的hexagon每当Space键被按下。
    创建一个名为的新脚本Instantiator并打开它。在里面Update方法,输入下面给出的代码。
    在这里,我们使用GetKeyDown的方法Input类来检查玩家是否在最后一帧按下了特定的按钮。既然我们想让它继续检查,我们把它放进去Update,每秒运行 60 次。GetKeyDown 方法返回true如果由指定的键KeyCode在该帧中按下枚举(列出标准键盘上所有可能的键)。
    
    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(在运行时),但是。
    保存脚本,然后编译。完成后,新建一个,emptyGameObject 通过转到您的对象层次结构右键菜单,然后选择Create Empty.
    创建空
    将此对象命名为可识别的名称,例如Instatiator Object并将我们新创建的脚本附加到它上面。在为游戏对象显示的插槽中,拖入我们创建的预制件。
    Instatiator 对象
    如果我们现在运行游戏,按下空格键将创建一个新的 Hexagon 对象,该对象与我们用于创建预制件的对象相同。您可以看到在对象层次结构中创建的每个六边形。你看不到它们出现在游戏中的原因是因为目前它们都是被创造出来的exactly一个比一个。
    六边形对象
    在下一课中,我们将了解对象销毁的概念。