You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何判断父游戏对象的活跃子物体数量≤5?

统计父对象的活跃子物体数量

原来的transform.childCount会返回所有子物体的总数,不管其是否处于激活状态。要统计活跃状态的子物体数量,需要遍历每个子物体并判断其活跃性,Unity提供了两种判断活跃状态的属性,你可以根据需求选择:

核心判断逻辑说明

  • gameObject.activeSelf:仅判断子物体自身的激活开关状态,不考虑父物体是否激活
  • gameObject.activeInHierarchy:判断子物体在场景层级中是否真正处于激活状态(如果父物体未激活,即使子物体自身开关打开,这个属性也会返回false)

修改后的代码示例

方式一:遍历计数(基础写法)

void Start () {
    int activeChildCount = 0;
    // 遍历所有子物体
    foreach (Transform child in transform)
    {
        // 这里根据需求选择判断逻辑,二选一即可
        // 情况1:仅判断子物体自身激活状态
        if (child.gameObject.activeSelf)
        {
            activeChildCount++;
        }
        // 情况2:判断子物体在层级中是否真正激活
        // if (child.gameObject.activeInHierarchy)
        // {
        //     activeChildCount++;
        // }
    }

    // 判断活跃子物体数量是否≤5
    if (activeChildCount <= 5)
    {
        // 在这里添加你的业务逻辑
    }
}

方式二:用Linq简化代码(需要引入命名空间)

如果想让代码更简洁,可以用Linq的Count方法,注意要在脚本顶部引入System.Linq命名空间:

using System.Linq; // 必须添加这一行

void Start () {
    // 统计活跃子物体数量,同样二选一判断逻辑
    int activeChildCount = transform.Cast<Transform>()
        .Count(child => child.gameObject.activeSelf);
    // int activeChildCount = transform.Cast<Transform>()
    //     .Count(child => child.gameObject.activeInHierarchy);

    if (activeChildCount <= 5)
    {
        // 你的业务逻辑
    }
}

内容的提问来源于stack exchange,提问作者Vika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:10:25