有没有办法检查一个对象的所有孩子是不是都处于活动状态?

Posted

技术标签:

【中文标题】有没有办法检查一个对象的所有孩子是不是都处于活动状态?【英文标题】:Is there a way to check if all children of an object are active?有没有办法检查一个对象的所有孩子是否都处于活动状态? 【发布时间】:2019-12-03 20:42:47 【问题描述】:

我是一名初学者 C# 编码器,我正在尝试在 Unity 中制作游戏。因此问题是:我可以检查对象的所有子对象是否在场景中处于活动状态?我想用它来检查是否所有敌人都处于活动状态。

【问题讨论】:

【参考方案1】:

您可以使用以下方式检查:

for (int i = 0; i< gameObject.transform.childCount; i++)

    if(!gameoObject.transform.GetChild(i).gameObject.activeInHierarchy)
    
        return false;
    

return true;

activeInHierarchy 正是您所需要的。

【讨论】:

【参考方案2】:

扩展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);

【讨论】:

以上是关于有没有办法检查一个对象的所有孩子是不是都处于活动状态?的主要内容,如果未能解决你的问题,请参考以下文章