Project_WL/AgentScripts/WL813q_PROBE.txt

176 lines
10 KiB
Plaintext
Raw Permalink Normal View History

# WL813q Probe 2026-09-09 09:14:01 (edit mode · Play 0 · 로그인 0)
playMode=False
── ⓪ 에셋 (WLRunUiSettings · NEW)
[PASS] Resources.Load("WL/WLRunUiSettings")
[PASS] Enabled(에셋·enabled_·RuntimeDisabled) = True
값: enabled_=True hud=True result=True topMargin=272px width=560px timerPx=56 warn=30s pulse=1.35×0.3s
문구: win="런 클리어!" timeout="시간 종료" next="다음 런" close="닫기" zone="존 {0}" boss="BOSS"
행 순서: TotalTime · BossClear · Kills · MaxChain · MaxDamage · Level · LootByGrade · Gold · DeathsPotions
[PASS] 본문 행 9종(발주서 §1-2 순서)
[PASS] Abandon 팝업 없음(기본값)
[PASS] 부활 팝업 우선(기본값)
[PASS] 813p WLRunSettings 존재(런 길이·존 수의 주인)
813p 값(읽기만): runSeconds=240 zoneSpawnerIds=4 zoneClearKills=[12,14,12,8]
[PASS] WLLootSettings.GradeSlots = 9 → lootByGrade 길이 10(813p 계약)
── ① 노드 — NewGameUI 프리팹(저장 0) · Safe Area · 보스 바와 겹침
[PASS] LoadPrefabContents(Assets/Res_Addr/MainUI/NewGameUI.prefab)
[PASS] IngameUIs/WL_HUD 경로 실측
[PASS] WL_HUD 가 SafeAreaFitter 아래 = Safe Area 안 (813y 실측 재확인)
Bind HUD : 연결 IngameUIs/WL_HUD · pos(0.00, -483.56) size(995.56, 216.89) 칸=4 unitsPerPx=1.7778
Bind 결과 : 연결 IngameUIs/WL_HUD · box size(1528.89, 1920.00) 행틀=9 unitsPerPx=1.7778
[PASS] RunHud 노드 생성(WL_RunHud · HideFlags.DontSave)
[PASS] RunResultUI 노드 생성(WL_RunResult · HideFlags.DontSave)
[PASS] RunStarted 구독자 2(HUD+결과) — 실측 2
[PASS] 6종 구독 배선 = Tick1/Zone1/Gate1/Boss1/Ended2
보스 바 = 상단 190 ~ 256 px · 런 HUD 상단 = 272 px
[PASS] 런 HUD 가 보스 HP 바 아래(겹침 0 · 여유 16.0 px)
HUD 배치 : pos(0.00, -483.56) size(995.56, 216.89) 칸=4 unitsPerPx=1.7778
결과 배치: box size(1528.89, 1920.00) 행틀=9 unitsPerPx=1.7778
── ② HUD — RunStarted → RunTick×3 → ZoneCleared×4 → BossGateOpened → BossStarted
[PASS] RunStarted 수신 1
[PASS] 존 칸 4개 생성 — 실측 4
[PASS] HUD 표시 on
[PASS] 타이머 리셋 = 04:00(runSeconds 240 · 페이로드에서) — 실측 "04:00"
[PASS] 단계 = "존 1" — 실측 "존 1"
tick1 timer="03:20" 존0 fill=0.50 단계="존 1"
[PASS] 틱1 mm:ss = 03:20
[PASS] 틱1 존0 게이지 = 6/12 = 0.50 — 실측 0.500
[PASS] 틱2 mm:ss = 02:30
[PASS] 틱2 존0=1.00(클리어) · 존1=0.50 — 실측 1.00/0.50
[PASS] 틱2 단계 = "존 2" — 실측 "존 2"
[PASS] 틱3 mm:ss = 00:25
[PASS] 마지막 30s 경고색 #FF4A47 — 실측 #FF4A47
[PASS] ZoneCleared 4회 수신
[PASS] 존 칸 4개 전부 채움
펄스 실측: 시작 scale=1.350 → 0.3s 뒤 1.000
[PASS] 존 클리어 펄스 1.35× → 0.3s 안에 1.0 복귀
[PASS] 게이트 개방 → 단계 라벨 "BOSS"
[PASS] 보스 단계 색 #FF9E3D
[PASS] BossStarted 수신 1 (boss=null 계약 경로 · 예외 0)
[RunHud] 구독=True bound=True visible=True · started=1 tick=3 zoneCleared=4 gate=1 boss=1 ended=0
타이머 "00:25" (남은 25.0s · 경고=True · 쓰기 4회) · 단계 "BOSS" (쓰기 4회)
존 칸 4 (fill 쓰기 15회): [0]=1.00×1.00 [1]=1.00×1.00 [2]=1.00×1.00 [3]=1.00×1.00
노드 pos(0.00, -483.56) size(995.56, 216.89) active=True 부모=WL_HUD SafeArea=True
edge = Font SDF Material (WL813y Edge) shader=TextMeshPro/Mobile/Distance Field outlineW=0.280 outlineC=0D0805FF underlay=000000CC off(0.50,-0.50) soft=0.22 UNDERLAY_ON=True
설정 enabled=True hud=True topMargin=272px width=560px timerPx=56 warn=30s pulse=1.35×0.3s
── ③ 결과 화면 — RunEnded(Win)
[PASS] RunEnded 수신 1
[PASS] 결과 화면 표시(부활 팝업 없음)
[PASS] 제목 = "런 클리어!" — 실측 "런 클리어!"
[PASS] 런 종료 → HUD 숨김(runHudHideOnEnd)
[PASS] 복사본 스칼라 = 입력과 일치(outcome/runIndex/total/kills/boss/chain/level/gold/deaths/potions/zones)
행 값 실측:
총 시간 = "02:34"
보스 처치 = "02:34"
처치 수 = "99 (보스 1)"
최대 연쇄 = "9"
최대 피해 = "8889"
레벨 = "11 → 14"
등급별 = "<color=#F2F5FA>7</color> <color=#cd835e>3</color> <color=#2ca1f4>2</color> <color=#FF12A8>1</color>"
골드 = "777"
사망/물약 = "2 / 3"
[PASS] 총 시간 154s → 02:34
[PASS] 보스 처치 153.5s → 02:34(올림)
[PASS] 처치 수 = 99 (보스 1)
[PASS] 최대 연쇄 = 9
[PASS] 최대 피해 = 합산(maxDamageBurst 8888.5 → 8889 · 0.5 는 올림) · 단일(1234.5)이 아니다 — 실측 "8889"
[PASS] 레벨 11 → 14
[PASS] 골드 = 777
[PASS] 사망/물약 = 2 / 3
[PASS] 등급별 획득 = 1급 7 · 2급 3 · 4급 2 · 9급 1 (0 인 등급 생략 · 4칸)
[PASS] 등급 색 태그 4개(813f 팔레트 + 813y 밝기 하한) — 실측 4
등급 색: 1=<color=#a6a6a7>→<color=#F2F5FA> 2=<color=#cd835e> 4=<color=#2ca1f4> 9=<color=#FF12A8>
[PASS] 본문 9행 표시 — 실측 9
[RunResultUI] 구독=True bound=True open=True pending=False · ended=1 shows=1 defer=0 next=0 close=0 abandon생략=0 버퍼증설=0 공용팝업=False
제목 "런 클리어!" · 행 9개 · 부활팝업Busy=False
- TotalTime : "02:34"
- BossClear : "02:34"
- Kills : "99 (보스 1)"
- MaxChain : "9"
- MaxDamage : "8889"
- Level : "11 → 14"
- LootByGrade : "<color=#F2F5FA>7</color> <color=#cd835e>3</color> <color=#2ca1f4>2</color> <color=#FF12A8>1</color>"
- Gold : "777"
- DeathsPotions : "2 / 3"
복사본 outcome=Win runIndex=2 total=154.0s bossClear=153.5s kills=99(보스 1) chain=9 dmg=1234.5/8888.5 lv=11→14 lootTotal=13 gold=777 deaths=2 potions=3
복사 배열 zone(4): [0]=31.5/12 [1]=62.3/14 [2]=95.0/12 [3]=-1.0/5 · loot(10): 0 7 3 0 2 0 0 0 0 1
본문 = 런 클리어! | 총 시간 : 02:34 | 보스 처치 : 02:34 | 처치 수 : 99 (보스 1) | 최대 연쇄 : 9 | 최대 피해 : 8889 | 레벨 : 11 → 14 | 획득 : <color=#F2F5FA>7</color> <color=#cd835e>3</color> <color=#2ca1f4>2</color> <color=#FF12A8>1</color> | 골드 : 777 | 사망 / 물약 : 2 / 3 |
설정 enabled=True result=True 공용팝업=False abandon표시=False 부활우선=True box=(860.00, 1080.00) 행수=9 합산피해=True
── ④ 🔴 배열 3종 즉시 복사(813p 재사용 계약) — 원본을 덮어써도 화면 값 불변
[PASS] zoneClearSec 참조가 원본과 다르다(자기 버퍼)
[PASS] zoneKills 참조가 원본과 다르다(자기 버퍼)
[PASS] lootByGrade 참조가 원본과 다르다(자기 버퍼)
[PASS] 존 배열 값 불변 — clearSec[0]=31.50 kills[0]=12 (원본은 999 로 덮어씀)
[PASS] loot 배열 값 불변 — [1]=7 (원본은 999)
[PASS] 결과 화면 등급 줄 문자열 불변
원본 배열 현재값: zoneClearSec[0]=-999 zoneKills[0]=-999 loot[1]=999
[PASS] 두 번째 복사에서 버퍼 증설 0(런마다 배열 할당 0) — 증설 누계 0
── ⑤ 시간 종료(Timeout)
[PASS] 결과 화면 표시
[PASS] 제목 = "시간 종료" — 실측 "시간 종료"
[PASS] 보스 처치 1 → "—"(미발생 대시)
[PASS] 보스 처치 0
── ⑥ 이탈(Abandon) — 팝업 없음 · HUD 리셋만
[PASS] 팝업 0 (open=False)
[PASS] 표시 호출 0 (누계 2)
[PASS] Abandon 생략 카운터 +1
[PASS] 대기(pending) 0 — 나중에 저절로 뜨지 않는다
[PASS] HUD 숨김(리셋)
── ⑦ 813i/813tj 부활 팝업과 동시 — 부활 우선 · 결과는 닫힌 뒤
[PASS] 프리팹에서 ReviveDialog 발견 — 1개
ReviveDialog.Initialize : initialized · 폴백 팝업 box size(1351.11, 675.56) unitsPerPx=1.7778
ReviveDialog.ShowNowOnce: 폴백 팝업 표시 msg="존 시작점에서 부활합니다.
무료"
[PASS] 부활 팝업 Busy = True
[PASS] 결과 화면 아직 안 뜬다(부활 우선)
[PASS] 결과 대기 중 = True
[PASS] 미룸 카운터 +1
[PASS] 부활 팝업 닫힘 → Busy=false
Tick: 런타임 패널 표시 outcome=Win 행=9
[PASS] 부활 팝업이 닫힌 뒤 결과 화면 표시
[PASS] 대기 해제
[다음 런] : 다음 런 — RunDirector.Restart() 호출
[PASS] [다음 런] 클릭 경로 = RunDirector.Restart() 1회
[PASS] [다음 런] 뒤 결과 화면 닫힘
RunDirector 상태: phase=Zones runIndex=4 restartCount=4
[닫기] : 닫기
[PASS] [닫기] 뒤 결과 화면 닫힘
── ⑧ GC — 틱 100회 할당 0 (대조군 2종)
계기 = GC.GetTotalMemory (Boehm 힙 크기) + GC.CollectionCount(0) · GetAllocatedBytesForCurrentThread 절대값=0 (0 이면 이 런타임에 미구현 → 쓰지 않는다)
본시험(같은 초 100틱): ΔGetTotalMemory=0 B · gc0 340→340 · 표시 쓰기 31→31 (Δ할당 계기 참고값 0 B · 미구현)
[PASS] 🔴 구조 증명: 값이 그대로면 SetText/fillAmount 쓰기 0회 = 만들 문자열 자체가 없다
[PASS] ΔGC = 0 B · gc0 불변 (RunTick 100회)
대조군 A(초가 바뀌는 100틱 · SetText 99회): ΔGetTotalMemory=0 B · gc0 343→343 — 우리 코드의 mm:ss 는 char 버퍼(문자열 0)이고, 에디터에서는 TMP 가 `#if UNITY_EDITOR m_text = InternalTextBackingArrayToString()` 로 인스펙터용 문자열을 만든다(빌드에는 없는 줄).
대조군 B(40,000자 문자열 200개 ≈ 16 MB): ΔGetTotalMemory=16384000 B · gc0 346→346 (sink=200) — 계기 감도 확인. 100 KB 규모는 Boehm 힙 여유분에 묻혀 Δ0 이 나온다(실측).
[PASS] 측정 감도 있음(대조군 B ΔGetTotalMemory > 0)
[PASS] mm:ss 경계값(0 · 음수 · 올림 · 240 · 상한 99:59)
── ⑨ C8 롤백 — enabled = 0 이면 HUD·결과 0 · 813p 는 그대로
[PASS] RuntimeDisabled=1 → Enabled=False
HUD Tick: off — 무동작
결과 Tick: off — 무동작
[PASS] HUD 숨김 · 결과 닫힘
Bind(off): off — 조립 생략
[PASS] asset.enabled_=0 → Enabled=False (같은 게이트)
[PASS] 복구 후 Enabled=True
[PASS] 813p WLRunSettings.Enabled 불변 = True (런 구조는 그대로 동작)
── ⑩ 정리 — 구독 해제 · 노드 파괴 · 프리팹 저장 0
RunHud : teardown 완료
RunResultUI: teardown 완료
[PASS] RunEvents 구독자 전부 0 (Started 0 Tick 0 Zone 0 Gate 0 Boss 0 Ended 0)
RunEvents.TotalRaised=11 last=RunTick · Dispatched(Tick)=820
[PASS] TimeScale 무접촉 = 1
UnloadPrefabContents — 프리팹 저장 0
RESULT PASS (pass=87 fail=0)