判断一个图片是否在另一个图片上面
GetWorldCorners(Vector3[4]) — 取节点的世界坐标四角- InverseTransformPoint(worldPos) — 世界坐标 → 目标节点局部坐标- GetLocalCorners(Vector3[4]) — 取节点自身局部坐标系下的四角作为边界// 判断 inner 是否完全在 outer 内不超出任何一边 public static bool IsRectFullyInside(RectTransform inner, RectTransform outer) { var corners new Vector3[4]; inner.GetWorldCorners(corners); var outerCorners new Vector3[4]; outer.GetLocalCorners(outerCorners); // outerCorners[0]左下, [2]右上 → outer 的 AABB foreach (var worldCorner in corners) { // 把 inner 的角点转到 outer 的局部坐标系 var local outer.InverseTransformPoint(worldCorner); if (local.x outerCorners[0].x || local.x outerCorners[2].x || local.y outerCorners[0].y || local.y outerCorners[2].y) return false; } return true; } // 判断是否有任意重叠压在上面 public static bool IsRectOverlapping(RectTransform inner, RectTransform outer) { var corners new Vector3[4]; inner.GetWorldCorners(corners); var outerCorners new Vector3[4]; outer.GetLocalCorners(outerCorners); foreach (var worldCorner in corners) { var local outer.InverseTransformPoint(worldCorner); if (local.x outerCorners[0].x local.x outerCorners[2].x local.y outerCorners[0].y local.y outerCorners[2].y) return true; // 只要有一个角在 outer 内就算重叠 } return false; }