如何销毁实例化的游戏对象克隆?
How do I destroy an instantiated game object clone?
我正在尝试检查某个对象是否出现在数字上方。如果确实如此,我想销毁它并重新创建它。如果没有,我想创建它。我尝试了以下代码。它创建对象但不销毁它。
GameObject newGameObject = null;
if (x > 3.14)
{
if (newGameObject != null && newGameObject.scene.IsValid())
{
Destroy(newGameObject);
newGameObject = GameObject.Instantiate(object1);
}
else
{
newGameObject = GameObject.Instantiate(object1);
}
}
else
{
Destroy(newGameObject);
}
当 运行 多次时,对象不会销毁而是堆叠,我可以在层次结构中看到它们没有被销毁。
我试过给 newGameObject 一个标签,这样我就可以销毁被标记的项目,但它没有标记任何克隆。
我尝试找到游戏对象的名称+“(克隆)”并销毁它们,但它没有让我。
我试过添加 1f 计时器,destroy(newGameObject,1f) 不会破坏游戏对象。
GameObject newGameObject = null;
if (x > 3.14)
{
if (newGameObject != null && newGameObject.scene.IsValid())
{
Destroy(newGameObject);
newGameObject = GameObject.Instantiate(object1);
}
else
{
newGameObject = GameObject.Instantiate(object1);
}
}
else
{
Destroy(newGameObject);
}
试试这个。每次销毁后创建一个新对象都会创建一个新对象。
如果代码都是 OnClick 回调的一部分,那么这就是您不销毁任何对象的原因:
罪魁祸首是您在方法内部定义了 GameObject newGameObject = null
。 newGameObject
的值在方法内部将始终为 null,因此语句 if (newGameObject != null && newGameObject.scene.IsValid())
将始终 return false,因为 newGameObject 始终为 null,这就是为什么您会看到所有这些 GameObjects 被实例化的原因。 if(x > 3.14)
失败的情况不会破坏任何东西,因为您试图破坏 newGameObject
,它是空的。
为了能够销毁对象,您需要一个 class 字段来存储对最后生成的游戏对象的引用。
您的 MonoBehaviour 将如下所示:
public class MyBehaviour : MonoBehaviour
{
private GameObject newGameObject;
/* other useful code */
public void OnClick(){
if (x > 3.14)
{
if (newGameObject != null && newGameObject.scene.IsValid())
{
Destroy(newGameObject);
newGameObject = GameObject.Instantiate(object1);
}
else
{
newGameObject = GameObject.Instantiate(object1);
}
}
else
{
Destroy(newGameObject);
}
}
}
我正在尝试检查某个对象是否出现在数字上方。如果确实如此,我想销毁它并重新创建它。如果没有,我想创建它。我尝试了以下代码。它创建对象但不销毁它。
GameObject newGameObject = null;
if (x > 3.14)
{
if (newGameObject != null && newGameObject.scene.IsValid())
{
Destroy(newGameObject);
newGameObject = GameObject.Instantiate(object1);
}
else
{
newGameObject = GameObject.Instantiate(object1);
}
}
else
{
Destroy(newGameObject);
}
当 运行 多次时,对象不会销毁而是堆叠,我可以在层次结构中看到它们没有被销毁。
我试过给 newGameObject 一个标签,这样我就可以销毁被标记的项目,但它没有标记任何克隆。
我尝试找到游戏对象的名称+“(克隆)”并销毁它们,但它没有让我。
我试过添加 1f 计时器,destroy(newGameObject,1f) 不会破坏游戏对象。
GameObject newGameObject = null;
if (x > 3.14)
{
if (newGameObject != null && newGameObject.scene.IsValid())
{
Destroy(newGameObject);
newGameObject = GameObject.Instantiate(object1);
}
else
{
newGameObject = GameObject.Instantiate(object1);
}
}
else
{
Destroy(newGameObject);
}
试试这个。每次销毁后创建一个新对象都会创建一个新对象。
如果代码都是 OnClick 回调的一部分,那么这就是您不销毁任何对象的原因:
罪魁祸首是您在方法内部定义了 GameObject newGameObject = null
。 newGameObject
的值在方法内部将始终为 null,因此语句 if (newGameObject != null && newGameObject.scene.IsValid())
将始终 return false,因为 newGameObject 始终为 null,这就是为什么您会看到所有这些 GameObjects 被实例化的原因。 if(x > 3.14)
失败的情况不会破坏任何东西,因为您试图破坏 newGameObject
,它是空的。
为了能够销毁对象,您需要一个 class 字段来存储对最后生成的游戏对象的引用。
您的 MonoBehaviour 将如下所示:
public class MyBehaviour : MonoBehaviour
{
private GameObject newGameObject;
/* other useful code */
public void OnClick(){
if (x > 3.14)
{
if (newGameObject != null && newGameObject.scene.IsValid())
{
Destroy(newGameObject);
newGameObject = GameObject.Instantiate(object1);
}
else
{
newGameObject = GameObject.Instantiate(object1);
}
}
else
{
Destroy(newGameObject);
}
}
}