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

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

【问题讨论】:

    标签: c# unity3d gameobject


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多