이전 글에서 이어집니다
2025.11.26 - [Unreal 프로젝트 다이어리/두번째 프로젝트] - Unreal - 인벤토리(4) ( 정렬, 삭제 )
Unreal - 인벤토리(4) ( 정렬, 삭제 )
이전 글에서 이어집니다2025.11.25 - [Unreal 프로젝트 다이어리/두번째 프로젝트] - Unreal - 인벤토리 (드래그 앤 드롭) Unreal - 인벤토리 (드래그 앤 드롭)이전 글에서 이어집니다2025.11.23 - [Unreal 프로젝
lucodev.tistory.com
구현한 내용
- 아이템에 마우스 올리면 해당 아이템의 정보 확인하기
먼저 초기 구상도를 만들어주었습니다

이를 토대로 위젯을 만들어주었습니다

추가한 클래스
| ToolTipWidget | 마우스를 올리면 툴팁이 표시되는 위젯 |
구현
위젯에서 텍스트와 이미지를 바인드한뒤 data를 기반으로 텍스트 혹은 이미지를 변경해주는 함수를 만들어주었습니다
void UToolTipWidget::SetItemInformation(const FItemData& itemData)
{
if (TextBlock_ItemName)
TextBlock_ItemName->SetText(FText::FromString(itemData.itemName));
if (TextBlock_ItemDescription)
TextBlock_ItemDescription->SetText(FText::FromString(itemData.itemDescription));
if (TextBlock_ItemType)
{
FString itemTypeStr;
switch (itemData.itemType)
{
case EItemType::Consumable: itemTypeStr = TEXT("Consumable"); break;
case EItemType::Money: itemTypeStr = TEXT("Money"); break;
case EItemType::Quest: itemTypeStr = TEXT("Quest"); break;
case EItemType::Upgrade: itemTypeStr = TEXT("Upgrade"); break;
default: itemTypeStr = TEXT("Unknown"); break;
}
TextBlock_ItemType->SetText(FText::FromString(itemTypeStr));
}
if (Image_ItemImage && itemData.itemIcon)
Image_ItemImage->SetBrushFromTexture(itemData.itemIcon);
}
인벤토리 컴포넌트에서 아이템 데이터를 캐싱해줍니다
TMap<int32, FItemData*> itemDataCache;
void InitItemDataCache();
void UInventoryComponent::InitItemDataCache()
{
itemDataCache.Empty();
for (auto& pairs : itemDataMap)
itemDataCache.Add(pairs.Key, &pairs.Value);
}
마우스를 가져다 대거나 마우스를 뗏을때 실행되는 함수를 오버라이드 해줍니다
virtual void NativeOnMouseEnter(const FGeometry& inGeometry, const FPointerEvent& inMouseEvent) override;
virtual void NativeOnMouseLeave(const FPointerEvent& inMouseEvent) override;
슬롯위젯에서 캐싱한 데이터를 툴팁위젯에 띄웁니다
void USlotWidget::NativeOnMouseEnter(const FGeometry& inGeometry, const FPointerEvent& inMouseEvent)
{
if (currentSlotData.isEmpty())
return;
FVector2D MouseScreenPos = inMouseEvent.GetScreenSpacePosition();
FItemData* foundData = inventoryComp->itemDataCache.FindRef(currentSlotData.itemID);
if (!foundData)
return;
mainCon->toolTipWidget->SetItemInformation(*foundData);
APlayerController* pc = GetOwningPlayer();
FVector2D mousePos = UWidgetLayoutLibrary::GetMousePositionOnViewport(pc);
mainCon->toolTipWidget->SetPositionInViewport(mousePos, false);
mainCon->toolTipWidget->SetVisibility(ESlateVisibility::SelfHitTestInvisible);
}
void USlotWidget::NativeOnMouseLeave(const FPointerEvent& inMouseEvent)
{
if (mainCon && mainCon->toolTipWidget)
mainCon->toolTipWidget->SetVisibility(ESlateVisibility::Collapsed);
}
사용할 데이터를 완성해주었습니다

결과


'Unreal 프로젝트 다이어리 > 두번째 프로젝트' 카테고리의 다른 글
| Unreal - 데미지 오버레이 (0) | 2025.12.01 |
|---|---|
| Unreal - 인벤토리(5-2) (UI 디테일 추가) (0) | 2025.11.29 |
| Unreal - 인벤토리(4) ( 정렬, 삭제 ) (0) | 2025.11.26 |
| Unreal - 인벤토리(3) (드래그 앤 드롭) (0) | 2025.11.25 |
| Unreal - 인벤토리(2) ( 아이템 추가하기 ) (0) | 2025.11.23 |