Как уничтожить созданный экземпляр игрового объекта-клона? - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь проверить, появляется ли объект над числом.И если это так, я хочу уничтожить его и воссоздать.И если это не так, я хочу создать его.Я попробовал следующий код.Он создает объект, но не уничтожает его.

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 тега, чтобы я мог уничтожить помеченный элемент, а он не пометил никаких клонов.

Я попытался найти имя gameobject + "(clone)" и уничтожить их, но это не позволило мне.

Я пытался добавить 1f таймер, уничтожить (newGameObject, 1f) не уничтожает игровой объект.

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Если код является частью обратного вызова OnClick, то вот почему вы не уничтожаете какой-либо объект:

Главный виновник - ваше определение GameObject newGameObject = null внутри метода. Значение newGameObject всегда будет нулевым внутри метода, поэтому оператор if (newGameObject != null && newGameObject.scene.IsValid()) всегда будет возвращать false, потому что newGameObject всегда нулевой, и поэтому вы видите, что все эти GameObjects создаются. Случай, когда 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 голос
/ 27 марта 2019
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);
        }

Попробуйте это.Каждый раз, когда вы создаете новый объект после уничтожения, создается один новый объект.

...