53 lines
2.3 KiB
C#
53 lines
2.3 KiB
C#
// WL796_PixelProbe.cs — 화면 특정 픽셀을 덮고 있는 활성 UI Graphic 을 전부 나열한다(정체불명 사각형 추적).
|
|
// unity command run_script --file AgentScripts/WL796_PixelProbe.cs --entry WL796_PixelProbe.At --args '[30,20]'
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public static class WL796_PixelProbe
|
|
{
|
|
static Rect ScreenRect(RectTransform rt, Canvas canvas)
|
|
{
|
|
var corners = new Vector3[4];
|
|
rt.GetWorldCorners(corners);
|
|
var cam = canvas != null && canvas.renderMode != RenderMode.ScreenSpaceOverlay ? canvas.worldCamera : null;
|
|
Vector2 min = new Vector2(float.MaxValue, float.MaxValue), max = new Vector2(float.MinValue, float.MinValue);
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
Vector2 p = cam != null ? (Vector2)RectTransformUtility.WorldToScreenPoint(cam, corners[i]) : (Vector2)corners[i];
|
|
min = Vector2.Min(min, p); max = Vector2.Max(max, p);
|
|
}
|
|
return Rect.MinMaxRect(min.x, min.y, max.x, max.y);
|
|
}
|
|
|
|
static string Path(Transform t)
|
|
{
|
|
var sb = new StringBuilder(t.name);
|
|
var p = t.parent;
|
|
while (p != null) { sb.Insert(0, p.name + "/"); p = p.parent; }
|
|
return sb.ToString();
|
|
}
|
|
|
|
public static object At(float x, float y)
|
|
{
|
|
if (!Application.isPlaying) return "not playing";
|
|
var pt = new Vector2(x, y);
|
|
var sb = new StringBuilder("point=" + pt + " screen=" + Screen.width + "x" + Screen.height + "\n");
|
|
var all = Object.FindObjectsByType<Graphic>(FindObjectsInactive.Exclude, FindObjectsSortMode.None)
|
|
.Where(g => g.isActiveAndEnabled && g.gameObject.activeInHierarchy);
|
|
foreach (var g in all)
|
|
{
|
|
var canvas = g.canvas;
|
|
var r = ScreenRect(g.rectTransform, canvas);
|
|
if (!r.Contains(pt)) continue;
|
|
var cg = g.GetComponentInParent<CanvasGroup>();
|
|
sb.AppendLine(" " + Path(g.transform) + " [" + g.GetType().Name + "] rect=" + r.ToString("F0") +
|
|
" color=" + g.color + " a=" + g.color.a.ToString("F2") +
|
|
(cg != null ? " parentCG.alpha=" + cg.alpha : "") +
|
|
" sortOrder=" + (canvas != null ? canvas.sortingOrder : 0));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|