using UnityEditor; using UnityEngine; using UnityEngine.UI; public static class GraphicDebugExtensions { #if UNITY_EDITOR [DrawGizmo(GizmoType.Selected)] static void DrawGraphicBounds(NoDrawGraphics graphic, GizmoType gizmoType) { if (!graphic.enabled) return; Color originalColor = Gizmos.color; Gizmos.color = Color.green; DrawRectTransformBounds(graphic.rectTransform); } [DrawGizmo(GizmoType.Selected)] static void DrawRectMask2DBounds(RectMask2D rectMask, GizmoType gizmoType) { if (!rectMask.enabled) return; RectTransform rectTransform = rectMask.rectTransform; Vector4 padding = rectMask.padding; Vector3[] worldCorners = new Vector3[4]; rectTransform.GetWorldCorners(worldCorners); Rect rect = rectTransform.rect; Rect paddedRect = new Rect( rect.x + padding.x, rect.y + padding.z, rect.width - padding.x - padding.y, rect.height - padding.z - padding.w ); Vector3[] paddedCorners = new Vector3[4]; paddedCorners[0] = rectTransform.TransformPoint(new Vector3(paddedRect.x, paddedRect.y, 0)); // 左下 paddedCorners[1] = rectTransform.TransformPoint(new Vector3(paddedRect.x + paddedRect.width, paddedRect.y, 0)); // 右下 paddedCorners[2] = rectTransform.TransformPoint(new Vector3(paddedRect.x + paddedRect.width, paddedRect.y + paddedRect.height, 0)); // 右上 paddedCorners[3] = rectTransform.TransformPoint(new Vector3(paddedRect.x, paddedRect.y + paddedRect.height, 0)); // 左上 Gizmos.color = Color.green; for (int i = 0; i < 4; i++) { Gizmos.DrawLine(paddedCorners[i], paddedCorners[(i + 1) % 4]); } } static void DrawRectTransformBounds(RectTransform rectTransform) { if (rectTransform != null) { Vector3[] corners = new Vector3[4]; rectTransform.GetWorldCorners(corners); Gizmos.DrawLine(corners[0], corners[1]); Gizmos.DrawLine(corners[1], corners[2]); Gizmos.DrawLine(corners[2], corners[3]); Gizmos.DrawLine(corners[3], corners[0]); } } #endif }