Dev Log - dopple
- Date: 2025-12-05
Start Log
- 20251205 (시작 시간 기록 없음)
Agent Info
- Worker: dopple
- Model: Claude Sonnet 4.5
- Session: UI 시스템 개선 작업
To Do
- ✅ TutorMessage 시스템 구현 (자동 Hide 기능 포함)
- ✅ AutoDespawnItem 시스템 구현 (HorizontalBox 자동 정렬)
- ⬜ UMG 블루프린트 설정 및 테스트
Compact Log 1
- 20251205 (현재 시간)
작업 요약
1. TutorMessage 자동 Hide 시스템 구현
- MainWidget에 3초 타이머 기반 자동 숨김 기능 추가
- 메시지 연속 호출 시 타이머 초기화 로직 구현
- Show/Hide 애니메이션 연동 및 펜딩 메시지 처리
2. AutoDespawnItem 시스템 구현
- 자동으로 생성 후 3초 뒤 사라지는 아이템 위젯 클래스 생성
- FadeOut 애니메이션 기반 부드러운 제거 효과
- HorizontalBox Right Alignment를 활용한 자동 정렬
변경 파일:
Source/Onepiece/UI/Public/UTutorMessage.h: 간소화 (MessageText만 유지)Source/Onepiece/UI/Private/UTutorMessage.cpp: NativeConstruct 제거Source/Onepiece/UI/Public/UMainWidget.h: TutorMessage 자동 Hide 타이머 추가, ItemHorizontalBox 및 AutoDespawnItem 지원 추가Source/Onepiece/UI/Private/UMainWidget.cpp: SetTutorMessage 타이머 로직, AddItemToBox 구현Source/Onepiece/UI/Public/UAutoDespawnItem.h: (신규) 자동 제거 아이템 위젯 클래스Source/Onepiece/UI/Private/UAutoDespawnItem.cpp: (신규) Lifetime 타이머 및 FadeOut 로직
주요 작업:
- TutorMessage 3초 자동 Hide 기능 구현 완료
- AutoDespawnItem 클래스 생성 및 생명주기 관리 로직 구현
- MainWidget에 ItemHorizontalBox 연동 및 AddItemToBox 함수 추가
- 애니메이션 콜백 기반 안전한 위젯 제거 처리
Commit 정보
Summary (EN): feat: implement TutorMessage auto-hide and AutoDespawnItem system
세부 내역:
"TutorMessage 자동 숨김 기능 추가"
- 3초 타이머 기반 자동 Hide 애니메이션 재생
- 메시지 연속 호출 시 기존 타이머 클리어 및 재시작
- 펜딩 메시지 처리 로직 (Hide → Show 연계)
"AutoDespawnItem 시스템 구현"
- 생성 후 3초 대기 → 0.3초 FadeOut → 자동 제거
- UAutoDespawnItem 클래스 생성 (Lifetime 타이머 관리)
- MainWidget에 ItemHorizontalBox 및 AddItemToBox 추가
- HorizontalBox Right Alignment를 통한 자동 오른쪽 정렬
"코드 개선 및 로깅 추가"
- null 체크 및 안전성 강화
- LogOnepiece를 활용한 디버깅 로그 추가
- 애니메이션 콜백 기반 정확한 타이밍 제어
Next To Do
UMG 블루프린트 설정
- WBP_TutorMessage 생성 (MessageText TextBlock 추가)
- WBP_MainWidget 애니메이션 설정 (TutorShowAnim, TutorHideAnim)
- WBP_Item_120 생성 (Parent: UAutoDespawnItem, FadeOutAnim 추가)
- ItemHorizontalBox 설정 (Horizontal Alignment: Right)
통합 테스트
- TutorMessage 표시 및 자동 숨김 확인
- 아이템 추가 및 자동 제거 확인
- 연속 호출 시 정상 동작 검증
최종 커밋 및 문서화
Compact Log 2
- 20251205 (추가 작업 완료)
작업 요약
UAutoDespawnItem을 UResultStatWidget 기반으로 변경
ItemIcon(UImage) →ItemWidget(UResultStatWidget)으로 변경- 단순 아이콘 표시에서 Grade/Score/Rate/Symbol 등 다양한 통계 표시 지원으로 확장
- AddItemToBox() 반환값 추가하여 외부에서 ItemWidget 설정 가능
변경 파일:
Source/Onepiece/UI/Public/UAutoDespawnItem.h: ItemIcon 제거, ItemWidget (UResultStatWidget) 추가Source/Onepiece/UI/Private/UAutoDespawnItem.cpp: SetIcon/SetIconTint 함수 제거, UResultStatWidget include로 변경Source/Onepiece/UI/Public/UMainWidget.h: AddItemToBox() 반환 타입 변경 (void → UAutoDespawnItem*)Source/Onepiece/UI/Private/UMainWidget.cpp: AddItemToBox()에서 생성된 아이템 반환하도록 수정
주요 작업:
- UAutoDespawnItem이 UResultStatWidget을 활용하도록 리팩토링
- AddItemToBox() 호출 시 UAutoDespawnItem* 반환하여 유연성 증가
- SetIcon/SetIconTint 제거 (UResultStatWidget의 기능으로 대체)
- 외부에서 ItemWidget 직접 제어 가능 (SetWidgetType, SetGradeValue 등)
Commit 정보
Summary (EN): refactor: change UAutoDespawnItem to use UResultStatWidget
세부 내역:
"UAutoDespawnItem 구조 변경"
- ItemIcon (UImage) → ItemWidget (UResultStatWidget)
- 단일 아이콘에서 다양한 통계 위젯으로 확장
- SetIcon/SetIconTint 함수 제거
"AddItemToBox 반환값 추가"
- void → UAutoDespawnItem* 반환
- 호출자가 생성된 아이템의 ItemWidget을 직접 설정 가능
- Grade, Score, Rate, Symbol 등 다양한 표시 타입 지원
"사용성 개선"
- UResultStatWidget의 모든 기능 활용 가능
- ColorType을 통한 일관된 스타일 적용
- 더 풍부한 UI 표현 지원
Next To Do
UMG 블루프린트 수정
- WBP_Item_120의 ItemIcon → ItemWidget으로 변경
- ItemWidget을 WBP_ResultStatWidget 타입으로 설정
- FadeOutAnim 타겟을 ItemWidget으로 변경
사용 예시 테스트
- Grade 타입: SetWidgetType(Grade), SetGradeValue(Grade_S)
- Score 타입: SetWidgetType(Score), SetScoreValue(1250.0f)
- Rate 타입: SetWidgetType(Rate), SetRateValue(0.85f)
- Symbol 타입: SetWidgetType(Symbol), SetSymbolValue(0.95f)
통합 테스트 및 최종 커밋
Compact Log 3
- 20251206 13:55
작업 요약
Holder 시스템 구현 완료 (정답 Luggage 배치 및 비주얼 피드백)
- Holder에 올라간 Luggage가 정답이면 공중에 띄우고 회전시키는 시스템 구현
- Holder 머티리얼 파라미터 제어로 활성화 상태 비주얼 표시
- 정답 Luggage의 모든 상호작용 차단 (pickup, hook, interact, widget)
- 네트워크 복제 지원으로 멀티플레이어 환경 대응
변경 파일:
Source/Onepiece/Prop/Public/AHolder.h: Tick 함수 추가, Replicated 프로퍼티 설정, Visual Settings 추가Source/Onepiece/Prop/Private/AHolder.cpp: Replication 설정, Tick에서 Luggage 회전 제어, 머티리얼 파라미터 초기화 및 설정, HasAuthority 체크 추가Source/Onepiece/Interactable/Public/luggage.h: SetAllCollision(bool) 함수 추가Source/Onepiece/Interactable/Private/luggage.cpp: SetAllCollision 구현 (모든 컴포넌트 충돌 제어 + InteractableComp DetectionRange 제어)
주요 작업:
Holder 비주얼 피드백 시스템
- BeginPlay에서 MeshComponent 머티리얼 파라미터 "Activate" 초기화 (0.0f)
- 정답 시 "Activate" = 1.0f, 오답 시 "Activate" = 0.0f 설정
- ActivatedHeightOffset, RotationSpeed를 블루프린트에서 조정 가능
정답 Luggage 회전 시스템
- Luggage를 범용 클래스로 유지 (회전 로직 제거)
- Holder의 Tick에서 CurrentLuggage 회전 직접 제어
- HoldPos보다 ActivatedHeightOffset만큼 위에 배치
상호작용 완전 차단
- Luggage::SetAllCollision(bool) 함수 구현
- BoxComp, Mesh1/2/3Comp 충돌 비활성화
- InteractableComp->DetectionRange 비활성화 (위젯 노출 방지)
- Overlap 이벤트 차단으로 pickup, hook, interact 모두 불가
네트워크 복제 지원
- AHolder에 bReplicates = true 설정
- bIsActivated, CurTarget을 Replicated로 설정
- GetLifetimeReplicatedProps 구현
- OnBoxOverlapBegin에 HasAuthority() 체크 추가
- 모든 클라이언트에서 동일한 Holder 상태 동기화
Commit 정보
Summary (EN): feat: implement Holder activation system with visual feedback and network replication
세부 내역:
"Holder 활성화 비주얼 시스템 구현"
- MeshComponent 머티리얼 파라미터 "Activate" 제어 (0.0f ↔ 1.0f)
- 정답 Luggage 공중 배치 (ActivatedHeightOffset)
- Holder Tick에서 정답 Luggage 회전 제어 (RotationSpeed)
"Luggage 상호작용 완전 차단"
- SetAllCollision(bool) 함수 추가 (활성화/비활성화 모두 지원)
- 모든 컴포넌트 충돌 제어 (BoxComp, Mesh1/2/3Comp)
- InteractableComp->DetectionRange 제어로 위젯 노출 방지
- pickup, hook, interact 모두 차단
"네트워크 복제 지원"
- AHolder에 Replication 설정 (bReplicates, GetLifetimeReplicatedProps)
- bIsActivated, CurTarget 복제
- HasAuthority() 체크로 서버에서만 로직 실행
- 모든 클라이언트에서 동일한 상태 보장
"코드 구조 개선"
- Luggage는 범용 클래스로 유지 (회전 로직 제거)
- Holder가 Luggage 제어 책임 (명확한 책임 분리)
- SetAllCollision으로 간결한 충돌 제어
Next To Do
블루프린트 설정
- BP_Holder의 ActivatedHeightOffset 조정 (기본값: 50.0f)
- BP_Holder의 RotationSpeed 조정 (기본값: 90.0f)
- Holder Mesh 머티리얼에 "Activate" 스칼라 파라미터 추가
통합 테스트
- 정답 Luggage 배치 시 공중에서 회전하는지 확인
- Holder 머티리얼이 활성화 상태로 변경되는지 확인
- 정답 Luggage 상호작용 완전 차단 확인 (pickup, hook, widget)
- 멀티플레이어 환경에서 모든 클라이언트 동기화 확인
최종 커밋 및 다음 기능 구현