📅  最后修改于: 2021-01-11 13:47:35             🧑  作者: Mango
实例化和销毁字符或对象在任何游戏中都很常见。实例化意味着使对象存在。在游戏中出现或生成或生成对象,敌人死亡,GUI元素消失以及在游戏中始终加载场景。
当您要在运行时实例化复杂的GameObject或GameObject的集合时,预制件非常有用。与使用代码从头开始创建GameObject相比,使用代码实例化预制件更好,并且具有许多优点。
让我们了解什么是预制件。因为预制对于理解实例化在Unity中的工作原理很重要。
预制件就像GameObject的蓝图。因此,可以说,预制件是GameObject的副本,可以复制并放入场景中,即使在创建场景时不存在它。换句话说,可以使用预制件动态生成GameObject。
让我们创建一个预制件;为此,您需要将所需的GameObject从场景层次结构拖到项目Assets中。
现在,要实例化GameObject,我们在脚本中调用Instantiate()方法。 MonoBehaviour中提供了此方法,该方法将GameObject作为参数,因此它知道要创建或复制哪个GameObject。它还具有用于更改新实例化对象的变换以及育儿的不同替代。
现在,创建一个名为Instantiator.cs的新脚本,并在其中复制以下代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Instantiator : MonoBehaviour
{
public GameObject Diamond;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(Diamond);
}
}
}
在上面的程序中,我们使用Input类的GetKeyDown方法来检查播放器在最后一帧期间是否按下了特定按钮。如果在该帧中按下了由KeyCode枚举指定的键(用于列出标准键盘上所有可能的键),则GetKeyDown()方法将返回true。
保存脚本。现在,通过在“层次结构”选项卡上右键单击场景,创建一个空的GameObject。
从“检查器”选项卡将该脚本文件(Instantiator.cs)附加到新创建的GameObject的组件。
现在,在我们创建的预制变量“钻石”变量中。
现在运行游戏时,按空格键将创建一个新的Diamond对象,该对象与我们用来创建预制件的对象相同。您可以看到在对象层次结构中创建了每个菱形。您看不到它们出现在游戏中的原因是,暂时而言,它们都是完全相互创建的。但是您可以从“层次结构”选项卡中进行验证。每次按空格键时,空格键都会在选项卡中显示为菱形(克隆)。