Созданный объект является локальным, поэтому я не могу его удалить - PullRequest
0 голосов
/ 05 августа 2020

У меня есть экземпляр объекта в операторе if, но я хочу уничтожить его в другом операторе if.

Это невозможно из-за того, что объект является локальным, поэтому я могу не ссылайтесь на него вне оператора if. Как я могу это исправить?

Кроме того, я хочу уничтожить каждый объект, который был создан в for l oop. Эти экземпляры объектов используются только для целей инвентаризации, хотя это не очень актуально для вопроса.

Я просто хочу удалить все объекты, когда перестану нажимать кнопку r.

void Update()
{
    if (Input.GetKeyDown("r"))
    {
        slotPos = new Vector3(camPos.position.x - 4.5f, camPos.position.y + (13 / 2), -6);
        row = 0;
        rowColumn = 0; //dont worry about this

        for (; row > 10;)
        {
            GameObject invenPlace = Instantiate(slot); //local object
            invenPlace.transform.position = new Vector3(slotPos.x + row, slotPos.y, -6);

            row = row + 1;
            rowColumn = rowColumn + 1;
        }
    }

    if (Input.GetKey("r") == false)
    {
        DestroyObject(invenPlace); //trying to destroy local object
    }
}

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

Вам нужно будет указать sh их в списке, например, в переменных экземпляра компонента.

Другая возможность - создать их как дочерние элементы одного пустого родительского GameObject, который вы затем можете уничтожить.

private List<GameObject> invenPlaces = new List<GameObject>();

void Update()
{

    if (Input.GetKeyDown("r"))
    {
        for (; row > 10;)
        {
            GameObject invenPlace = Instantiate(slot); //local object
            // ...
            invenPlaces.Add(invenPlace);
        }
    }

    if (Input.GetKey("r") == false)
    {
        foreach (var invenPlace in invenPlaces) {
            DestroyObject(invenPlace);
        }
        invenPlaces.Clear();
    }
}
0 голосов
/ 05 августа 2020

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

void Update()
    {
    GameObject invenPlace = null;

        if (Input.GetKeyDown("r"))
        {

            slotPos = new Vector3(camPos.position.x - 4.5f, camPos.position.y + (13 / 2), -6);

            row = 0; 
            rowColumn = 0; //dont worry about this
            

            for (;row > 10 ;)
            {

                invenPlace = Instantiate(slot); //local object
                invenPlace.transform.position = new Vector3(slotPos.x + row, slotPos.y, -6); 

                row = row + 1;
                rowColumn = rowColumn + 1;

                

            }

        }

        if (Input.GetKey("r") == false)
        {
            DestroyObject(invenPlace); //trying to destroy local object
        }


    }
...