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

111 lines
12 KiB
Markdown
Raw Permalink Normal View History

# FirstRising 대화로그 — 2026-09-30 (개발팀 세션 · BT43~)
## BT43-FirstRising · 장착 무기에 따른 공격 모션 · 패턴 + 플레이어 정보 화면 반영
### PD 지시(원문 · 00:34)
"현재 에디터에서 플레이해보니 플레이어가 장착한 장비에 따른 모션 및 공격 패턴 변화가 적용되지 않는 것 같아.
* 원래 FR 프로젝트를 살펴보고 장착한 무기에 따른 공격 모션 및 패턴 변화를 구현 또는 복원해줘.
* "장비" 메뉴에서 장착한 아이템이 로비(숲)의 기본 플레이어 정보(스텟이 보여지는 화면)에 반영되지 않고 있어. 장비 메뉴에서 장착하면 플레이어 스텟이 보이는 화면에도 반영될 수 있도록 수정해줘."
### 원인(실측 + 코드)
- 로비 씬에는 캐릭터가 둘이다 — 싸우는 캐릭터(`LevelEssential/Ariel` · `Player.Instance`)와 예전 전시용 캐릭터(`LobbyManager.lobbyPlayer` · 꺼져 있음).
- 게임 원본은 장비를 바꾸면 전시용 캐릭터만 갱신한다(`ItemPageUI` · `CharacterPageUI.ShowCharacterItems`). 싸우는 캐릭터는 `TestMonstersController` 가 Play 시작 때 한 번만 무기를 들린다(장착이 없으면 1029 활).
- BT 활 장식(`TVArcherGear`)이 무기 종류와 무관하게 게임 무기 모델을 숨기고 활 · 화살통을 붙였다 → 검을 들어도 활만 보였다.
- 플레이어 정보 화면은 열 때만 슬롯 · 값을 썼다. 장착 뒤 게임이 다시 그리는 것은 장비 화면뿐이다.
- 무기별 공격 모션 · 패턴 자체는 게임에 살아 있다(무기 → 스킬 → `SkillElement.AnimStateHash` → 애니메이터 상태 `Sword0`… `Bow0`…). 끊긴 것은 '장비 변경 → 싸우는 캐릭터' 연결이다.
### 결정(PM)
- 게임 코드는 고치지 않고 BT_Visual 에 연결 구성 요소를 둔다(`TVEquipmentSync`). 게임의 장비 변경 이벤트(`PlayerManager.OnUserStatusChanged`)를 듣고, 장착 상태의 지문이 달라졌을 때만 일한다(매 프레임 하는 일 없음).
- 무기 교체는 게임 함수 `Character.EquipWeapon` 을 그대로 쓴다(에디터 무기 목록 창의 선례). 무기는 그대로고 능력치만 바뀐 경우는 `ApplyAbility` + 능력치 갱신 요청 + 무기 스킬 기본 피해 다시 쓰기.
- 활 전용 대기 · 달리기 교체(`TVAnimationOverride`)는 프리팹에서 꺼진 상태 그대로 둔다(켜면 다른 무기에서도 활 자세가 나온다).
### 결과
- 새 파일 `Assets/BurningTimes/Visual/Scripts/TVEquipmentSync.cs` + `LobbyPlayScene.prefab` 의 BT_Visual 에 부착. 수정 `TVArcherGear.cs`(활일 때만) · `TVCharacterInfoPanel.cs`(장비 변경 신호에 다시 씀).
- 검증 1차(00:4x): 시작 시 검 1436 → 엔티티 무기 1436 · 검 모델 표시 / 활 1029 장착 → 엔티티 1029 · 기본 피해 27 · 활 · 화살통 부착 / 검 재장착 → 기본 피해 34 · 최종 공격력 37 / 정보 화면을 연 채 활 장착 → 무기 슬롯 1436→1029 · 공격력 37→27 / 무기 해제 → 기본 활 1029 · 기본 피해 20.
- 검증 2차(00:57~00:59 · 몬스터 곁에서 공격): 검 → 애니메이터 상태 `Sword0 · Sword1 · Sword2`(스킬 100061~63 · 사거리 4.9 · 4.9 · 6.3) / 활 → `Bow0~Bow3`(스킬 100021~24 · 사거리 6.3) / 정보 화면 공격력 · 생명력 = 캐릭터 계산값(활 27 · 510, 검 37 · 510). 에디터 로그 오류 0(logscan · 6.5 MB).
- 1차에서 찾은 결함 수정: 시작 때 내 동기화와 게임의 첫 장착이 겹쳐 검 모델이 둘 생김 → 게임이 먼저 들 때까지 최대 3초 기다림.
- 한글 주석 점검(comment_scan): 선언 35개 중 누락 0. 저장 파일 3개 시험 전 백업 → 원복(해시 일치).
- 필드를 바꿔 끼운 직후(BT45)에도 새 플레이어 엔티티에 능력치 · 무기 스킬을 다시 넣게 했다(도착 직후 기본 피해 34 · 최종 공격력 37 확인).
- FR `bt/work` `4bca428e62` push(PD 지시 02:0x "충분히 반영되었다고 판단될 경우 … 푸시").
### 남은 이슈
- 가방에 장비가 검 · 활 둘뿐이라 다른 무기 종류(둔기 · 단검 · 지팡이 · 마법 단검)와 방어구 · 룬 경로는 실측하지 못했다(같은 경로라 동작할 것으로 보이나 추정).
- 활이 아닌 무기에서 대기 · 달리기 자세는 무기와 무관하게 같다(게임 원본도 같다).
- 게임 코드 `Character.ApplyAbility` 의 능력치 갱신 요청은 '값'을 종류로 바꿔 넣는 것으로 보인다(손대지 않음 · 정섭 님 확인 필요).
- Editor.log 가 매 프레임 '오디오 리스너 2개 · 이벤트 시스템 2개' 경고로 커진다(게임 측 중복 · 미수정).
## BT44-FirstRising · 최소화(위젯) 모드 — 지형 숨김 + 창 크기 조절 메뉴
### PD 지시(원문 · 01:01)
"* 최소화 모드에서는 플레이어와 몬스터 외에 지형은 보이지 않도록 해줘. (현재 맵 오브젝트가 보이고 있음)
* 최소화 모드에서는 하단 UI 상단 부분에 마우스를 가져다 대면, "창 크기를 조절할 수 있는 슬라이드 메뉴"를 제공해줘. 이 메뉴를 통해 게임 화면의 창의 크기를 조절하고 싶어."
### 원인(실측)
- 최소화 모드 = 게임의 위젯 기능(`DesktopWidgetManager`). 들어가면 메인 카메라에서 `WidgetCulling` 레이어(29)만 뺀다.
- 그 레이어를 쓰는 것은 로비 프리팹(92개)과 숲 맵 서브씬뿐 → 숲에서는 캐릭터 · HUD 만 보인다(정상). 새 테마 맵(필드 이동 6종 · 보스전 전용 필드)은 기본 레이어라 그대로 보였다 — 묘지에서 맵 엔티티 1,565 · 필드 꾸러미 렌더러 427(메시 315 · 입자 102 · VFX 10) · 지형.
- 에디터에서 최소화 모드로 들어가는 길은 게임 화면의 `WidgetModeButton`(에디터는 창을 다루지 않고 상태만 흉내 낸다 — `m_SimulateInEditor`).
### 결정(PM)
- 맵 에셋 · 빌더는 고치지 않는다(레이어를 바꿔 다시 지으면 맵 6종 · 꾸러미 · 전용 필드를 모두 다시 만들어야 한다). 최소화 모드에 들어갈 때 숨기고 나올 때 되돌린다.
- 창 크기 값은 '게임에 설정된 기본 크기'의 배수(0.5~2.5 · 5% 단위)로 둔다. 빌드는 위젯 창의 한 변(`widgetDiameter` 440 × 배수), 에디터는 게임 화면 영역을 같은 배수로 키우고 줄여 미리 보여 준다.
- 막대를 끄는 동안 바로 적용하지 않고 놓는 순간 적용한다 — 창(화면)이 커지면 막대가 마우스 밑에서 움직여 값이 흔들린다.
- 입력은 UGUI 이벤트가 아니라 커서 좌표를 직접 읽는다 — 위젯 창은 포커스가 없을 수 있고, 게임의 위젯 입력도 같은 방식이다.
### 결과
- 새 파일 `TVWidgetScenery.cs`(맵 엔티티에 DisableRendering + 표식 · 지형 그리기 끔 · 등록된 배경 묶음의 렌더러 끔) · `TVWidgetSizeMenu.cs` · `TVRuntimeFont.cs`(실행 중 화면용 글자체). `TVFieldTravel` · `TVBossField` 가 배경 묶음을 등록한다.
- 게임 코드 `DesktopWidgetManager.cs` 2곳(날짜 · 이유 한글 주석): ① 조작 UI 영역 등록(`RegisterWidgetControlArea`) — 그 안에서 시작한 누름은 창 끌기 · 복귀로 보지 않는다 ② 위젯 모드 중 `widgetDiameter` 를 바꿀 때 원형 리전 설정(`m_UseCircularRegion`)을 따르게 함(꺼져 있는데도 원형으로 잘랐다).
- 검증: 묘지 최소화 모드에서 캐릭터 · 몬스터 · HUD 만 보임(엔티티 1,565 · 렌더러 427 · 지형 1 숨김) → 나오면 모두 복구 / 띠에 마우스 → 메뉴 나옴 → 막대 누름(끄는 중 · 위젯 유지) → 50% 자리에서 놓음 → 크기 1.50 · 위젯 440→660 · 게임 화면 471×837→706×1255 px · 저장 / 벗어나면 0.8초 뒤 들어감 / 시험 뒤 크기 · 저장 값 원복. 에디터 로그 오류 0.
### 남은 이슈
- PC 빌드 미검증 — 창 크기 변경(Win32) · 투명 창에서의 모습 · 바탕화면 커서 읽기는 빌드에서만 도는 경로다.
- 크기를 바꾸면 메뉴가 마우스 밑에서 벗어나 잠시 뒤 들어간다(다시 조절하려면 띠에 다시 댄다).
- 최소화 모드에서 스킬 칸 · 가방 버튼을 누르면 게임의 위젯 입력이 '복귀'로 처리한다(기존 동작 · 이번에 바꾸지 않음) — 필요하면 같은 조작 영역 등록으로 풀 수 있다.
## BT45-FirstRising · 맵 이동 로딩 단축 + 로딩 진행도 표시
### PD 지시(원문 · 01:01)
"맵 이동 시 로딩이 너무 긴데 왜 이렇게 오래 걸리는거지? 좀 더 로딩 시간을 줄일 방법이 없을까?
그리고 로딩 중에는 loading... 글자와 함께 로딩 진행도를 프로그레스 바 형태로 제공해줘."
### 원인(실측 · 맵 이동 5회 · 게임 안 시계)
| 구간 | 시간 |
|---|---|
| 화면 가림 | 0.2초 |
| 엔티티 전체 정리(엔티티 씬 16개 내림 · 재질 등록 해제 · 삭제) | 1.85초(한 프레임) |
| 로비 씬 읽기(뒤에서) | 1.6초 |
| 로비 씬이 켜지는 프레임(화면 · 구성 요소 전부 다시 만듦) | 3.25초(한 프레임) |
| 그 뒤 첫 프레임(맵 서브씬 읽기 포함) | 1.0~1.2초 |
| 기다림 + 화면 걷음 | 0.7초 |
| **합계** | **8.3~8.7초** · 몬스터는 도착 6~7초 뒤에 나옴 |
- 그 맵에 처음 갈 때(스크립트를 고친 뒤 첫 방문)는 서브씬 굽기 4~5.5초가 더 붙어 12~15초 — 에디터 전용(빌드는 미리 구워 둔다).
- 즉 '맵만 바꾸면 되는데 로비 씬 전체를 다시 읽는 것'이 대부분이었다(BT39 에서 화면 구성을 유지하려고 택한 방식).
### 결정(PM)
- 로비 씬을 다시 읽지 않고 맵만 바꿔 끼운다. 예전 방식은 남겨 두고, 바꿀 수 없거나 실패하면 그쪽으로 넘어간다.
- 플레이어 엔티티는 맵 서브씬에 구워져 있다(1차 검증에서 발견 — 맵을 내리자 게임 시스템 5곳이 사라진 엔티티를 건드려 예외 15,781회). → 맵을 내리기 전에 관리 쪽 캐릭터의 엔티티 연결을 비우고(`initPlayer` 끔 · `characterEntity` 비움), 새 맵이 읽히면 게임의 플레이어 초기화가 다시 돌게 한다(`WorldManager.initPlayer` 끔 → `PlayerEntitySyncSystem` 이 새 엔티티에 연결 · 시작 자리 · 카메라 · 체력). 게임 코드는 고치지 않았다.
- 몬스터 · 소환수 · 젬 · 드롭은 지우지 않고 풀로 돌려보낸다(게임의 회수 절차와 같은 값). 상자(깨지는 상자)는 건드리지 않는다.
- 맵 읽기는 기다리지 않고 맡긴다(화면이 멈추지 않아 진행 막대가 움직인다).
### 결과
- `TVFieldTravel.cs`(맵만 바꿔 끼우기 · 예전 방식 유지) · 새 파일 `TVLoadingScreen.cs`(검은 막 + "Loading..." + 진행 막대 + 퍼센트 · 게임 화면 영역 한가운데). `TVEquipmentSync` 는 필드가 바뀌면 새 엔티티에 능력치 · 무기 스킬을 다시 넣는다.
- 검증(Play 1회 · 게임 안 시계):
| 이동 | 방식 | 시간 |
|---|---|---|
| 숲 → 묘지(처음 · 굽기 포함) | 맵만 바꿈 | 5.6초 |
| 묘지 → 숲 | 맵만 바꿈 | 1.95초 |
| 숲 → 묘지 | 맵만 바꿈 | 1.4초 |
| 묘지 → 사막(처음 · 굽기 포함) | 맵만 바꿈 | 5.6초 |
| 사막 → 묘지 | 예전 방식(비교용) | 8.65초 · 몬스터는 7초 뒤 |
| 묘지 → 숲 | 맵만 바꿈 | 1.9초 |
- 도착 즉시 몬스터(47~53마리) · 플레이어 시작 자리(맵마다 구워진 자리와 일치) · 체력 510/510 · 무기 1436 기본 피해 34 · 분위기(안개 · 환경광) 일치 · 숲으로 돌아오면 숲의 분위기 복구.
- 맵을 바꾼 뒤 보스전 입장 · 퇴장 정상(숨긴 몬스터 53 → 복구) · 보스전 중 이동은 안내만 띄우고 거절 · 에디터 로그 오류 0.
### 남은 이슈
- 처음 가는 맵의 굽기 시간(4~5.5초)은 에디터에서만 남는다 — 스크립트를 고칠 때마다 맵마다 한 번. 줄이려면 Play 시작 때 뒤에서 미리 굽게 하는 방법이 있다(미구현 · PD 결정).
- PC 빌드에서는 테마 맵 서브씬이 빌드에 들어 있지 않다(`mapsInBuild` 꺼짐) — 빌드 미검증.
- 소환수가 있는 상태의 맵 이동은 미실측(소환수도 풀로 돌려보내게 했다).
## 커밋 · 푸시
- FR `bt/work` `4bca428e62`(BT42~BT45) push — 에디터가 덧붙인 변경(재질 4 · 글자체 3 · 엔티티 의존성 1)은 넣지 않았다.
- 조직 레포(이 문서 · PD 지시 로그)는 커밋하지 않았다(PD 지시 시).