跳到主要内容

如何实例化和破坏一个游戏对象在统一

  • 作者:
  • 更新日期:

Matt Bird喜欢编写游戏攻略和电脑教程。他是一名专业的游戏指南作者。

统一“毁灭”功能

统一“毁灭”功能

统一:销毁游戏对象

在Unity中创建和删除游戏对象总是发生在每一款游戏中,所以新手程序员需要学习的第一件事就是如何实例化和销毁游戏对象。其中一个过程与另一个过程紧密相连,所以我们将从另一个角度来探讨这个话题,首先看看销毁游戏对象。

销毁游戏对象

在Unity中销毁一个游戏对象只需要两个基本元素:

  • 一个源自MonoBehaviour的脚本,Unity的标准基类,用于程序所做的几乎所有事情;而且
  • 一行代码:'Destroy(insertGameObjectHere);'。

假设你在脚本中拥有这两个元素,你便可以销毁一个GameObject。听起来很简单,对吧?这里有一个简单的例子:

只需要一行代码就能摧毁一个对象

只需要一行代码就能摧毁一个对象

在这种情况下,你拥有一个名为“guyGameObject”的游戏对象,以及一个如果你按下F键便会触发的Destroy命令。你还有一个源自MonoBehaviour的脚本,因为Destroy不会被识别为这个重要的基础脚本之外的函数。理论上,当你点击f时,这将从你的游戏中移除GameObject和它的所有子对象。

...不过,尽管代码在技术上是正确的,但这实际上是行不通的。相反,你会在屏幕底部的控制台中看到一个小错误:“为了防止数据丢失,不允许破坏资产。”这是什么意思?为了解释这一点,我们需要看看实例。

创建游戏对象的实例

实例是预制游戏对象(prefab)的克隆,它构成了Unity中所有游戏内交互的基础。当你将游戏对象从场景视图拖到项目视图时,就会创建一个预制对象,从而将其保存在游戏的Assets中。然后可以通过检查器变量绘制预制件,为运行时目的创建副本。可以将预制构件视为对象的蓝图,而实例则是该蓝图的制造结果。你不想使用和丢弃蓝图,而只是制造出来的结果。

因此,当你(意外地)尝试摧毁一个预制构件时,Unity将显示上述错误。如果您看到错误,您就知道您正在试图销毁错误的东西。所以为了完全理解如何在Unity中销毁一个游戏对象,你还需要了解如何实例化一个对象。

创建一个新的脚本(或使用一个已经在进行中的脚本),并添加一个新的公共GameObject变量,如上所述。然后回到检查器,添加一个预制到你的脚本,如下所示:

创建实例

创建实例

现在,您在脚本中拥有了与预制蓝图的连接。使用guyGameObject变量,你可以用下面这行代码创建一个预制实例:

实例化(guyGameObject);

当这个脚本运行时,假设guyGameObject被分配给一个预制件,该游戏对象的克隆将在你的游戏中创建,出现在预制件中包含的相同坐标处。你甚至可以分配新的坐标,如果你喜欢,并改变guyGameObject的克隆将出现的位置:

实例化(guyGameObject, new Vector3(0,0,0), quaterion .identity);

这将在全局坐标0,0,0处创建一个guyGameObject的克隆。你也可以使用另一个对象的Vector3来实例化你的克隆在一个可移动的点上,通过创建另一个变量并将其分配给一个活动的游戏对象,如下所示:

float instX = instantiateObjectHere.transform.position.x;float instY = instantiateObjectHere.transform.position.y;实例化(guyGameObject, new Vector3(instX, instY, 0), quaterion .identity);

这段代码获取新游戏对象的x和y坐标,将它们插入实例化代码,并在相同的坐标上创建一个克隆对象。这种形式的实例化可以非常方便地创建敌人刷出点或从单个点发射的武器。

结合实例化和销毁

准备好摧毁你的创造物了吗?在你通过脚本做到这一点之前还有一个步骤:将实例化对象添加到另一个GameObject变量。在本例中,我们将使用一个局部变量来完成这项工作:

GameObject objectToDestroy =实例化(guyGameObject, new Vector3(instX, instY, 0), quaterion .identity);破坏(objectToDestroy);

通常情况下,你不会创建然后立即销毁游戏对象,特别是在同一个函数中,但这里的要点很清楚:将新实例声明为objectToDestroy,然后销毁该游戏对象。没有更多的实例,也没有错误引导,因为它是一个实例而不是一个预制件。

一个完整的创建和销毁实例的脚本示例如下所示:

下一个步骤

下一个步骤

按G,在instantiateObjectHere的坐标处创建了一个guyGameObject的实例。按F,新的游戏对象(现在定义为newInstance)被销毁。这就够了!

当然,这并不是你在游戏中执行Instantiate或Destroy的唯一方法。对象可以在以下情况下创建和销毁:

  • 一个游戏对象撞击另一个游戏对象的碰撞器;
  • 计时器达到一定的计数;
  • 布尔值被触发;
  • 游戏对象达到一定的速度;而且
  • 很多其他人。可能有数百个小型的、特定的场景可以触发实例的创建或销毁。

另一种方法

还有一种方法可以创建游戏对象的实例:将一个预制件从你的Assets拖到Game视图中。这通常是为了在游戏中设计预先确定的情境:例如,如果你知道你想让敌人出现在地图上的特定位置,你就会将其投放到游戏中。这将被视为一个实例,并且可以在没有错误的情况下销毁。这也是你一开始创建刷出点的方法,所以这两种实例化方法有很多混合和匹配,你会在任何Unity游戏中使用。

Baidu