如何销毁实例化的游戏对象克隆?

时间:2019-03-27 05:24:00

标签: c# unity3d instantiation destroy gameobject

我正在尝试检查对象是否出现在数字上方。如果确实如此,我想销毁它并重新创建它。如果没有,我想创建它。我尝试了以下代码。它会创建对象,但不会破坏它。

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)不会破坏游戏对象。

2 个答案:

答案 0 :(得分:2)

如果代码全部是OnClick回调的一部分,那么这就是为什么您不破坏任何对象的原因:

罪魁祸首是您在方法内部对GameObject newGameObject = null的定义。 newGameObject的值在方法内部始终为null,因此语句if (newGameObject != null && newGameObject.scene.IsValid())将始终返回false,因为newGameObject始终为null,这就是为什么您看到所有这些GameObject被实例化的原因。 if(x > 3.14)失败的情况不会破坏任何东西,因为您要破坏newGameObject,这是空的。

要破坏该对象,您需要一个类字段来存储对最后生成的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);
        }
    }
}

答案 1 :(得分:1)

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);
        }

尝试一下。每次销毁后创建新对象时,都会创建一个新对象。