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
相关产品推荐
相关产品推荐

