我正在尝试检查对象是否出现在数字上方。如果确实如此,我想销毁它并重新创建它。如果没有,我想创建它。我尝试了以下代码。它创建对象但不销毁它。
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一个标签,以便我可以销毁带标签的项目,并且它不对任何克隆进行标签。
我试图找到游戏对象的名称+“(clone)”并销毁它们,但它没有让我。
我尝试添加1f计时器,destroy(newGameObject,1f)不会破坏游戏对象。
最佳答案
如果代码全部是OnClick回调的一部分,那么这就是为什么您不破坏任何对象的原因:
罪魁祸首是您在方法内部对GameObject newGameObject = null
的定义。 newGameObject
的值在方法内部始终为null,因此语句if (newGameObject != null && newGameObject.scene.IsValid())
始终返回false,因为newGameObject始终为null,这就是为什么您看到所有这些GameObject都被实例化的原因。 if(x > 3.14)
失败的情况不会破坏任何内容,因为您要破坏newGameObject
,该结果为null。
为了能够销毁对象,您将需要一个类字段来存储对最后生成的GameObject的引用。
您的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);
}
}
}