Детский компонент не удаляется, если есть только один ребенок - PullRequest
0 голосов
/ 20 марта 2019

Я импортировал несколько .obj, у каждого из них разное количество детей, у некоторых из них 1, а у некоторых больше.В моей игре я могу использовать мышь, чтобы выбрать один из этих .obj, и он обводит контур вокруг того, который я выбрал.

Моя функция отмены выбора работает неправильно.При попытке удалить сценарий для контура из одного из этих объектов он не будет делать это, если у объекта есть только один дочерний элемент.Кажется, 2 ребенка работают хорошо каждый раз, а 1 ребенок - нет.Это точно вход в дочерний цикл удаления, который я недавно отлаживал, но он входит в него только один раз, в отличие от объектов с двумя дочерними элементами, трижды входящих в цикл.

Есть идеи, в чем здесь проблема?

        if(selected != null){
            Transform[] ts = selected.GetComponentsInChildren<Transform>();
            foreach (Transform child in ts){
                Destroy(child.gameObject.GetComponent<cakeslice.Outline>());
            }
            Destroy(selected.GetComponent<cakeslice.Outline>());
            selected = null;
        }

1 Ответ

0 голосов
/ 20 марта 2019

GetComponentsInChildren включает Transform самого selected, а также вложенных дочерних элементов!

Возвращает все компоненты типа Type в GameObject или любой из егоchildren.

Поиск компонентов выполняется рекурсивно на дочерних объектах, поэтому он включает дочерние объекты дочерних объектов и т. д.

также обратите внимание, что в нем есть необязательный параметр bool следует ли включать в настоящее время неактивные или отключенные компоненты.


Однако почему вы получаете Transform, а не GetComponent<cakeslice.Outline>()>?Чтобы уничтожить все cakeslice.Outline>() экземпляров, просто сделайте

var outlines = selected.GetComponentsInChildren<cakeslice.Outline>(true);
foreach(var line in outline)
{
    Destroy(line);
}
...