// WL767_Probe.cs — PD 지시 #767 회귀 검증 (Play 전용 · 읽기 전용 · 서버 쓰기 없음) // unity command run_script --file AgentScripts/WL767_Probe.cs --entry WL767_Probe.PadOverlap // unity command run_script --file AgentScripts/WL767_Probe.cs --entry WL767_Probe.Watch --args '[20]' // unity command run_script --file AgentScripts/WL767_Probe.cs --entry WL767_Probe.WatchReport // PadOverlap: BattleUI 의 공격/회피 버튼(onClick → OnClick_Attack/OnClick_Avoid) 화면 사각형과 // WL_HUD 아래 raycastTarget Graphic 들의 화면 사각형이 겹치는지 검사(겹침 = 터치 차단). // Watch: n 초 동안 매 프레임 PC 의 타겟 유무 · 공격 클립 재생 · 반경 6 m 몹 HP 감소 · PC HP 를 기록(자동 공격 시작점 = 피격 시 타겟 획득). using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using UnityEngine; using UnityEngine.UI; public static class WL767_Probe { const string OutDir = "Screenshots_WL/hud"; const BindingFlags BF = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; 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); } public static object PadOverlap() { if (!Application.isPlaying) return "not playing"; var sb = new StringBuilder(); var buttons = UnityEngine.Object.FindObjectsByType