简体   繁体   中英

How do I destroy an instantiated game object clone?

I am trying to check if an object appears above a number. And if it does I want to destroy it and recreate it. And if it does not I want to create it. I have tried the following code. It creates the object but does not destroy it.

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

When running multiple times the objects never destroy but stack and I can see them in the hierarchy not being destroyed.

I have tried giving the newGameObject a tag so that I could destroy the tagged item and it did not tag any clones.

I tried find name of gameobject + "(clone)" and destroy them but it did not let me.

I have tried adding 1f timer, destroy(newGameObject,1f) does not destroy game object.

If the code is all part of an OnClick callback then here is why you are not destroying any object:

The main culprit is your definition of GameObject newGameObject = null inside the method. The value of newGameObject will always be null inside of the method so the statement if (newGameObject != null && newGameObject.scene.IsValid()) will always return false because newGameObject is always null and that is why you see all those GameObjects being instantiated. The case when if(x > 3.14) fails does not destroy anything as you are trying to destroy newGameObject , which is null.

To be able to destroy the object you will need a class field to store the reference to the last GameObject spawned.

Your MonoBehaviour will then look something like this:

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

Try this. Everytime when you create a new object after destroy will create one new object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM