BurningTimesAi/공유/대화로그/FirstRising/2026-09-23.md

176 lines
13 KiB
Markdown
Raw Permalink 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.

# FirstRising 2026-09-23 — 위젯 공격 불가 수정 · 하단 HUD 신설 (BT18)
## PD 지시 (요지)
1. 위젯 모드 공격 불가 버그 수정 + §4 기술 부채 정리 → **A안 승인**
2. 위젯·최대화·기본 창 세 모드에 첨부 형태의 HUD 추가, **ComfyUI 로 디아블로풍 UI 생성**
3. 표현만 우선, 기능 연결은 다음 단계
4. 좌 가고일 / 우 천사 석상 배경 + 상단 레벨·경험치 바, 석상과 바는 **따로 그려 합칠 것**
5. 단축키 표시 제외 · 패시브 아이콘 제외 · HP 와 가방 강조 · 우측 구체 자리는 **가방**
6. 레퍼런스 스크린샷 기준으로 구조를 맞출 것. 질감·입체감 과하지 않게, 형체 특징 위주
7. **목표 도달까지 중단 없이 자율 폴리싱**, 완성 판단 시 푸시
## 결정
- 아트 경로: **SD1.5(difconsistency) + Diablo4 LoRA + GameItemUI LoRA + ControlNet(canny)**, 배경 제거는 **Inspyrenet**
- 구조: 장식 없는 석재 띠 + 좌·우 부조 + 9-slice(좌150·우150·상하50) → 창 크기 무관 동일 구도
- 프레임·아이콘은 Layer Lab 유지, 생성물은 띠·부조·오브 링·경험치 바에만
## 결과
- 커밋 `ba4c782013` → **origin/bt/work 푸시 완료**(미푸시였던 병합 2건 `c452c9aae4`·`20640c4f15` 함께 반영)
- `TVHudBar` 신설(표현 전용·`Update` 없음), `TVSkillBar` 사각 슬롯·가방 재배치
- 결함 7건 동시 수정 — 위젯 공격 불가 / 데미지 숫자 위치 / TV 3종 NRE / ComposePopup NRE / 싱글턴 중복 / 공용 머티리얼 오염 / TVSpawnFilter 제거
- 컴파일 `failed:false errors:[]`, 실기동 캡처로 배치 확인
## 남은 이슈
- **기능 연결 미착수** — HP·경험치·레벨·포션 수량은 고정 표현값. 다음 단계
- **위젯 자동 이동·자동 전투** 신규 안건(PD 분류) — 미착수
- §4 기술 부채 2·3단계(`Find`/`GetComponentsInChildren` 캐싱, 역할 분리) 미착수
- 미커밋 잔여: `CLAUDE.md`·`Docs/*`·`README_위젯모드.md`(문서 3층 정비), `TVLobbySetup.cs`·`Lobby.unity`(이전 세션분), `ProjectSettings`·`Packages`(유니티 자동)
- ComfyUI `RMBG-2.0` 모델 로딩 실패(BiRefNet 원격 코드 이슈) — Inspyrenet 으로 우회 중
---
# BT18 · HUD 2차 — Blender 절차 생성으로 아트 교체 + 위젯 영역 기준 배치
## PD 지시(원문 요지)
- "i2i / 블렌더 3D / ComfyUI 어떤 방법이든 좋으니 목표 퀄리티에 도달할 때까지 R&D 지속"
- "블렌더 설치했으니 이걸로 UI 형태를 만들어 활용하는 방법도 고려해봐"
- "깃털은 단순히 UI 디자인적인 부분이라 없어도 상관 없어. **컨셉에 맞는 퀄리티가 가장 중요**"
- "스킬 아이콘과 나머지 아이콘 배치가 누락된 것 같아"
- "스킬 아이콘도·하단 주요 메뉴도 **위젯 화면 UI 영역 내**에 배치. 전체 화면 기준이 아니라 **항상 위젯 화면 영역이 기준**"
## 결정
- 아트 생성 경로를 **ComfyUI → Blender 절차 모델링**으로 전환. 크기·알파·색을 수치로 통제할 수 있어 반복이 빠르다
(`bl_hud.py` 한 파일에 모드별 빌더: `demon`/`angel`/`expbar`/`level`/`slot`/`round`)
- 좌 가고일 = 박쥐 막날개, 우 천사 = 깃 부채꼴 — 같은 소켓에 날개만 바꿔 좌우를 구분
- 구슬 안쪽은 **바닥·액체·광택 3겹**(PIL 생성). 평면 원 한 장으로는 유리구슬로 안 읽힘
- 기준 사각형 = `CenterHolder`(위젯 영역). `TVViewportScaler`/`TVViewportHost` 신설로 HUD·스킬바·하단메뉴가 모두 그 안에서 1080 기준 좌표를 쓴다
## 결과(실측 확인)
- 신규 리소스 9종: `BT_HudOrbLeft/Right`, `BT_HudOrbCavity/Liquid/Gloss`, `BT_HudExpFrame`, `BT_HudLevelPlate`, `BT_HudSlotFrame`, `BT_HudRoundFrame`
- 신규 스크립트 `TVViewportScaler.cs`(+`TVViewportHost`) — `UIBehaviour.OnRectTransformDimensionsChange` 기반, `Update` 없음
- `ViewportLayoutController`에 `holderParent` 공개 프로퍼티 추가(원본 코드 · 날짜 주석)
- 버그 3건 수리
1. 배율 컴포넌트가 대상 주입 전 `OnEnable`을 지나 배율 1.0 고정 → `Bind()` 추가
2. 소켓 그림에 불투명 바닥이 있어 HP 액체를 덮음 → 가운데를 비운 링으로 재렌더
3. 같은 부모 안에서 형제 순서가 그리는 순서라 소켓이 가방 아이콘을 덮음 → `sortOrder` 정렬 추가
- `Lobby.unity`의 프리팹 오버라이드가 프리팹 값을 덮고 있던 것 확인 → 프리팹·씬 양쪽에 동일 수치 반영
- 컴파일 `failed:false errors:[]`, 실기동 캡처로 확인
## 남은 이슈
- 기능 연결(HP·경험치·레벨·포션 수량) 미착수 — 다음 단계
- 게임 뷰 렌더 해상도를 평가용으로 바꿨다가 1280×720 으로 원복함
- 커밋하지 않음(PD 지시 전까지) — 작업 트리에 둠
## BT18 · HUD 3차 — 위젯 표시 규칙 반전 · 간격 · 아이콘 · 카메라 포커스
### PD 지시
1. 최하단 UI(주요 메뉴)는 **최소화 모드(배경 투명)에서 숨김**, 이번에 추가한 HUD 는 **보임** (기존 구현과 반대)
2. 최하단 UI 와 HP·스킬 아이콘 영역 간격이 너무 멀다
3. 성장 메뉴가 보이는 상태에서 **플레이어 포커싱이 중앙**이 되도록
4. 아이콘 크기가 프레임과 너무 차이나지 않게
### 결과(실측)
1. `TVBottomMenu` 가 위젯 이벤트를 구독해 숨고, `TVHudBar`·`TVSkillBar` 는 위젯 상태를 보지 않는다
→ 실측 `isWidget=True` 에서 `TV_HudBar=보임 TV_SkillBar=보임 TV_BottomMenu=숨김`
2. 띠 중심 380 → **300**, 메뉴 높이 230 → **175** (구슬 아래 180 · 메뉴 위 175 = 간격 5)
3. 신규 `TVCameraFocus.cs` — 뷰포트가 줄면 카메라 `offset` 을 고쳐 플레이어를 "HUD 에 안 가리는 영역"의 한가운데로 보낸다
→ 실측 성장 페이지 열림 h=658 에서 `vpY=0.738 = 목표 0.738`, offset 0.00 → -4.12, 닫으면 **0.00 으로 복귀**
→ 크기 변경 뒤 1.2초만 수렴 계산(평소 프레임 비용 없음)
4. `iconFillRatio` 신설 0.80, 스킬 `iconScale` 0.80 / 가방 0.82, 확대 버튼에도 같은 테두리 추가
### 주의
- `Lobby.unity` 의 **프리팹 오버라이드가 프리팹 값을 덮는다** — 수치 변경은 프리팹·씬 양쪽에 함께 넣어야 한다
## BT18 · HUD 4차 — 하단 여백 · 정중앙 포커싱
### PD 지시
1. 스킬 UI 아래 버튼 때문에 하단 메뉴와 여백이 넓다 → 레퍼런스처럼 버튼 위치 정리
2. 상단에 UI 가 있는 메뉴에서 캐릭터가 **정확히 게임 화면 중앙**에 오도록
### 결과(실측)
1. 스킬 칸 아래 줄을 없앴다 — 포탈·자동을 상단 한 줄로 올림
상단 줄(y=438): 포탈(-452) · 포션(-370) · 레벨(-268) · 경험치 바(40, 400×50) · 자동(295) · 회피(374) · 확대(452)
띠 중심 300 → **288**, 메뉴 높이 175 → **160** → 구슬 아래끝 168 · 메뉴 위끝 160 = 여백 8
- 발견·수리: 자동 버튼이 6번 스킬 칸과 겹쳐 있었다(실측 Skill6 150~220 · Auto 185~219)
2. `TVCameraFocus.hudCoverBottom` 기본값 0 → 목표가 화면 정중앙이 된다
→ 실측 성장 페이지 열림 h=658 에서 **vpY = 0.500**, 닫으면 원래 offset 으로 복귀
## BT18 · HUD 5차 — 레퍼런스 배치로 묶기
### PD 지시
- 레벨·경험치 바를 스킬 UI 바로 위에 얹을 것
- 자동은 생명 구슬 우측 하단 여백, 회피는 가방 좌측 하단 여백
- 나머지 버튼도 생명·가방 구슬에서 멀어지지 않게
### 결과
- 경험치 바 (30, 348) 330×46 · 레벨 (-196, 348) 72 → 스킬 칸 위끝 323 바로 위(간격 2)
- 자동 (-250, 224) · 회피 (250, 224) — 구슬 아래쪽 여백 줄, 크기 맞춤(자동 53 · 회피 56)
- 포션 (-380, 424) 생명 구슬 바로 위 · 포탈 (380, 424) 가방 바로 위 · 확대 (474, 424)
- 6차: 포션 (-268, 350) 생명 구슬 우측 상단↔스킬 사이 · 포탈 (268, 350) 가방 좌측 상단↔스킬 사이 · 확대 (472, 404) 가방 우측 상단
레벨 (-170, 348) 66 · 경험치 바 (45, 348) 300×46 으로 좁혀 자리 확보
## BT18 · HUD 7차 + 자동 공격 억제 복원
### PD 지시
- 확대 버튼을 같은 높이로 내리고 조금 키울 것
- HP·스킬 UI 와 하단 메뉴 여백을 더 좁힐 것
- 위젯 모드에서 사거리 밖인데도 공격 동작을 반복한다 → 원형 체크 영역에 들어오기 전에는 자동 공격 금지
### 결과(실측)
- 띠 중심 288 → **256**, 메뉴 높이 160 → **140** → 구슬 아래끝 136 (메뉴 그라데이션 위끝 140 과 맞물림)
상단 줄 y=316 · 자동/회피 y=192 · 확대 (472, 316) 크기 52 → **62**
- `TVPlayerAttackRange`
- `holdFireWithoutTarget` 기본값 false → **true** (프리팹·씬 모두 반영)
- `HoldFire` 에서 위젯 모드 제외 조건 삭제 — 지금은 `UpdateSuppress` 가 매 프레임 `EnemyInRange` 로 덮어쓰고,
빠져나가는 모든 경로에서 풀어 주므로 위젯 모드에 걸어도 억제가 남지 않는다
- 위젯 전환 시 한 번 풀고 다음 Update 가 사거리에 맞춰 다시 건다
- 실측: 일반·위젯 모두 `Range=6.30 EnemyInRange=False suppress=True`
현재 씬 몬스터 36마리 전원 생존, **최근접 32.87** — 사거리 6.30 밖이라 공격이 멈추는 것이 정상 동작
## 푸시 (PD 지시)
- `d65f2317d3` → **origin/bt/work 푸시 완료** (이전 `ba4c782013` 위)
- 담은 것: TV 스크립트 6종(신규 TVViewportScaler·TVCameraFocus 포함) · Blender/PIL 아트 9종 ·
`LobbyPlayScene.prefab` · `Lobby.unity` · `ViewportLayoutController` 1줄
- **일부러 뺀 것**(HUD 와 무관한 환경 변경 — 정섭 님 환경을 건드리지 않으려고):
`Packages/manifest.json`·`packages-lock.json`(postprocessing·shadergraph 추가) ·
`ProjectSettings.asset`(define 순서) · `settingsTemplate.gradle`(로컬 repo 경로) ·
폰트 SDF 2종 · `CLAUDE.md` · `TVLobbySetup.cs` · `Docs/`·`output/`·`_Recovery/`
- 정리: 캡처용 `_shot.png` 삭제, 더 이상 쓰지 않는 `BT_HudOrbFill.png` 변경 되돌림
- 정리 커밋 `dbe0261d0b` 추가 푸시 — **작업 트리 완전 비움**(git status 깨끗)
- 되돌림: Packages(postprocessing) · ProjectSettings define · gradle 로컬 repo 경로 · 폰트 SDF 2종
· PPv2 는 코드 의존 없음 확인(문자열 비교 + `#if` 가드) → 되돌린 뒤 Resolve + 재컴파일 `errors:[]`
· 폰트 SDF = TMP 다이내믹 폰트가 Play 때마다 굽는 산출물(이전 세션 잔여가 아니었음 — 보고 정정)
- `.gitignore` 추가: `/output` · `/Assets/_Recovery`(+meta) · `/Assets/GeneratedLocalRepo.meta`
- 담음: `TVLobbySetup`(경로 통짜 → "묶음 아래 이름" 방식) · `Docs/` · `README_위젯모드.md` · `CLAUDE.md`
## 콘솔 NRE 8건 — 원인·수리 (PD 질의)
- 증상: `EntityQuery.CalculateEntityCount` 에서 NRE, 호출부 `TVRegisterRequestGuard.Merge:37`
- 원인: 질의를 `bool m_Ready` 로 한 번만 만들고 다시 만들지 않는다.
World 가 새로 만들어지면(플레이 재진입·씬 전환) 예전 질의는 껍데기라 내부에서 터진다. 해제도 없었다
- 수리: '한 번 만들었는지' → **'어느 World 의 질의인지'** 를 기억하고 바뀔 때만 다시 만든다
같은 형태 6종 일괄 — `TVRegisterRequestGuard`(+OnDestroy 해제) · `TVBossLights` · `TVTestCheats`
· `TVMonsterLocomotion` · `TVMonsterProxies` · `TVEntityBlobShadows`
(이번 세션 앞부분에 고친 `TVShadowCasterSanitizer`·`TVBossScale`·`TVXRayGate`·`TVPlayerAttackRange` 와 같은 방식)
- 확인: 콘솔 비우고 Play→Stop 한 바퀴 — **error 0건**(warn 42·log 58), 컴파일 `errors:[]`
- 커밋 `156b5dee1c` → origin/bt/work 푸시 완료
## master 반영 (PD 지시)
- `git push origin bt/work:master` — 작업 트리 전환 없이 원격만 fast-forward(유니티 재임포트 방지)
- `9009ebb5cc`(2026-09-19) → **`156b5dee1c`**, 35커밋 반영
- 확인: origin/master == origin/bt/work (차이 0) · TV 스크립트 4종 `.cs`+`.cs.meta` 모두 존재 ·
`LobbyPlayScene.prefab` 의 TVHudBar·TVCameraFocus 참조 정상
## BT18 · 인벤토리 패널 + 세션 공유
- PD 지시 "가방 버튼 → 우측 빈 영역에 인벤토리" · "기존 게임 UI 프리팹을 복사해서 사본으로"
- 원본 `Assets/UI/ItemBagPopUp.prefab` 무수정 · 사본 `Assets/BurningTimes/Visual/Prefabs/TV_ItemBagPopUp.prefab` 만 편집
- 신규 `TVInventoryPanel`(BT_Visual 부착) — 위젯 영역 오른쪽에 사본을 띄우고 배율만 맞춤
- 구성: 탭 3(가방/창고/짐꾼) · 정렬 · 134/150 · 제작(청)·판매(황동) · 칸 7×10=70 · 마지막 칸 확장(+)
- 고친 결함: 칸 배율 기준(발광140→슬롯100) · 빈칸 투명 · 델타 이동으로 인한 어긋남 → 앵커 고정 · panelWidth 덮어쓰기
- **커밋 `50a206aadc` → origin/bt/work · origin/master 동시 푸시** (미커밋 0건)
- **인수인계서: `공유/대화로그/FirstRising/2026-09-23_UI작업_인수인계.md`** (다음 세션 첫 프롬프트 포함)
### 새 작업 규칙(메모리 등재)
- 스크립트는 BT_Visual 노드에만 붙인다
- 자잘한 결함은 묻지 말고 바로 고친다
- 작업이 끝나기 전에 턴을 끝내지 않는다 · 승인이 필요하면 질문으로 끝낸다