Documentation
2.背包项目小部件.md
2025/12/16预计阅读 5 分钟
创建 MyBackpackItemWidget.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "MyBackpackComponent.h"
#include "Blueprint/UserWidget.h"
#include "Components/Image.h"
#include "Components/TextBlock.h"
#include "MyBackpackItemWidget.generated.h"
/**
* 背包物品的静态数据展示小部件
*/
UCLASS()
class DEMO2_API UMyBackpackItemWidget : public UUserWidget
{
GENERATED_BODY()
public:
UMyBackpackItemWidget(const FObjectInitializer& ObjectInitializer);
virtual void NativeConstruct() override;
virtual void NativePreConstruct() override;
//图标
UPROPERTY(EditAnywhere, BlueprintReadWrite,Category="背包物品属性",meta=(BindWidget=true),DisplayName="图标")
UImage* Icon;
//名称
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="背包物品属性",meta=(BindWidget=true),DisplayName="名称")
UTextBlock* Name;
//数量
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="背包物品属性",meta=(BindWidget=true),DisplayName="数量")
UTextBlock* Count;
//背包数据
UPROPERTY(EditAnywhere,BlueprintReadWrite,DisplayName="物品数据",Category="背包物品属性",meta=(ExposeOnSpawn))
FMyBackpackData ItemData;
//=============================函数=====================================
UFUNCTION(BlueprintCallable,DisplayName="初始化函数",Category="ItemWidgetFunction")
void ChangeItemData(FMyBackpackData Data);
};
创建 MyBackpackItemWidget.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyBackpackItemWidget.h"
#include "Blueprint/WidgetTree.h"
UMyBackpackItemWidget::UMyBackpackItemWidget(const FObjectInitializer& ObjectInitializer):
Super(ObjectInitializer),
Icon(nullptr), Name(nullptr), Count(nullptr)
{
}
void UMyBackpackItemWidget::NativeConstruct()
{
Super::NativeConstruct();
GEngine->AddOnScreenDebugMessage(-1, 3, FColor::Red,TEXT("backpack widget native construct init...."));
}
void UMyBackpackItemWidget::NativePreConstruct()
{
Super::NativePreConstruct();
// if(auto NameWidget = Cast<UTextBlock>(GetWidgetFromName("Name")))
// {
// NameWidget->SetText(FText::FromString(TEXT("Backpack Name...")));
// }
}
void UMyBackpackItemWidget::ChangeItemData(const FMyBackpackData Data)
{
ItemData = Data;
if (ItemData.ItemData.TexTure && Icon)
{
Icon->SetBrushFromTexture(ItemData.ItemData.TexTure, false);
}
else
{
GEngine->AddOnScreenDebugMessage(-1, 3, FColor::Red,TEXT("Texture is nullptr"));
}
if (Name)
{
Name->SetText(ItemData.ItemData.Name);
}
else
{
GEngine->AddOnScreenDebugMessage(-1, 3, FColor::Red,TEXT("Name is nullptr"));
}
if (Count)
{
Count->SetText(FText::AsNumber(ItemData.ItemData.InitCount));
}
else
{
GEngine->AddOnScreenDebugMessage(-1, 3, FColor::Red,TEXT("Count is nullptr"));
}
}