99 lines
6.8 KiB
Markdown
99 lines
6.8 KiB
Markdown
|
|
# 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님
|
|||
|
|
|
|||
|
|
이번 작업: 인벤토리 기능 연결 — 탭 전환·정렬·제작·판매·확장(+)·실제 아이템 목록
|
|||
|
|
```
|