Unity3D的UGUI布局锚点自动绑定关系
[MenuItem("CONTEXT/RectTransform/Auto")] public static void AutoRectAnior() { Debug.Log("自适应锚点"); //获得当前设置UI RectTransform rect = Selection.activeGameObject.GetComponent<RectTransform>(); //获取其父级 RectTransform parent = rect.parent.GetComponent<RectTransform>(); RectTransform canvas = rect.GetComponentInParent<Canvas>().GetComponent<RectTransform>(); if (!rect || ! parent || !canvas) { Debug.Log("自适应锚点失败,缺少对象!"); return; } Bounds rectBounds = RectTransformUtility.CalculateRelativeRectTransformBounds(canvas, rect);//计算src的包围盒 Bounds parentBounds = RectTransformUtility.CalculateRelativeRectTransformBounds(canvas, parent);//计算tar的包围盒 float cMinX = 0.5f, cMinY = 0.5f, cMaxX = 0.5f, cMaxY = 0.5f; //获取设置UI的宽和高 float cWidth = rectBounds.size.x; //rect.sizeDelta.x * rect.localScale.x; float cHight = rectBounds.size.y;//rect.sizeDelta.y * rect.localScale.y; //获取设置UI父级的宽和高 float pWidth = parentBounds.size.x;//parent.sizeDelta.x * parent.localScale.x; float pHight = parentBounds.size.y;//parent.sizeDelta.y * parent.localScale.y; //重新计算锚点位置 cMinX = (pWidth / 2 - (cWidth * rect.pivot.x - rect.anchoredPosition.x)) / pWidth; cMinY = (pHight / 2 - (cHight * rect.pivot.y - rect.anchoredPosition.y)) / pHight; cMaxX = (pWidth / 2 + (cWidth * (1 - rect.pivot.x) + rect.anchoredPosition.x)) / pWidth; cMaxY = (pHight / 2 + (cHight * (1 - rect.pivot.y) + rect.anchoredPosition.y)) / pHight; //重新设置UI的锚点位置 rect.anchorMin = new Vector2(cMinX, cMinY); rect.anchorMax = new Vector2(cMaxX, cMaxY); //设置UI的相对距离 rect.offsetMax = new Vector2(0, 0); rect.offsetMin = new Vector2(0, 0); Debug.Log("自适应锚点成功!"); }
上述绑定代码未完善。。。后续完善