why is in GetComponentsInChildren parent included?

and how to get all children efficiently detached and back attached?

Transform[] Children = transform.GetComponentsInChildren<Transform>();

foreach(Transform Child in Children){
	Destroy(Child.gameObject); // it destroys the parent too
}

transform.DetachChildren();

// ...

for (int i=0; i<Children.Length; i++) {
	Children*.parent = transform;*
  • }*
    don’t ask why as I ain’t going to post you 500 lines long code
    and explaining why with 3 pages long.
    just simple question.
    and I did destroy method to see what’s happening and, ELSE I disable them and reuse them, …

Why the parent is included? You ask this question to the wrong group of people :wink: Feel free to write this to the support :smiley:

Anyways it’s well known that it includes itself (even as first element). Your question is a bit confusing since DetachChildren and GetComponentsInChildren work on very different collections (i don’t talk about the included parent). GetComponentsInChildren finds all children components even deep nested. DetachChildren on the other hand just affects the immeditate children. So you might want to work on the immediate children only:

using System.Collections.Generic;
using System.Linq;

List<Transform> children = transform.Cast<Transform>().ToList();

ps: Also keep in mind that GetComponentsInChildren usually don’t “find” components which are disabled or on deactivated GameObjects. Recently they added an optional bool-parameter to make it find deactivated stuff as well.