내일배움캠프-언리얼

TIL - 101

이시보 2026. 7. 8. 22:55

인벤토리(WBP_InventoryPanel / InventoryPanelWidget) 작업

1. 장비 슬롯 버튼 툴팁이 마우스에 붙어 안 사라지던 문제

  • 위치: NativeTick()
  • 원인: 툴팁 강제 닫기 안전장치가 그리드만 검사 → 슬롯 버튼 호버 중 매 틱 CloseToolTip()이 불려 Slate 상태머신이 꼬임.
  • 변경: 조건을 그리드 호버 || 슬롯 버튼 호버 통합으로 확장. 두 영역 어디에도 호버가 없을 때만 CloseToolTip() 호출.
    • Button_SlotHead/Weapon/Chest/Hands_L/Hands_R/Legs/FeetIsWidgetOrDescendantHovered로 검사(null 안전).

2. 장비 교체 확인 창이 뜰 때 그리드 툴팁 잔상 제거

  • 위치: ShowWeaponSwapConfirm(bShow=true)
  • 원인: 더블클릭 시 마우스가 그리드 아이템 위에 있어 툴팁이 남음. 매 틱 CloseToolTip은 재소환 싸움을 일으켜 커서를 따라다님(회귀).
  • 변경: 창이 뜨는 순간(엣지) 호버 중인 그리드 슬롯의 툴팁을 ClearWidgetTooltipRecursive로 제거 + CloseToolTip() + MarkInventoryTooltipsDirty().
    • 창이 닫히고 마우스가 슬롯을 벗어나면 ApplyInventorySlotTooltips가 툴팁을 복구.

3. 교체 확인 창을 마우스 커서 옆에 표시

  • 추가 함수: PositionConfirmDialogNearCursor(UWidget* DialogWidget)
    • 커서 절대좌표 → 부모 Canvas 로컬좌표 변환(+12,+12 오프셋), 화면 밖으로 안 나가게 클램프.
    • 앵커/정렬을 좌상단(0,0)으로 고정 후 UCanvasPanelSlot::SetPosition.
  • 적용: 장비 교체 창(Border_WeaponSwapConfirm), 퀵슬롯 교체 창(Border_QuickSlotReplaceConfirm) 모두 커서 옆에 표시.
  • include 추가: Components/CanvasPanelSlot.h

4. 퀵슬롯 교체 창이 퀵슬롯 휠에 가려지던 z-order 문제

  • 배경: 인벤토리 패널 z50, 퀵슬롯 휠 z80 → 패널 안(z50)의 교체 창이 휠(z80) 뒤에 깔림.
  • 변경:
    • HandleQuickSlotWheelSlotClicked에서 교체 확인 시 휠을 HitTestInvisible + z49(패널 아래)로 재배치(RemoveFromParentAddToViewport(49)), bQuickSlotWheelLowered = true.
    • 신규 헬퍼 RestoreQuickSlotWheelZOrder(): 휠을 원래 z80으로 복원.
    • ConfirmQuickSlotReplace / CancelQuickSlotReplace에서 복원 호출(취소 시 휠 다시 Visible).
  • 멤버 추가: bool bQuickSlotWheelLowered
  • ⚠️ 주의: 휠을 패널 아래로 내리므로 패널 배경이 불투명하면 휠이 가려질 수 있음(필요 시 교체 창을 뷰포트 최상단으로 올리는 방식으로 전환).

5. 사용 버튼(Button_UseConsumable) — 소모품일 때만 표시

  • 헤더: Button_UseConsumableBindWidgetOptional로 선언(WBP 위젯명 일치 필요).
  • 위치: UpdateEquipActionButtons()
  • 변경: 선택 아이템이 소모품일 때만 Visible, 그 외 Collapsed. 활성화는 CanUseSelectedConsumable()(보유 수량>0).
  • 클릭 동작은 기존 WBP 처리 유지(가시성만 C++ 제어).
  • ⚠️ WBP에 이 버튼 Visibility 바인딩이 있으면 제거해야 충돌 없음.

'내일배움캠프-언리얼' 카테고리의 다른 글

TIL - 100  (0) 2026.07.07
TIL - 99  (0) 2026.07.06
TIL - 98  (0) 2026.07.02
TIL - 97  (0) 2026.07.01
TIL - 96  (0) 2026.06.30