UEC++创建3DWidget渲染到屏幕(血条创建)(UEC++个人学习笔记)

本文详细描述了如何在Unity游戏中创建HealthWidget,包括头文件中声明血量变量,使用蓝图添加进度条,以及在角色类中设置和显示血条的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建HealthWidgetC++

在头文件声明两个变量,当前血量和最大血量

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyWidget")
		float CurrentHealth=100.0f;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyWidget")
		float MaxHealth=100.0f;

 创建HealthWidget蓝图,添加画布和进度条,

在进度条里的百分比创建绑定,用于设置血量百分比显示

 

 然后在需要的人物的头上添加血条的地方,添加上头文件,我这里在自己创建的mycharacter里面添加

#include"Components/WidgetComponent.h"
#include"MyHealthWidget.h"

然后声明控件

UPROPERTY(EditAnywhere, BluePrintReadOnly, Category = "MySenceComponent")
		UWidgetComponent* MyWidgetHealth;

在character.cpp文件中

MyWidgetHealth = CreateDefaultSubobject<UWidgetComponent>(TEXT("MyWidgetComponent"));
	//放入根
	MyWidgetHealth ->SetupAttachment(RootComponent);
	//复制控件引用
	static ConstructorHelpers::FClassFinder<UUserWidget>WidgetClass(TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/UMG_Health.UMG_Health_C'"));
	MyWidgetHealth->SetWidgetClass(WidgetClass.Class);
	//给一个向上的100的值,用于设置渲染的位置
	MyWidgetHealth->SetRelativeLocation(FVector(0,0,100));
	//设置渲染方式,是渲染到屏幕还是世界中
	MyWidgetHealth->SetWidgetSpace(EWidgetSpace:: Screen);
	//设置绘制大小
	MyWidgetHealth->SetDrawSize(FVector2D(300,20));

效果为:

UE4(Unreal Engine 4)中的C++编写UI通常涉及到使用蓝图或者直接使用C++代码配合Widget系统。以下是使用C++创建UI的基本步骤: 1. **使用蓝图**: - 打开Visual Editor,在工具栏上找到并添加"User Interface"模块,然后选择"Widget Container"作为容器。 - 右键点击容器,选择"Add Widget",选择"Horizontal Box Layout"或"Stack Panel"布局,用于组织和其他控件。 - 在这个布局里添加"ProgressBar"组件,并设置其"Percent Complete"属性表示生命值百分比。 - 调整样式,如颜色、大小等,使其看起来像。 2. **使用C++**: - 首先,你需要包含必要的头文件,比如`FLinearColor`、`SlateCore`和`SlateFontLibrary`。 - 创建一个自定义的`SHealthBar`类,继承自`SCompoundWidget`,并在构造函数中初始化组件(例如`SVerticalBox`)。 ```cpp class SHealthBar : public SCompoundWidget { //... TSharedRef<SVerticalBox> HealthBarContainer; void Construct(); }; ``` - 在`Construct()`方法中,你可以动态创建和配置进度组件。 ```cpp void SHealthBar::Construct() { HealthBarContainer = MakeShareable(new SVerticalBox()); // 添加进度到容器 ProgressBar = SNew(SProgressTrack) .ValueRange(0.0f, 100.0f) // 设定最大生命值 .OnValueChanged(this, &SHealthBar::UpdateValue); HealthBarContainer->AddSlot() ->AutoHeight() ->Fill() ->Padding(5.0f) ->Children() << ProgressBar; // 将容器添加到自身内容中 ContentRoot.AddChild(HealthBarContainer.ToSharedRef()); } ``` - 更新值: ```cpp void SHealthBar::UpdateValue(float NewValue) { ProgressBar->SetValue(NewValue); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值