代码之家  ›  专栏  ›  技术社区  ›  Daniel Lip

如何在没有父母的情况下获得所有孩子?

  •  3
  • Daniel Lip  · 技术社区  · 2 年前
    Transform[] drawns = GetComponentsInChildren<Transform>()
    

    这也包括父级,但我只想获取脚本连接的变换的子级。

    问题是它在循环中破坏了父循环。 绘图数组中的第一项是父项:

    case DrawStates.DrawOnGizmosRuntime:
    drawOnce = true;
    if (line != null && drawOnGizmos == false)
    {
        Transform[] drawns = GetComponentsInChildren<Transform>();
        if (drawns.Length > 0)
        {
            foreach (Transform drawn in drawns)
            {
                Destroy(drawn.gameObject);
            }
        }
    }
    if (boxCollider == null)
    {
        boxCollider = boxColliderToDrawOn.GetComponent<BoxCollider>();
    }
    drawOnGizmos = true;
    break;
    
    2 回复  |  直到 2 年前
        1
  •  2
  •   KiynL    2 年前

    实际上有几种方法可以找到没有父母的孩子。

    foreach (var child in children) Debug.Log(child);
    

    使用Where扩展:

    使用后 system.linq ,可以分离不是原始变换的子级,如下所示。

    var children = transform.GetComponentsInChildren<Transform>().Where(t => t != transform);
    

    正在删除索引0:

    由于索引0始终是主转换,所以可以在将子级转换为列表后将其删除。

    var children = transform.GetComponentsInChildren<Transform>().ToList();
    
    children.RemoveAt(0);
    

    使用Skip(1)

    感谢亲爱的@Enigmativity,另一个解决方案是使用 Skip(1) ,这实际上避免了主变换成员。

    var children = transform.GetComponentsInChildren<Transform>().Skip(1);