private void ScaleGameObject(GameObject myGameObject) { Transform[] children = DetachReattach.DetachChildren(myGameObject); // scale to fit Bounds bounds = myGameObject.GetComponent <MeshFilter>().mesh.bounds; float x = bounds.size.x; float y = bounds.size.y; float z = bounds.size.z; float max = x; if (y > max) { max = y; } if (z > max) { max = z; } float newScale = Ratio.SolveForD(max, 1f, height); myGameObject.transform.localScale = new Vector3(newScale, newScale, newScale); DetachReattach.ReattachChildren(children, myGameObject); }
protected virtual void OnTransformChildrenChanged() { #if UNITY_EDITOR if (EditorApplication.isPlaying) { return; } #endif if (!DetachReattach.DetachInProgress(gameObject)) { dirty = true; } }
public void Resize() { #if UNITY_EDITOR Undo.SetCurrentGroupName("PanelContainer Resize"); int group = Undo.GetCurrentGroup(); #endif CalculateBounds(); float maxWidth = bounds.size.x; float maxHeight = bounds.size.y; #if UNITY_EDITOR for (int i = 0; i < gameObject.transform.childCount; i++) { Undo.RecordObject(gameObject.transform.GetChild(i), "Resize Child"); } #endif Transform[] children = DetachReattach.DetachChildren(gameObject); #if UNITY_EDITOR Undo.RecordObject(transform, "Resize Panel"); #endif PanelUtils.PanelResizeWidth panelResizeWidth = PanelUtils.ResizeWidth(gameObject, maxWidth, 0); PanelUtils.PanelResizeHeight panelResizeHeight = PanelUtils.ResizeHeight(gameObject, maxHeight, 0); if (panelResizeWidth.xScale > 0 && panelResizeHeight.yScale > 0) { transform.localScale = new Vector3(panelResizeWidth.xScale, panelResizeHeight.yScale, transform.localScale.z); } DetachReattach.ReattachChildren(children, gameObject); transform.position = transform.position + transform.right * panelResizeWidth.xOffset + transform.up * panelResizeHeight.yOffset; #if UNITY_EDITOR Undo.CollapseUndoOperations(group); #endif dirty = false; }