Project_WL/AgentScripts/WL813q_PROBE.txt

176 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)