public void CalculateBounds() { List <Transform> children = new List <Transform>(); List <Transform> newChildren = new List <Transform>(); children.Add(transform); newChildren.Add(transform); while (newChildren.Count != 0) { List <Transform> nextChildren = new List <Transform>(); foreach (Transform currentParent in newChildren) { for (int childIdx = 0; childIdx < currentParent.childCount; ++childIdx) { Transform child = currentParent.GetChild(childIdx); if (child is RectTransform == false) { nextChildren.Add(child); } } } children.AddRange(nextChildren); newChildren.Clear(); newChildren.AddRange(nextChildren); } levelBounds = XUtils.GetBounds(children); levelBounds.center -= transform.position; }