看了几篇文章 不知道为什么运行效果不好 自己改
using UnityEditor;
using UnityEngine;
public class UISelectionAnchorPursueBluePoint
{
[MenuItem("Tools/AnchorPursueBluePoint _m")]
public static void AutoRectAnior()
{
Debug.Log("[Tools]:锚点开始盘蓝点...");
if (Selection.activeGameObject == null)
{
Debug.Log("[Tools]:未选择UI!!!");
return;
}
//1获得当前设置UI=================================================================================
RectTransform rectTransform = Selection.activeGameObject.GetComponent<RectTransform>();
//2获取当前UI元素的四个蓝点的世界坐标=============================================================
Vector3[] corners = new Vector3[4];
rectTransform.GetWorldCorners(corners);
// Debug.Log("儿子");
// foreach (Vector3 VARIABLE in corners)
// {
// Debug.Log(VARIABLE);
// }
//Debug.Log("父亲");
//
if (rectTransform.parent == null)
{
Debug.Log("[Tools]:父UI为空!!!");
return;
}
//3获取其父亲的四个蓝点的世界坐标=====================================================================
Vector3[] PCorners = new Vector3[4];
RectTransform parentRectTransform = rectTransform.parent.GetComponent<RectTransform>();
parentRectTransform.GetWorldCorners(PCorners);
// foreach (Vector3 VARIABLE in PCorners)
// {
// Debug.Log(VARIABLE);
// }
//
//4求出锚点的minx miny maxx maxy===================================================================
float minx = (corners[1].x - PCorners[1].x) / (PCorners[2].x - PCorners[1].x);
float maxx = (corners[2].x - PCorners[1].x) / (PCorners[2].x - PCorners[1].x);
float miny = (corners[3].y - PCorners[3].y) / (PCorners[2].y - PCorners[3].y);
float maxy = (corners[2].y - PCorners[3].y) / (PCorners[2].y - PCorners[3].y);
//5设置锚点坐标=========================================================================================
rectTransform.anchorMin=new Vector2(minx,miny);
rectTransform.anchorMax=new Vector2(maxx,maxy);
//6设置UI的相对距离====================================================================================
rectTransform.offsetMax = new Vector2(0, 0);
rectTransform.offsetMin = new Vector2(0, 0);
Debug.Log("[Tools]:锚点缠绵了蓝点...");
}
}