13 KiB
13 KiB
FirstRising 2026-09-23 — 위젯 공격 불가 수정 · 하단 HUD 신설 (BT18)
PD 지시 (요지)
- 위젯 모드 공격 불가 버그 수정 + §4 기술 부채 정리 → A안 승인
- 위젯·최대화·기본 창 세 모드에 첨부 형태의 HUD 추가, ComfyUI 로 디아블로풍 UI 생성
- 표현만 우선, 기능 연결은 다음 단계
- 좌 가고일 / 우 천사 석상 배경 + 상단 레벨·경험치 바, 석상과 바는 따로 그려 합칠 것
- 단축키 표시 제외 · 패시브 아이콘 제외 · HP 와 가방 강조 · 우측 구체 자리는 가방
- 레퍼런스 스크린샷 기준으로 구조를 맞출 것. 질감·입체감 과하지 않게, 형체 특징 위주
- 목표 도달까지 중단 없이 자율 폴리싱, 완성 판단 시 푸시
결정
- 아트 경로: 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건 수리
- 배율 컴포넌트가 대상 주입 전
OnEnable을 지나 배율 1.0 고정 →Bind()추가 - 소켓 그림에 불투명 바닥이 있어 HP 액체를 덮음 → 가운데를 비운 링으로 재렌더
- 같은 부모 안에서 형제 순서가 그리는 순서라 소켓이 가방 아이콘을 덮음 →
sortOrder정렬 추가
- 배율 컴포넌트가 대상 주입 전
Lobby.unity의 프리팹 오버라이드가 프리팹 값을 덮고 있던 것 확인 → 프리팹·씬 양쪽에 동일 수치 반영- 컴파일
failed:false errors:[], 실기동 캡처로 확인
남은 이슈
- 기능 연결(HP·경험치·레벨·포션 수량) 미착수 — 다음 단계
- 게임 뷰 렌더 해상도를 평가용으로 바꿨다가 1280×720 으로 원복함
- 커밋하지 않음(PD 지시 전까지) — 작업 트리에 둠
BT18 · HUD 3차 — 위젯 표시 규칙 반전 · 간격 · 아이콘 · 카메라 포커스
PD 지시
- 최하단 UI(주요 메뉴)는 최소화 모드(배경 투명)에서 숨김, 이번에 추가한 HUD 는 보임 (기존 구현과 반대)
- 최하단 UI 와 HP·스킬 아이콘 영역 간격이 너무 멀다
- 성장 메뉴가 보이는 상태에서 플레이어 포커싱이 중앙이 되도록
- 아이콘 크기가 프레임과 너무 차이나지 않게
결과(실측)
TVBottomMenu가 위젯 이벤트를 구독해 숨고,TVHudBar·TVSkillBar는 위젯 상태를 보지 않는다 → 실측isWidget=True에서TV_HudBar=보임 TV_SkillBar=보임 TV_BottomMenu=숨김- 띠 중심 380 → 300, 메뉴 높이 230 → 175 (구슬 아래 180 · 메뉴 위 175 = 간격 5)
- 신규
TVCameraFocus.cs— 뷰포트가 줄면 카메라offset을 고쳐 플레이어를 "HUD 에 안 가리는 영역"의 한가운데로 보낸다 → 실측 성장 페이지 열림 h=658 에서vpY=0.738 = 목표 0.738, offset 0.00 → -4.12, 닫으면 0.00 으로 복귀 → 크기 변경 뒤 1.2초만 수렴 계산(평소 프레임 비용 없음) iconFillRatio신설 0.80, 스킬iconScale0.80 / 가방 0.82, 확대 버튼에도 같은 테두리 추가
주의
Lobby.unity의 프리팹 오버라이드가 프리팹 값을 덮는다 — 수치 변경은 프리팹·씬 양쪽에 함께 넣어야 한다
BT18 · HUD 4차 — 하단 여백 · 정중앙 포커싱
PD 지시
- 스킬 UI 아래 버튼 때문에 하단 메뉴와 여백이 넓다 → 레퍼런스처럼 버튼 위치 정리
- 상단에 UI 가 있는 메뉴에서 캐릭터가 정확히 게임 화면 중앙에 오도록
결과(실측)
- 스킬 칸 아래 줄을 없앴다 — 포탈·자동을 상단 한 줄로 올림
상단 줄(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)
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
TVPlayerAttackRangeholdFireWithoutTarget기본값 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·ViewportLayoutController1줄 - 일부러 뺀 것(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
- 되돌림: Packages(postprocessing) · ProjectSettings define · gradle 로컬 repo 경로 · 폰트 SDF 2종
· PPv2 는 코드 의존 없음 확인(문자열 비교 +
콘솔 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 노드에만 붙인다
- 자잘한 결함은 묻지 말고 바로 고친다
- 작업이 끝나기 전에 턴을 끝내지 않는다 · 승인이 필요하면 질문으로 끝낸다