- NavMeshSurface.useGeometry = PhysicsColliders — RenderMeshes 기본값은 메시 Read/Write 를 요구해 콘솔 에러 100건(실측)
- 베이크 후 앵커 위 NavMesh 존재를 로그로 남긴다(WL_Dungeon01 실측: (0,0.07,0) 있음)
- 이름표·「들어가기」 버튼에 한글 TMP 폰트 지정(기본 폰트에는 한글 글리프가 없어 □ 로 나왔다)
- 던전 3 입구를 덤불 위치에서 (2.5,0,11) 로 이동(에디트 모드 레이캐스트 실측)
- 던전 입장 시 프롬프트 숨김
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- NavMeshSurface 기본값(collectObjects=All · useGeometry=RenderMeshes)을 그대로 쓴다(게이트 PASS)
- 섬 카메라 소유권 SO(islandCameraOwner 기본 1 = FI 카메라) · 떠날 때 되살림
- WL 전투 PC 는 Addressables 콜백으로 늦게 생긴다 → hidePcWatchSeconds 동안 감시해 숨김
- 프로브 전용 DebugSceneOverride(던전 복사본 씬 미등록 구간 검증용)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
무기용 값 = 덩어리 16 · 팔레트 12칸 (캐릭터 40/16 은 과하다 — 무기는 화면이 1/10)
- 6칸은 육안 기각: 08 방패 문양이 뭉치고 05_Bow_004 노란 장식이 초록으로 돈다(dHue 30.3°→0.03°)
- 채도 복원을 min(평균색 채도, 복원값)으로 제한 — 금속이 갈색으로 뜨던 1차 육안 기각 원인 제거
- Hue 는 ±8° 하드 클램프 · 전역 채널 이득 0
인게임 Play 실측(포스트 포함 · 게임 크기): 서로다른색 11종 전부 25% 이하
(Elven_Sword 82.6→7.7 · Wand 38.1→8.6 · Dagger2 65.6→15.0) · 고유색 최대 70(≤200)
캐릭터 기존 수치 악화 0 (167 · 5.64% → 167 · 5.64%) · 되돌리기 11/11 동일
코스튬 = 해당 없음(46종 전부 어른 Ai01 계열 · 스왑 대상은 110001 하나뿐 = 이미 도트화된 M05)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PD 가 「우리 게임의 기본 시스템을 FarmingIsland 씬의 시스템을 그대로 활용하고
싶다」고 채택했으므로 기반 시스템이 되었다. 미추적 상태로는 병렬 worktree 에
폴더 자체가 없어 워커가 작업할 수 없다(816c 가 선결 과제로 지목).
- Assets/FarmingIsland/** (1,195 파일 174MB · 섬 확장·상인·인벤토리·농사·축산·낚시·섹터 이동)
- Assets/Plugins/{Demigiant(DOTween), SimpleInput, UI} — FarmingIsland 컴파일에 필요
🔴 FI 씬 5개의 빌드 목록 등록은 ProjectSettings 변경이라 PD 승인 후 별건으로 한다
(F-31 재발 방지 — 임포트가 ProjectSettings 를 덮어쓴 사고가 있었다).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
측정 지점을 알베도가 아니라 **Play 화면 픽셀**로 옮겨 다시 쟀다(편집 모드 렌더는 무의미).
아레나 근접(직교 0.95) · 캐릭터 격리 마스크 · 덩어리(팔레트 칸) 지도 기준.
원인(실측 · 추정 아님)
ⓐ 소스 텍스처 = 무죄. *_WL.png 는 Suriyun 원본과 MD5 동일.
ⓑ 그림자색(_ShadowDiffuseColor) = 영향 0.2° 미만 — 중성/따뜻/어둡게 4종 비교.
ⓒ 포스트 그레이딩 Volume = 영향 0.1° 미만 — weight 0 으로 꺼도 색이 그대로.
🔴 진범 = 무드의 **조명**(키라이트 (1,0.78,0.46)x1.45 + 보라 앰비언트).
평면 색은 디테일이 없어 빛의 색조가 그대로 드러난다.
mood 0.30 -> 0 이면 금발·흰옷이 돌아오지만 고유색 132 -> 906(평탄함이 깨진다).
이번 조치 = 캐릭터 전용 휘도보존 역이득 _DiffuseColor (0.994, 1.024, 0.894)
씬·조명·814t 설정·ProjectSettings 는 하나도 안 건드린다.
유채색 가중 dHue 25.1° -> 17.0° · 머리칼 -16.9° -> -7.0° · 흰 튜닉 -74.1° -> -10.4°
붉은 바지 -7.7° -> +0.7° · 게임 크기 고유색 132 -> 121 (4.1 %)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
814x 실측: 림을 켜면 캐릭터 영역 고유색이 52 -> 261 로 되돌아간다
(림이 표면마다 새 밝기를 만들어 「넓은 면 = 한 색」을 깬다).
PD 도 「흰색으로 빛이 반사된 느낌」을 지적했다. 두 이유가 같은 곳을 가리킨다.
rimStrength 값(0.6)은 남겨 두어 켜면 그대로 복귀한다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
메시 UV 를 「색 하나를 가리키는 좌표」로 새로 굽는다. 삼각형 안에서 UV 가 상수라
화면에서 아무리 축소돼도 그 덩어리는 항상 단색 — 평균 날 디테일이 애초에 없다.
실측(WL_ArenaProto · 직교 10 · 1080x1920 · 캐릭터 2,996 px · 814u/814v 와 같은 축)
서로 다른 색 비율 89.3 % -> 1.7 % (합격선 <= 25 %)
캐릭터 영역 고유색 2,676 -> 52 (합격선 <= 60)
덩어리당 색 단계 - -> 평균 2.79 (14칸 중 13칸이 2~3 · 합격선 <= 4)
눈 진한 점 10 px -> 36 px (눈 1개 7x5 px)
색상(Hue) 오차 - -> 몸통 2.4° 피부 3.7° 머리칼 3.5°
삼각형 수 무변경 · 정점 2,520 -> 2,776 (+10 %)
원본 수정 0 — FBX/원본 png/프리팹/씬 전부 무변경. 메시는 복사본(.asset)에 UV 만 새로 굽고
런타임에 갈아끼운다. 되돌리기 = 새 SO 의 enabled_ = 0 이면 814s+814t 상태 100 %.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PD 「② 기존 텍스처를 이 화풍으로 변환으로 해보자」.
로컬 ComfyUI(127.0.0.1:8000) HTTP API 를 직접 호출 — MCP 불필요.
- 체크포인트 noobaiXLNAIXL_epsilonPred05Version(LoRA 학습 베이스 · PD 안내)
- LoRA ElinSpriteNoobLocon_byKonan 0.9
- img2img denoise 0.40 (0.30~0.50 비교 후 채택 · 0.50 은 배치가 틀어진다)
- 원본 알파 복원 + 팔레트 32/48/64 색 양자화
UV 무변경 확인: 갑옷/튜닉/바지/부츠가 전부 제자리에 찍힘(인게임 렌더 실측).
아직 머티리얼/프리팹에 꽂지 않음 — 후보 파일만.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PD 「왜 흰색으로 빛이 반사된 느낌이 나는거지?」
원인 = 림라이트(rimStrength 1.6) 가 밝은 면에서 흰색으로 포화.
색은 금색(1, 0.82, 0.5)이지만 세기가 높아 흰색으로 탄다.
외곽선 두께는 PD 승인값(캐릭터 1 / 배경 2.5) 유지.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- §1 실측: 부위별 텍셀→화면픽셀 밀도(앞면 삼각형 · 화면면적 가중) · 올리브 원인 규명
- 얼굴 face02_V1..V4 · 머리칼 Hair05_V1..V4 (원본 복사 → 제자리 가공 · UV/메시 무변경)
- 올리브 차단: HSV 의 V 만 조절(RGB 배율 금지 → 채널 포화 0) + 단별 Hue 를 기준색 ±cap 로 제한
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- ArenaWalker.body 가 비어 있어 스크립트가 자기 자신(빈 오브젝트)을 움직이고 있었다
→ body = PC_LH_M05 로 연결(PD 실측 보고 「캐릭터 움직임이 없어」의 직접 원인)
- body 가 비어 있던 탓에 Start() 의 Animator.fireEvents=false 도 캐릭터에 적용되지 않아
'Event_Idle' has no receiver! 가 33건 발생 → 빈 수신자 ArenaAnimEventSink 를 붙여
에디트/플레이 양쪽에서 차단(fireEvents 는 런타임 전용이라 에디트 모드를 못 막는다)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Animator.fireEvents=false: 클립 Idle 이 쏘는 Event_Idle 의 수신자(WizardActor)를
§1 에서 떼어 내 "AnimationEvent … has no receiver!" 가 2초마다 났다(실측 6회/12초).
빈 수신자 컴포넌트를 붙이는 대신 이벤트 발사를 끈다 → Play 콘솔 error 0.
- autoWalk 프로브(기본 off): 중앙→14 m 소요 시간을 실측하기 위한 씬 전용 스위치.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- PC_LH_M05 씬 인스턴스에서 게임 컴포넌트 7종 제거(WizardActor·NavMeshAgent·
Rigidbody·CapsuleCollider·SkinnedMeshAfterImage·WLPcScaleCompensator·
WLWeaponFitter) → 게임 초기화 없이 Update 가 돌며 터지던
KeyNotFoundException: 'Freeze'(Actor.cs:1065) 제거. 프리팹 수정 0.
루트 스케일 1.05266 · 몸 높이 1.21651 m 는 제거 전후 델타 0 실측.
- Main Camera 를 Demo.unity 실측값으로 이식: 직교 size 10 · euler(30,60,0)
· near 0.3 / far 500 · clear Skybox · depth -1 · HDR/MSAA on
+ UniversalAdditionalCameraData(post off · AA none · rendererIndex -1).
- 씬 라이트 3개에 UniversalAdditionalLightData 추가(데모와 동일 구성).
- Terrain.drawTreesAndFoliage false→true(데모와 동일).
- ArenaWalker.cs(신규 · 씬 전용): WASD 이동 + 방향 회전 + idle/run 상태 재생
+ 카메라 추적 + Terrain.SampleHeight 접지. 속도 3.9 / 회전 300 은
LH_M05.prefab NavMeshAgent 실측값.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 새 씬 Assets/WL/Look/Arena/Scenes/WL_ArenaProto.unity (기존 씬·빌드 씬 목록 수정 0)
- 바닥 = Unity Terrain 80x12x80 + Demo_Grass/Demo_Dirt 레이어 + Demo Terrain.mat(ToonTerrain) — 데모 실측 방식 그대로
- 경계 = 반경 14 m 에 Stone_1/2 + Tree + Arch_Large/Small · 연못 Water_Plane · 배경 Windmill/House
- 캐릭터 LH_M05 중앙(스케일 1.05266 = f_Scale 0.7 x 보정 1.5038) · 프리팹 수정 0
- 조명/ambient/fog/스카이박스 = 데모 실측값 그대로
- 머티리얼 14종(+Terrain.mat) · 삼각형 29,875 (목표 15종/5만 이내)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PD 결정 「1. 바꿔. 2. 붉은 기사 M05로 해」 · 조사서 §C① ⓒ안.
- 새 프리팹 Assets/Res_Addr/PC/LH_M05.prefab — M05 모델 + Ai01 컴포넌트 구성 이식
(WizardActor·NavMeshAgent·Rigidbody·CapsuleCollider·SkinnedMeshAfterImage · Layer 3 · rootMotion 0)
무기 소켓 7/7 을 Ai01 과 **같은 본 경로**에 같은 로컬 TRS 로 재생성 → ClassConfig 무기 인덱스 무변경
Animator 아바타 = M05 자신의 Humanoid → 기존 pcanim_* 12개 + 이벤트 250개가 그대로 리타깃
- 되돌리기 스위치 WLCharacterSwapSettings(SO) — enabled/pcPrefabName/verboseLog · off 면 원본 100 %
- 크기 보정 WLPcScaleCompensator — 원 높이 1.1316 × 1.5038 = 1.7017 m(= Ai01)
→ 인게임 1.1912 m · 로비 1.7017 m 로 Ai01 과 동일. **테이블 ClassConfig 수정 0**
(f_Scale 을 고치면 스위치를 껐을 때 Ai01 이 1.79 m 가 되어 되돌리기가 깨진다)
- CapsuleCollider 는 루트 스케일을 받으므로 로컬 값을 1.5038 로 나눠 월드 크기를 Ai01 과 동일하게
- 원본 수정 = PCInfo.cs 1줄(상한) · Addressables 0 · Assets/Suriyun/** 수정 0(참조만)
실측: 머리:키 5.49 → 2.55 · 도트A 머리 픽셀 7.6 → 16.5 px (+115.5 %)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assets/Suriyun/Scripts/MouseOrbitImproved.cs 와 기존
Assets/ResWork/Suriyun/Scripts/MouseOrbitImproved.cs 가 둘 다 전역 네임스페이스의
같은 클래스라 중복 정의로 프로젝트 전체가 컴파일되지 않았다(58cc4f663 소행).
둘 다 우리 게임 씬/맵에서는 쓰이지 않는 벤더 데모용 궤도 카메라라,
이번에 들어온 쪽만 지워 임포트 전 상태로 되돌린다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PD 「해상도만 저하된 느낌」 실측 진단:
캐릭터가 차지하는 픽셀이 84/62/47 px 로 도트 게임(16~48 px)보다 촘촘했다.
ortho 는 유지하고 픽셀 높이만 낮춰 42/31/23 px 로 맞춘다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PixelCameraManager.viewCamera/upscaledCanvas 는 [SerializeField] 가 아니라
프리팹에 저장되지 않아 인스턴스마다 항상 null → Initialize() 가 항상
FindAnyObjectByType 로 찾는다. Object.Destroy 는 프레임 끝 처리이므로
모드 전환(Teardown→Assemble 동일 프레임)에서 새 매니저가 아직 살아 있는
이전 리그의 뷰 카메라를 잡았고, 프레임 끝에 그것이 파괴되며
CanvasViewCamera.get_Aspect 에서 매 프레임 예외가 났다(PD 실측 200건).
FindAnyObjectByType 는 비활성 오브젝트를 제외하므로 파괴 전에 SetActive(false).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PD 실측: [카메라] 모드를 바꾸면 UpscaledCanvas.SetCanvasRenderTexture 에서
'Material has been destroyed' 예외가 매 프레임(콘솔 978건).
원인 = Object.Destroy 가 프레임 끝 처리라, 머티리얼 인스턴스를 지운 뒤에도
같은 프레임에 PixelCameraManager.LateUpdate 가 돌아 targetTexture==null 을 보고
RT 를 새로 만들고 이미 지운 머티리얼에 SetTexture 했다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
몹 처치마다 MobActor.Set_Die()(MobActor.cs:444)에서 NullReferenceException 이 났다.
원인 = 프리팹 저장 상태가 비활성인 IngameUIs 가지 아래의 MonsterSimpleInfo 를
스테이지 진입 때 SetActive(false) 해 버려서, 가지가 켜져도 그 노드만 꺼진 채 남아
Awake 가 영영 안 돌고 MonoBehaviourSingletonTemplate.Ins 가 null 로 남은 것.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Assets/WL/Combat/Stage/Barrier/ 신규 3파일 + Resources SO
- 워프백 = 813w3/813t2 와 같은 원본 Actor.Set_Warp · NavMesh 스냅 · 카메라 리드 스냅
- 보이기 3스타일: ⓐ Hovl Marker 3 Zone Loop 스케일 ⓑ 울타리·바위 프롭 링 ⓒ 불꽃 링(총량 상한)
- 캡처는 다음 커밋
- ResetForProbe 가 「스왑할 것 없음」 캐시를 안 비워 다음 ApplyNow 가 전부 건너뛰던 문제
- 물 스왑을 맵 스윕보다 먼저 — 맵 스윕이 물 렌더러를 캐시에 넣어 물이 안 바뀌던 문제
- 프로브 H(ApplyNow/RestoreNow 왕복) 추가 → RESULT PASS 46/46
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- 실측: Toon 셰이더에 _CLOUDSENABLED 키워드는 없다(구버전 잔재) → 구름 on/off 는 _Cloud_Strength
- 지면 판정에 평평함·면적비 추가(나무 수관·배경 산 제외) · 잔디 높이를 m 단위 SO 로
- 캐릭터 외곽선 기본 off(스킨드 메시는 270px 에서 노이즈) · SO characterOutlines
- 캡처 6장(270×480 → 1080×1920 Point 확대 · 직교) · 프로브 PASS 38/38
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- TerrainGuard(신규 · 폴링 · 원본 훅 0): PC/몹/보스가 NavMesh 밖 또는 y > maxWalkableY 에
dwell(1 s) 넘게 있으면 원본 Actor.Set_Warp 으로 가장 가까운 walkable 지점 복귀(쿨 3 s · 카메라 리드 스냅)
- SpawnPositionGuard(같은 파일): 새로 나타난 몹의 스폰 지점 검증 → 재표집 3회 → 스포너 노드 폴백
- WLTerrainGuardSettings(SO · 값 22개 전부 에셋 · C8 롤백 enabled=0)
- 프로브 PASS: 언덕 격자 1000점 walkable 0 · FindGround 5/5 · 스폰 200점 언덕 위 0 · C8 6행 · GC 0 B
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
D-41: table_selectskill 58행 전수 실측 — 참조 프리팹/이펙트 키가 없는 3행
(3 Select_Shield · 11 Select_SwordSlash · 14 Select_Star)을 뽑기에서 제외.
원본 Get_DataList(3) 은 그대로 쓰고 결과만 후필터(원본 수정 0줄) · 값 전부 SO.
D-42: WLErrorGuardSettings.suppressUntilNextRunStart(기본 1) — RunPhase.Ended
(결과창~다음 런 시작)까지 훅을 내린 채 둔다. 813x2 파일 +7/-1줄.
D-26 「계기는 맞고 화면은 틀리다」 실측 원인 = Fill Image 에 스프라이트가 없다.
BossHpBar.cs:499 가 AddComponent<Image>() 만 하고 sprite 를 안 물려 저장돼,
uGUI Image.OnPopulateMesh 가 activeSprite==null 에서 Graphic.OnPopulateMesh(사각형 전체)로
빠져 type=Filled/fillAmount 를 아예 읽지 않았다 → 계기 0.368 · 화면 만피.
- EnsureFillRenderable(): 바가 켜질 때마다 sprite + Filled/Horizontal/Left 강제(값 전부 SO)
- WhiteSprite: 내장 흰 텍스처 기반 공유 스프라이트 1개(HideAndDontSave · 프레임당 할당 0)
- DedupInstances(): 같은 캔버스에 바가 2벌 이상이면 첫 1개만 남긴다
- bossBarHideOnZeroHp: HP 0 이면 사망 판정 전에도 숨김 예약(합성·실액터 경로 동일)
- 프로브 PASS 21/FAIL 0 — 메쉬 폭비 실측 수리 전 1.000 → 수리 후 0.368 · HP 869/1800 → 0.483
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
자동전투 중 메인 PC HP 가 autoPotionHpRatio(SO · 0.35) 이하면 813i PotionUse.TryUse 로 물약을 자동 사용한다.
근거 = Q5 D-21(4분 런당 사망 3회 · 결과 화면 「사망 / 물약 = 3 / 0」 = 물약 미사용) + 813x(자동전투 기본 ON · eCommon.Auto · PCActor.cs:185) + 813i(PotionUse 공개 API) + 813y(PotionButton provider 연결).
- Assets/WL/Combat/Survival/AutoPotion.cs (신규) — 원본 훅 0 · UI 파일 0 · 폴링만
· 잔량/쿨은 PotionUse.IsReady 로 먼저 걸러 거절 이벤트·GC 0
· 자동전투 OFF(수동 전투) · 사망/부활 중 · PC 없음이면 무동작
- Survival.cs — SurvivalRunner.Update 에 AutoPotion.Tick 1줄(PotionUse.Tick 뒤)
- WLSurvivalSettings.cs/.asset — 값 5개 전부 SO(autoPotionEnabled/HpRatio/RequireAutoCombat/CheckSeconds/Log)
- C8 롤백 = autoPotionEnabled 1 → 0 (코드 무수정)
게이트 PASS · 프로브 AgentScripts/WL813m2_Probe.cs RESULT PASS(10절)
Q5 §4 실측(존 Arrived=0 · 아레나 이탈 46.3 m · 되돌림 3~4 vs 리셋 15~19)의 원인은
RunGuide.Poll 이 피격 중단에서 통째로 return 한 것(구 RunGuide.cs:291) — 그 return 이
도착 판정(구 :303)과 이탈 되돌림(구 :327) 위에 있었다.
- D-24: 도착 판정·이탈 되돌림을 피격과 무관하게 매 폴링 실행 + 정지 판정(0.5 s · 0.3 m/s) 도착
- D-22: 되돌림 즉시 · 되돌림 중 타깃 해제 · 보스 재타깃은 Hold 에서만(락은 상시 유지)
- D-19: 존 반경(18 m) 이탈 즉시 복귀 · guideLeashRadius 12 → 14
- §1-4: WLBossArenaSettings.leashHealPercent 0.15 → 0.05 (쿨 10 s 유지)
- RunTick 로그(존 체류·이동 초·최대 이탈) · 신규 SO 9필드 · C8 스위치 4개
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
MonsterAppear.json 에 엘리트 스포너 새 행 4개(813021~813024) 추가 — 기존 52행 바이트 무변경
(813u 가 같은 파일의 존 행을 고치므로 「기존 행 값 수정 0」 · 단일 라인 JSON 이라 rebase 에서
전체 충돌 1회 → main(813u) 값을 기준으로 새 행만 재부착). 존1~4 에 Elite 1종씩 ·
동시 1마리 · 리젠 25 s.
🔴 HP 는 발주서 제안값(120~180 · Q3 보스 단일표적 DPS 15/s 기준)이 아니라 **470/540/610/680**
이다. 발주 시점 뒤에 813u 가 존 잡몹 HP 를 300/450/600/800 → 190/270/350/430 으로 내려서,
120~180 이면 엘리트가 같은 존 잡몹보다 약해진다. 813u 실측 존 총 DPS 171.8 HP/s 를
기준서 §E 3-2 규격(1발 명중 ≥3마리)으로 나눈 단일 표적 57.3 HP/s 기준 → 8.2/9.4/10.6/11.9 s
= 기준서 「엘리트 8~12 s」. 잡몹 대비 2.47/2.00/1.74/1.58배. ATK 는 813u 존 값과 동률
(6/8/10/12 · Q4-a D-1 사망 이슈 · ATK 밸런스는 813u 소유).
WL_Nature.prefab: maplv/e1~e4 스포너 노드 4기 신규(존 스포너와 같은 좌표 · MobGenRange 6 ·
Lv 라벨 렌더러 끔) — 기존 노드·좌표 무변경(+924 / −0).
EliteMarker.cs(신규 · 정적 · 러너 0 · GC 0): Spawned(isElite) → localScale = 테이블 기본
스케일 × 1.3(멱등 · NavMesh 반경 무변경) + 상시 색 등록, Killed(Elite) → 색 해제 + 처치
시간(TTK) 로그. 아웃라인은 QuickOutline 이 프로젝트에 없고 MK Toon 의 _RimColor 가
_MK_RIM_* shader_feature 게이팅이라 MPB 로 못 켠다 → 발주서 대체안대로 MPB 상시 색
(_EmissionColor 주 · _AlbedoColor 보조 · 새 셰이더/머티리얼 0). MobHitFlash 가 렌더러 MPB 의
단일 소유자라 합성 지점(SetEliteTint/ClearEliteTint)만 그 파일에 더했다(우선순위 = 점멸 > 상시).
킬캠(811d)·임팩트 티어(811gh)는 이미 Elite 분기가 열려 있어 코드 0(killCamOnElite=1 ·
bossKillIncludesElite=1 실측). 드랍은 WLLootSettings.asset 값만 eliteBurst 1~2 → 2~3.
검증: 게이트 PASS(oneshot · error CS 0줄) · 프로브 AgentScripts/WL813s_Probe.cs
(새 행 4/4 · 스포너 노드 4/4 · 크기 2.30→2.99 멱등 · 상시 색 O · 일반 몹 미적용 ·
킬캠 Elite 1 / 일반 0 · 드랍 버스트 2~3 · 0건 0회 · GC 0 B · C8 PASS · 원본 문자열 0).
Play 실측(인게임 화면)은 미확인 — 로그인 금지라 병합 후 QA. xlsm 동기화 안 함(백로그).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
근거 = QA Q3 qa/W2-3_바퀴2.md D-1·D-2 · Q2 qa/W2-2_스모크.md D-4
D-1/D-4 (에러 팝업) 원인 사슬 — 실측
Boss_Anubis.cs:114 Co_Skill2 → :140 JumpToPosition(onNavMesh:false)
→ Actor.cs:1867 Co_JumpToPosition 이 점프 동안 에이전트를 끄고 착지 보정은
Snap_toNavMesh(맵 mobNavSnapRadius = 2 m)뿐 → 2 m 초과 이탈 시 NavMesh 밖으로 남음
→ 다음 Co_Skill2 의 Change_MobStatus(eMobStatus.Skill) = MobActor.cs:339 이
가드 없이 isStopped=false(Resume) 대입 → 예외
→ Util/ErrorLogHookManager.cs:26-35 가 모든 Error 를 플레이어 모달 팝업으로 표시
변경
· MobActor.cs:339 — 원본 1줄(≤2줄 예외 · 보고). 같은 switch :304·:309 및
StopMove_Imm(Actor.cs:2149)과 동일한 isOnNavMesh 가드. 예외만 차단.
· Assets/WL/Combat/Nav/MobNavRecovery.cs (신규) — 가드만으로는 보스가 NavMesh 밖에
굳는 상태가 남는다. 에이전트 off/NavMesh 밖이 유예(1.5 s) 넘게 지속되면
Set_Warp 으로 가장 가까운 NavMesh 위로 복구. 원본 훅 0 · 폴링.
· Assets/WL/Combat/Auto/AutoCombatOnEnter.cs (신규) — D-2. 맵(런) 진입 경계에서
자동전투가 꺼져 있으면 Actor.Set_Auto() 1회. 로비 제외 · 진입 뒤 수동 OFF 는 존중.
전투 패드 아이콘(BattleUI.images[0])만 동기화(UI 파일 수정 0).
· WLCombatCoreSettings(.cs/.asset) — 값 10개 전부 SO(C45). 각 플래그 0 = 롤백(C8).
코어 스위치에는 의존하지 않는다(코어 A/B 중에도 팝업이 되살아나면 안 됨).
· AgentScripts/WL813x_Probe.cs — 에디트 모드 검증 프로브(Play 0 · 로그인 0)
Core 수정 0 · Boss_*.cs 수정 0 · Actor.cs 수정 0 · UI 파일 수정 0
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
기준서 v1 §E 채점표 24항목과 1:1 인 표를 실측으로 채우는 프로브와,
세로 1080x1920 캡처 5장 세트 + 엄지 반경 오버레이를 추가한다.
- Assets/WL/Tools/WL813_ScoreProbe.cs (NEW · 에디터/개발빌드 전용)
절두체 내 몹 수(1 s 샘플 중앙값) · Killed 간격 · Spawned 버스트 ·
히트 반응 3종 동프레임 · 시체 잔존 실측 · timeScale 감속/복원 실패 ·
스킬 명중비 · fps/히치 · 드랍→획득 시간 · 레벨업 · 보스 페이즈/예고 ·
킬캠 · PC 피격/사망 · GC 증가 → score_<HHmmss>.txt 표 + 원시 지표.
코어 이벤트 구독만 하는 읽기 전용 · isKill 정합(QA D-1) 대조 포함.
- Assets/WL/Tools/WL813_ShotOverlay.cs (NEW · 에디터/개발빌드 전용)
title/hud/combat/boss/popup 5장 자동 저장 + 인게임 슬롯은 반경
오버레이 1장 추가. 오버레이는 캡처 직후 제거(HideFlags.DontSave).
- AgentScripts/WL813_Score.cs · WL813_Shots.cs (NEW · run_script 진입점)
게임 코드·에셋 수정 0 · CLI 명령 추가 0(wl_info 등은 802c 소관).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
존 전멸 → 보스 등장 게이트 · 아레나 경계 · 추적 반경 데이터화 · 처치 후 정리.
- BossArena.cs (NEW) — CombatEvents.Killed/Spawned 구독으로 813e 존 5개(813001~813005)의
생존/처치를 세고, 게이트 존(813004·813005) 전멸 또는 누적 처치 >= 54 면 보스를 등장시킨다.
- 원본 스포너 무수정 — FieldBossData.Start 훅 1줄이 자기 자신을 Action 으로 넘기고,
게이트가 열릴 때 그 델리게이트를 다시 부른다. 스폰 로직 복제 0 이고 On_Regen 을 원본이
부르므로 Spawned(isBoss) 가 등장 시점에 난다(811d 보스 캠 · 813c HP 바 · 813t 배너 구독).
- 아레나 — 등장 직전에 MonsterList 10006 행 f_BaseChaseRange 50 → 20(SO 값 · 코드 상수 0),
보스/PC 가 아레나를 벗어나면 복귀(리셋) · 처치 후 RegenTime 코루틴 차단(리젠 없음).
- 값 = Assets/WL/Combat/Settings/Resources/WL/WLBossArenaSettings.asset (C8 · 29필드).
- Boss_*.cs / MobActor.cs / Actor.cs / Combat Core / 프리팹 변경 0.
리뷰 reviews/WL-811def.md 의 Major 3 · Minor 5 반영. Assets/Script/** 0줄 · Core 0 · RealCamera.cs 0(공개 필드/메서드만).
FIX-1 보스 킬캠 포기: 처치 스택 뒷부분(MobActor.Set_Die → MonsterSimpleInfo.DeadTarget → Off → Set_LockTarget(null)
→ RealCamera.Init_Cam)이 궤도 3필드를 덮어써 ZoomStillOurs() 가 항상 false 였다. Phase.Pending 을 추가해 킬캠 시작을
다음 프레임으로 미루고 그때 base 를 재취득한다(KillCamRebased 로 계측). 엘리트/일반은 Set_LockTarget 경로가 없어 회귀 0.
FIX-2 arr_cCamData[1] 영구 덮어쓰기: 원값 스냅샷 → 보스 처치(OnKilled)·사라짐/비활성(TickBossPreset)·씬 전환·SO off·
ReleaseAll 에 복원(BossPresetRestored/Abandoned). 프리셋 적용을 busy 스킵 검사 뒤로 옮겨 스킵된 스폰은 프리셋도 안 쓴다.
FIX-3 Set_Target 누적: 보스 리타겟을 공개 필드 target 직접 대입으로 바꿔 list_tfCamactionTarget 길이 불변(기존 대상이
있을 때만 리타겟 = isTarget 유효). 완전 정합용 Set_Target 오버로드는 811n 요청 대상.
Minor: MobHitFlash.OnKilled 에 WLReactionRunner.Ensure() · DamageAggregator 재진입 가드(Harvest/Dispatch 분리 +
s_dispatching 백업·복원 · ReentrantHits) · SO 폴백 상수 제거(KillChain/DamageAggregator Tick) · BestChainEver 중복 갱신
1곳으로 · s_burstHeld↔EffectBudget 불변식 주석 + 홀드 만료 시 선반납 · 킬캠 쿨/런 카운터 소모 의도 주석.
프로브: WL811def_Probe.FixCheck 추가(FIX-1 Init_Cam 덮어쓰기 뒤 줌 유지 · FIX-2 프리셋 원복/busy 순서 · FIX-3 리스트 길이 불변).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>