我已经导入了一些.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;
}
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);
}