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

13 KiB
Raw Permalink Blame History

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 노드에만 붙인다
  • 자잘한 결함은 묻지 말고 바로 고친다
  • 작업이 끝나기 전에 턴을 끝내지 않는다 · 승인이 필요하면 질문으로 끝낸다