跳到主内容
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"));
	}
}

返回顶部