using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; namespace Stary.Evo { public enum AnchorPresets { TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottonCenter, BottomRight, BottomStretch, VertStretchLeft, VertStretchRight, VertStretchCenter, HorStretchTop, HorStretchMiddle, HorStretchBottom, StretchAll } public enum PivotPresets { TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight, } public static class UIExtension { 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 = new Vector2(0, 1); source.anchorMax = new Vector2(0, 1); break; } case (AnchorPresets.TopCenter): { source.anchorMin = new Vector2(0.5f, 1); source.anchorMax = new Vector2(0.5f, 1); break; } case (AnchorPresets.TopRight): { source.anchorMin = new Vector2(1, 1); source.anchorMax = new Vector2(1, 1); break; } case (AnchorPresets.MiddleLeft): { source.anchorMin = new Vector2(0, 0.5f); source.anchorMax = new Vector2(0, 0.5f); break; } case (AnchorPresets.MiddleCenter): { source.anchorMin = new Vector2(0.5f, 0.5f); source.anchorMax = new Vector2(0.5f, 0.5f); break; } case (AnchorPresets.MiddleRight): { source.anchorMin = new Vector2(1, 0.5f); source.anchorMax = new Vector2(1, 0.5f); break; } case (AnchorPresets.BottomLeft): { source.anchorMin = new Vector2(0, 0); source.anchorMax = new Vector2(0, 0); break; } case (AnchorPresets.BottonCenter): { source.anchorMin = new Vector2(0.5f, 0); source.anchorMax = new Vector2(0.5f, 0); break; } case (AnchorPresets.BottomRight): { source.anchorMin = new Vector2(1, 0); source.anchorMax = new Vector2(1, 0); break; } case (AnchorPresets.HorStretchTop): { source.anchorMin = new Vector2(0, 1); source.anchorMax = new Vector2(1, 1); break; } case (AnchorPresets.HorStretchMiddle): { source.anchorMin = new Vector2(0, 0.5f); source.anchorMax = new Vector2(1, 0.5f); break; } case (AnchorPresets.HorStretchBottom): { source.anchorMin = new Vector2(0, 0); source.anchorMax = new Vector2(1, 0); break; } case (AnchorPresets.VertStretchLeft): { source.anchorMin = new Vector2(0, 0); source.anchorMax = new Vector2(0, 1); break; } case (AnchorPresets.VertStretchCenter): { source.anchorMin = new Vector2(0.5f, 0); source.anchorMax = new Vector2(0.5f, 1); break; } case (AnchorPresets.VertStretchRight): { source.anchorMin = new Vector2(1, 0); source.anchorMax = new Vector2(1, 1); break; } case (AnchorPresets.StretchAll): { source.anchorMin = new Vector2(0, 0); source.anchorMax = new Vector2(1, 1); source.sizeDelta = Vector2.zero; break; } } } public static void SetPivot(this RectTransform source, PivotPresets preset) { switch (preset) { case (PivotPresets.TopLeft): { source.pivot = new Vector2(0, 1); break; } case (PivotPresets.TopCenter): { source.pivot = new Vector2(0.5f, 1); break; } case (PivotPresets.TopRight): { source.pivot = new Vector2(1, 1); break; } case (PivotPresets.MiddleLeft): { source.pivot = new Vector2(0, 0.5f); break; } case (PivotPresets.MiddleCenter): { source.pivot = new Vector2(0.5f, 0.5f); break; } case (PivotPresets.MiddleRight): { source.pivot = new Vector2(1, 0.5f); break; } case (PivotPresets.BottomLeft): { source.pivot = new Vector2(0, 0); break; } case (PivotPresets.BottomCenter): { source.pivot = new Vector2(0.5f, 0); break; } case (PivotPresets.BottomRight): { source.pivot = new Vector2(1, 0); break; } } } public static CanvasGroup CreateBlackMask(Transform parent, float alpha = 0, string name = null) { GameObject maskGo = new GameObject("Black Mask"); RectTransform rectTransform = maskGo.AddComponent(); rectTransform.SetParentEx(parent); rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; Image image = maskGo.AddComponent(); image.color = Color.black; image.raycastTarget = false; CanvasGroup canvasGroup = maskGo.AddComponent(); canvasGroup.alpha = alpha; if(name != null) canvasGroup.name = name; return canvasGroup; } public static Canvas CreateLayerCanvas(UILayer layer, bool is3D, Transform parent, Camera camera, float width, float height) { GameObject canvasGo = new GameObject(layer.ToString()); RectTransform rectTransform = canvasGo.AddComponent(); rectTransform.SetParentEx(parent); rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; canvasGo.layer = is3D ? Layer.Default : Layer.UI; Canvas canvas = canvasGo.AddComponent(); canvas.renderMode = is3D ? RenderMode.WorldSpace : RenderMode.ScreenSpaceCamera; canvas.overrideSorting = true; canvas.sortingOrder = (int)layer; canvas.worldCamera = camera; canvas.pixelPerfect = false; CanvasScaler canvasScaler = canvasGo.AddComponent(); canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; canvasScaler.referenceResolution = new Vector2(height,width); canvasScaler.screenMatchMode = CanvasScaler.ScreenMatchMode.Expand; canvasGo.AddComponent(); return canvas; } /// /// 为方便统一处理点击音效等 /// public static void AddClick(this Button button, UnityAction callback) { button.onClick.AddListener(callback); } } }