private static Bounds GetUnrotatedRendererBounds(GameObject target)
        {
            Transform  oldParent   = target.transform.parent;
            Quaternion oldRotation = target.transform.rotation;

            Transform[] children = null;

            if (oldParent)
            {
                children = DetachReattach.DetachChildren(oldParent.gameObject);
            }

            target.transform.rotation = Quaternion.identity;
            if (!target.GetComponent <BoxCollider>())
            {
            }
            Bounds bounds = target.GetComponent <Renderer>().bounds;

            target.transform.rotation = oldRotation;

            if (oldParent)
            {
                DetachReattach.ReattachChildren(children, oldParent.gameObject);
            }

            return(bounds);
        }
 public static void ReattachChildrenAndRestoreRotation(GameObject target, State state)
 {
     target.transform.rotation = state.rotation;
     if (state.parent)
     {
         DetachReattach.ReattachChildren(state.children, state.parent.gameObject);
     }
 }
        public static State DetachChildrenAndZeroRotation(GameObject target)
        {
            State state = new State();

            state.target   = target;
            state.rotation = target.transform.rotation;
            state.parent   = target.transform.parent;
            state.children = null;
            if (state.parent)
            {
                state.children = DetachReattach.DetachChildren(state.parent.gameObject);
            }
            target.transform.rotation = Quaternion.identity;
            return(state);
        }