BurningTimesAi/공유/대화로그/FirstRising/2026-09-23_UI작업_인수인계.md

6.8 KiB
Raw Permalink Blame History

FirstRising UI 작업 인수인계 (2026-09-23 · BT18)

다음 세션에서 UI 작업을 이어서 하기 위한 문서. 이 문서 하나만 읽으면 바로 이어갈 수 있게 적었다.


0. 지금 상태 한 줄

하단 HUD 와 인벤토리 패널의 배치까지 끝났고 기능 연결은 시작 전. 저장소는 origin/bt/work = origin/master = 50a206aadc, 미커밋 변경 0건.

1. 저장소 · 실행 환경

항목 값
프로젝트 C:\BurningTimes\FirstRising
브랜치 bt/work (master 와 동일 커밋)
최신 커밋 50a206aadc 인벤토리 패널
Unity 6000.3.9f1 · CLI 포트 7800
게임 뷰 1280×720 (평가할 때만 PlayModeWindow.SetCustomRenderingResolution(2160,3840) 로 키우고 끝나면 1280×720 으로 원복)

Play 진입 후 로비가 뜨기까지 90초 이상 걸린다. 캡처 보조 스크립트는 세션 스크래치패드의 shot.sh 참고(없으면 editor_stop → editor_play → 대기 → capture_game_view --source screen 순서).

2. 지켜야 할 규칙 (PD 지시)

  1. 스크립트는 Lobby/LobbyPlayScene/BT_Visual 노드에만 컴포넌트로 붙인다. 여기저기 만들지 않는다.
  2. 게임 원본 프리팹은 수정하지 않는다. 필요하면 우리 폴더로 복사해서 사본만 고친다.
  3. 자잘한 결함은 묻지 말고 바로 고친다. 승인이 필요하면 예고가 아니라 질문으로 끝낸다.
  4. 작업이 끝나기 전에 턴을 끝내지 않는다. "이어서 하겠습니다" 하고 멈추지 않는다.
  5. 커밋·푸시는 PD 지시가 있을 때만.
  6. 보고는 한국어·간결·경어, 호칭 PD님.

3. 함정 — 이것 때문에 시간을 많이 썼다

  • Lobby.unity 의 프리팹 오버라이드가 LobbyPlayScene.prefab 값을 덮는다. 수치를 바꾸면 프리팹과 씬 양쪽에 함께 넣어야 한다. 프리팹만 고치면 반영되지 않는다. (오버라이드가 걸려 있는 필드: bagSize bagCenterY bagRightMargin iconScale bagIconScale autoLabelSize rowCenterX slotReady slotCooldown 등)
  • 에디터 eval 은 메인 스레드 5초 제한. 프리팹·씬을 여는 작업은 반드시 --detach 로 돌리고 결과를 파일로 받는다.
  • eval 안에서 Object 는 모호하다. UnityEngine.Object.DestroyImmediate 처럼 풀네임을 쓴다.
  • Play 중에는 EditorSceneManager.OpenScene 이 막힌다. 씬을 고치기 전에 editor_stop.
  • 캡처는 항상 1280×720 으로 나온다. 세로 렌더(2160×3840)를 캡처하면 가로로 늘어나므로, 판정 전에 resize((720,1280)) 로 되돌리고 봐야 한다.
  • 캡처를 Assets/ 안에 저장하면 프로젝트가 더러워진다. 쓰고 나면 지운다.

4. 이번 세션에 만든 것

4-1. 하단 HUD — TVHudBar · TVSkillBar · TVBottomMenu · TVViewportScaler · TVCameraFocus

  • 아트는 Blender 절차 생성(bl_hud.py, 세션 스크래치패드). 좌 가고일·우 천사 구슬 소켓, 경험치 프레임, 레벨 육각판, 슬롯·원형 테두리를 어두운 철 + 금 한 가지 재질로 통일. 구슬 안쪽은 바닥·액체·광택 3겹(make_orb_layers.py)
  • 모든 UI 는 위젯 영역(CenterHolder) 안에 들어간다. TVViewportHost.Create 로 1080 기준 좌표계를 만들고 TVViewportScaler 가 폭에 맞춰 배율을 잡는다
  • 최소화(배경 투명) 모드 — 하단 주요 메뉴만 숨고 HUD 는 보인다
  • TVCameraFocus — 성장 등 페이지가 열려 게임 화면이 짧아지면 카메라 높이를 고쳐 캐릭터 몸통 중앙을 화면 세로 0.62 에 맞춘다(기준점은 발밑이 아니라 원점 +0.83). 페이지를 닫으면 원래 값으로 복귀
  • 배치(1080 기준): 띠 중심 256 · 메뉴 높이 140 · 상단 줄 316 · 자동/회피 192

4-2. 인벤토리 — TVInventoryPanel + TV_ItemBagPopUp.prefab

  • 원본 Assets/UI/ItemBagPopUp.prefab → 사본 Assets/BurningTimes/Visual/Prefabs/TV_ItemBagPopUp.prefab
  • 사본에서 ItemBagPopupUI(게임 페이지 스크립트)와 RandomBoxPopUp·SelectBoxPopUp 제거 → 배치용
  • 창 700×1240 · 제목 · 탭 3개(가방/창고/짐꾼) · 정렬 · 134/150 · 제작(청색)·판매(황동색) · 칸 7×10=70 · 마지막 칸이 확장(+)
  • 칸 배율은 ItemSlotBG 폭(100) 기준으로 잡아야 칸을 꽉 채운다. 가장 큰 자식(발광 140) 기준으로 잡으면 슬롯이 작아지고 간격이 벌어져 보인다
  • 가방 버튼(TVSkillBar.OpenInventory)이 TVInventoryPanel.Toggle() 을 부른다

4-3. 함께 고친 결함

  • 위젯 모드 자동 공격 — 사거리 밖이면 쏘지 않게 holdFireWithoutTarget 을 켜고 위젯 제외 조건 삭제
  • 콘솔 NRE 8건 — 엔티티 질의를 World 단위로 다시 만들도록 6종 수정
  • 공유 diff 정리 — Packages·ProjectSettings·gradle·폰트 SDF 는 커밋하지 않고 원복, /output·/Assets/_Recovery 무시 목록 추가

5. 다음에 할 일 (우선순위)

  1. 인벤토리 기능 연결 — 탭 전환(가방/창고/짐꾼) · 정렬 · 제작 · 판매 · 확장(+) · 실제 아이템 목록 표시
  2. HUD 기능 연결 — HP·경험치·레벨·포션 수량을 게임 데이터에 붙인다(지금은 고정 표현값)
  3. 위젯 자동 이동·자동 전투 (PD 분류 신규 안건)
  4. §4 기술 부채 2·3단계 — Find/GetComponentsInChildren 캐싱, 역할 분리

6. 확인하지 못한 것

  • 다른 PC 클론에서 BT_Visual 스크립트가 missing 으로 보인다는 보고가 있었다. 저장소는 파일 단위로 검증했고 빠진 것이 없다(.cs+.cs.meta GUID 가 프리팹 참조와 일치). 그 클론의 브랜치와 Library 캐시를 확인해야 한다.
  • 같은 클론의 BatchDrawCommand ... MeshID: ("<null>") 에러도 셰이더 문제가 아니었다(해당 머티리얼 4종 모두 URP/Lit 또는 그 사본인 TV2_FadeLit). 임포트·베이크가 덜 된 상태로 보인다.

7. 다음 세션 첫 프롬프트 (그대로 붙여 넣기)

FirstRising UI 작업을 이어서 진행한다.

먼저 E:\BurningTimes\공유\대화로그\FirstRising\2026-09-23_UI작업_인수인계.md 를 읽어라.
다른 문서는 열지 마라.

작업 규칙
- 스크립트는 BT_Visual 노드에만 컴포넌트로 붙인다
- 게임 원본 프리팹은 수정하지 말고 복사본을 만들어 쓴다
- 자잘한 결함은 묻지 말고 바로 고쳐라
- 작업이 끝나기 전에 턴을 끝내지 마라. 승인이 필요하면 질문으로 끝내라
- 커밋·푸시는 내가 지시할 때만
- 보고는 한국어·간결·경어, 호칭은 PD님

이번 작업: 인벤토리 기능 연결 — 탭 전환·정렬·제작·판매·확장(+)·실제 아이템 목록