using UnityEngine; namespace TyphoonUI { /// /// Anchor位置 /// public enum AnchorPresets { TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight, BottomStretch, VertStretchLeft, VertStretchRight, VertStretchCenter, HorStretchTop, HorStretchMiddle, HorStretchBottom, StretchAll } /// /// 锚点位置 /// public enum PivotPresets { TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight, } public static class RectTransformExtensions { private static readonly Vector2 vTopLeft = new Vector2(0, 1); //左上 private static readonly Vector2 vMidLeft = new Vector2(0, 0.5f); //左中 private static readonly Vector2 vBottomLeft = new Vector2(0, 0); //左下 private static readonly Vector2 vTopRight = new Vector2(1, 1); //右上 private static readonly Vector2 vMidRight = new Vector2(1, 0.5f); //右中 private static readonly Vector2 vBottomRight = new Vector2(1, 0f); //右下 private static readonly Vector2 vTopCenter = new Vector2(0.5f, 1); //中上 private static readonly Vector2 vMidCenter = new Vector2(0.5f, 0.5f); //中中 private static readonly Vector2 vBottomCenter = new Vector2(0.5f, 0); //中下 /// /// 设置Anchor /// /// /// /// /// public static void SetAnchor(this RectTransform source, AnchorPresets allign, int offsetX = 0, int offsetY = 0) { source.anchoredPosition = new Vector3(offsetX, offsetY, 0); switch (allign) { case (AnchorPresets.TopLeft): //左上 { source.anchorMin = vTopLeft; source.anchorMax = vTopLeft; break; } case (AnchorPresets.TopCenter): //中上 { source.anchorMin = vTopCenter; source.anchorMax = vTopCenter; break; } case (AnchorPresets.TopRight): //右上 { source.anchorMin = vTopRight; source.anchorMax = vTopRight; break; } case (AnchorPresets.MiddleLeft): //左中 { source.anchorMin = vMidLeft; source.anchorMax = vMidLeft; break; } case (AnchorPresets.MiddleCenter): //中心 { source.anchorMin = vMidCenter; source.anchorMax = vMidCenter; break; } case (AnchorPresets.MiddleRight): //右中 { source.anchorMin = vMidRight; source.anchorMax = vMidRight; break; } case (AnchorPresets.BottomLeft): //左下 { source.anchorMin = vBottomLeft; source.anchorMax = vBottomLeft; break; } case (AnchorPresets.BottomCenter): //中下 { source.anchorMin = vBottomCenter; source.anchorMax = vBottomCenter; break; } case (AnchorPresets.BottomRight): //右下 { source.anchorMin = vBottomRight; source.anchorMax = vBottomRight; break; } case (AnchorPresets.HorStretchTop): //顶部水平延伸 { source.anchorMin = vTopLeft; source.anchorMax = vTopRight; break; } case (AnchorPresets.HorStretchMiddle): //中心水平延伸 { source.anchorMin = vMidLeft; source.anchorMax = vMidRight; break; } case (AnchorPresets.HorStretchBottom): //底部水平延伸 { source.anchorMin = vBottomLeft; source.anchorMax = vBottomRight; break; } case (AnchorPresets.VertStretchLeft): //左部垂直延伸 { source.anchorMin = vBottomLeft; source.anchorMax = vTopLeft; break; } case (AnchorPresets.VertStretchCenter): //中心垂直延伸 { source.anchorMin = vBottomCenter; source.anchorMax = vTopCenter; break; } case (AnchorPresets.VertStretchRight): //右端垂直延伸 { source.anchorMin = vBottomRight; source.anchorMax = vTopRight; break; } case (AnchorPresets.StretchAll): //全展开 { source.anchorMin = vBottomLeft; source.anchorMax = vTopRight; break; } } } /// /// 设置Poivot /// /// /// public static void SetPivot(this RectTransform source, PivotPresets preset) { switch (preset) { case (PivotPresets.TopLeft): //左上 { source.pivot = vTopLeft; break; } case (PivotPresets.TopCenter): //中上 { source.pivot = vTopCenter; break; } case (PivotPresets.TopRight): //右上 { source.pivot = vTopRight; break; } case (PivotPresets.MiddleLeft): //左中 { source.pivot = vMidLeft; break; } case (PivotPresets.MiddleCenter): //中心 { source.pivot = vMidCenter; break; } case (PivotPresets.MiddleRight): //右中 { source.pivot = vMidRight; break; } case (PivotPresets.BottomLeft): //左下 { source.pivot = vBottomLeft; break; } case (PivotPresets.BottomCenter): //中下 { source.pivot = vBottomCenter; break; } case (PivotPresets.BottomRight): //右下 { source.pivot = vBottomRight; break; } } } /// /// 获取Anchor /// /// public static AnchorPresets GetAnchorPresets(this RectTransform source) { Vector2 anchorMin = source.anchorMin; Vector2 anchorMax = source.anchorMax; if (anchorMin == vTopLeft && anchorMax == vTopLeft) { return AnchorPresets.TopLeft; } else if (anchorMin == vTopCenter && anchorMax == vTopCenter) { return AnchorPresets.TopCenter; } else if (anchorMin == vTopRight && anchorMax == vTopRight) { return AnchorPresets.TopRight; } else if (anchorMin == vMidLeft && anchorMax == vMidLeft) { return AnchorPresets.MiddleLeft; } else if (anchorMin == vMidCenter && anchorMax == vMidCenter) { return AnchorPresets.MiddleCenter; } else if (anchorMin == vMidRight && anchorMax == vMidRight) { return AnchorPresets.MiddleRight; } else if (anchorMin == vBottomLeft && anchorMax == vBottomLeft) { return AnchorPresets.BottomLeft; } else if (anchorMin == vBottomCenter && anchorMax == vBottomCenter) { return AnchorPresets.BottomCenter; } else if (anchorMin == vBottomRight && anchorMax == vBottomRight) { return AnchorPresets.BottomRight; } else if (anchorMin == vTopLeft && anchorMax == vTopRight) { return AnchorPresets.HorStretchTop; } else if (anchorMin == vMidLeft && anchorMax == vMidRight) { return AnchorPresets.HorStretchMiddle; } else if (anchorMin == vBottomLeft && anchorMax == vBottomRight) { return AnchorPresets.HorStretchBottom; } else if (anchorMin == vBottomLeft && anchorMax == vTopLeft) { return AnchorPresets.VertStretchLeft; } else if (anchorMin == vBottomCenter && anchorMax == vTopCenter) { return AnchorPresets.VertStretchCenter; } else if (anchorMin == vBottomRight && anchorMax == vTopRight) { return AnchorPresets.VertStretchRight; } else if (anchorMin == vBottomLeft && anchorMax == vTopRight) { return AnchorPresets.VertStretchRight; } return AnchorPresets.MiddleCenter; //默认返回中心 } public static PivotPresets GetPivotPresets(this RectTransform source) { Vector2 pivot = source.pivot; //暂存锚点 if (pivot == vTopLeft) { return PivotPresets.TopLeft; } else if (pivot == vTopCenter) { return PivotPresets.TopCenter; } else if (pivot == vTopRight) { return PivotPresets.TopRight; } else if (pivot == vMidLeft) { return PivotPresets.MiddleLeft; } else if (pivot == vMidCenter) { return PivotPresets.MiddleCenter; } else if (pivot == vMidRight) { return PivotPresets.MiddleRight; } else if (pivot == vBottomLeft) { return PivotPresets.BottomLeft; } else if (pivot == vBottomCenter) { return PivotPresets.BottomCenter; } else if (pivot == vBottomRight) { return PivotPresets.BottomRight; } return PivotPresets.MiddleCenter; //默认返回中心锚点 } } }