private static void SharkUI(CalcSize calcSize, ApplyValue applyValue, RectTransform.Axis axis) { var list = Utils.GetRectTransforms(); if (list.Count < 2) { return; } float size = 10000000f; Vector3[] corners = new Vector3[4]; for (var i = 0; i < list.Count; i++) { list[i].GetWorldCorners(corners); float _minV, _maxV; size = Mathf.Min(size, calcSize(corners, out _minV, out _maxV)); } foreach (var rt in list) { var v = applyValue(rt, size); Undo.RecordObject(rt, "Expand or Shark UI"); rt.SetSizeWithCurrentAnchors(axis, v.x); } }
private static void DistributionGapUI(CalcSize calcSize, ApplyValue applyValue) { var list = Utils.GetRectTransforms(); if (list.Count < 3) { return; } var vlist = new List <Value>(list.Count); float minV = 0f, maxV = 0f; float sumSize = 0f; Vector3[] corners = new Vector3[4]; for (var i = 0; i < list.Count; i++) { list[i].GetWorldCorners(corners); float _minV, _maxV; float size = calcSize(corners, out _minV, out _maxV); minV = 0 == i ? _minV : Mathf.Min(_minV, minV); maxV = 0 == i ? _maxV : Mathf.Max(_maxV, maxV); sumSize += size; vlist.Add(new Value { rt = list[i], v = (_minV + _maxV) / 2, size = size, }); } ; vlist.Sort((a, b) => { if (a.v < b.v) { return(-1); } else if (a.v > b.v) { return(1); } return(0); }); float gap = (maxV - minV - sumSize) / (list.Count - 1); float curV = minV + vlist[0].size + gap; for (var i = 1; i < vlist.Count - 1; i++) { var rt = vlist[i].rt; var pos = applyValue(rt, curV + vlist[i].size / 2); curV += vlist[i].size + gap; Undo.RecordObject(rt, "Distribution UI By Gap"); rt.anchoredPosition3D = pos; } }