如果只有一个孩子,则不会移除儿童的组件

问题描述 投票:-1回答:1

我已经导入了一些.obj,它们都有不同数量的孩子,有些有一些有更多。在我的游戏中,我可以使用鼠标选择其中一个.obj,并在我选择的那个周围添加一个轮廓。

我的取消选择功能似乎无法正常工作。当试图从其中一个对象中删除轮廓的脚本时,如果对象只有一个子对象,则不会这样做。 2个孩子似乎每次都很好,但是1个孩子没有。它肯定会进入子删除循环,我最近调试了它,但它只输入一次,而不是有2个孩子进入循环三次的对象。

知道这里有什么问题吗?

        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;
        }
c# unity3d children
1个回答
0
投票

GetComponentsInChildren包括Transform本身的selected以及嵌套儿童!

返回GameObject或其任何子项中Type类型的所有组件。

搜索组件是在子对象上递归执行的,因此它包括子项的子项,依此类推。

另请注意,它有一个可选参数bool是否包含当前不活动或禁用的组件。


但是你为什么得到Transform而不是GetComponent<cakeslice.Outline>()>?要破坏所有的cakeslice.Outline>()实例

var outlines = selected.GetComponentsInChildren<cakeslice.Outline>(true);
foreach(var line in outline)
{
    Destroy(line);
}
© www.soinside.com 2019 - 2024. All rights reserved.