有没有一种方法可以检查对象的所有子对象是否都处于活动状态?

时间:2019-07-25 14:18:55

标签: c# unity3d gameobject

我是一名C#初学者,我正在尝试在Unity中进行游戏。因此出现了一个问题:我可以检查对象的所有子级是否在场景中处于活动状态?我想用它来检查所有敌人是否活跃。

2 个答案:

答案 0 :(得分:2)

您可以使用以下方法进行检查:

for (int i = 0; i< gameObject.transform.childCount; i++)
{
    if(!gameoObject.transform.GetChild(i).gameObject.activeInHierarchy)
    {
        return false;
    }
}
return true;

activeInHierarchy正是您所需要的。

答案 1 :(得分:1)

扩展Johnny's answer

由于Transform对所有子项都实现了IEnumerable迭代,因此您可以使用foreach来简化循环

foreach(var child in transform) 
{ 
    if(child.gameObject.activeInHierachy) continue;

    return false;
}
return true;

或使用Linq CastLinq All

using System.Linq;


bool allActive = transform.Cast<Transform>().All(child => child.activeInHierachy);