UE5 C++ 创建3DWidgete 血条 再造成伤害

一.创建

二.UI里声明变量

创建类

cpp 复制代码
public:
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category  = "MyWidget")
	float CurrentHealth = 100.0f;
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "MyWidget")
	float MaxHealth = 100.0f; //可以给默认值

绑定监听函数

函数里使用父类变量进行计算 百分比

三.在Character里声明

重写受伤虚函数

cpp 复制代码
#include "MyHealthWidget.h"
cpp 复制代码
	UWidgetComponent* MyWidgetHealth;
cpp 复制代码
	virtual float TakeDamage(float DamageAmount,FDamageEvent const &DamageEvent,class AController*EventInstigator,AActor* DamagerCausser)override; //重写系统内部的TakeDamage 

四.编写逻辑

创建对象

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);
MyWidgetHealth->SetRelativeLocation(FVector(0,0,100)); 
MyWidgetHealth->SetWidgetSpace(EWidgetSpace::Screen);  //  输出到屏幕
MyWidgetHealth->SetDrawSize(FVector2D(400,20));

受伤-5血量

cpp 复制代码
float AMyCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamagerCausser)
{
	UMyHealthWidget* MyWidget = Cast<UMyHealthWidget>(MyWidgetHealth->GetUserWidgetObject());
	if (MyWidget)
	{
		if (MyWidget->CurrentHealth > 0)
		{
			MyWidget->CurrentHealth -= 5.f;
		}
		else
		{
			return 0.f;
		}
	}
	return 0.0f;
}

五.造成角色伤害物体

cpp 复制代码
#include "Kismet/GameplayStatics.h"  //Aplaydamage 函数库里的头文件
#include "MyCharacter.h"  //后面用于转化
cpp 复制代码
UFUNCTION()
void BeginOverlapFunction(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
UFUNCTION()
void EndOverlapFunction( UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex); //四个参数
// FComponentEndOverlapSignature, UPrimitiveComponent, OnComponentEndOverlap, UPrimitiveComponent*, OverlappedComponent, AActor*, OtherActor, UPrimitiveComponent*, OtherComp, int32, OtherBodyIndex
UFUNCTION()
void HitOverlaoFunction(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
//UPrimitiveComponent*, HitComponent, AActor*, OtherActor, UPrimitiveComponent*, OtherComp, FVector, NormalImpulse, const FHitResult&, Hit

逻辑碰撞,判断是否是角色。再造成ApplyDamage伤害。

cpp 复制代码
void AMyActor::BeginOverlapFunction(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
	AMyCharacter* MyCharacter = Cast<AMyCharacter>(OtherActor); //转换
	if (MyCharacter)
	{
		UGameplayStatics::ApplyDamage(MyCharacter,5.0f,nullptr,this,UDamageType::StaticClass());  //应用伤害
	}
	GEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Red,TEXT("BeginOverLapEvent is Success"));
	MyParticle->Activate(); //激活
}

void AMyActor::EndOverlapFunction( UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
{
	MyParticle->Deactivate(); //失效
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("EndOverlapEvent is Success"));
}

void AMyActor::HitOverlaoFunction(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("HitOverlapEvent is Success"));
}
相关推荐
AA陈超3 小时前
ASC学习笔记0022:在不打算修改属性集时访问生成的属性集
c++·笔记·学习·ue5·虚幻引擎·unreal engine
曼巴UE512 小时前
UE5 C++ 定时器 官方案例练习
ue5
曹勖之12 小时前
UE5导入的CAD文件零件如何被Merge?
ue5
Creator丶小鑫14 小时前
UE5 PAK 封包 加载实用方法
ue5·ue5 pak 封包解包·ue5 获取所有文件路径·ue5 调用cmd·ue5 保存写入txt
AA陈超20 小时前
ASC学习笔记0017:返回此能力系统组件的所有属性列表
c++·笔记·学习·ue5·虚幻引擎
AA陈超1 天前
ASC学习笔记0019:返回给定游戏属性的当前值,如果未找到该属性则返回零。
c++·笔记·学习·游戏·ue5·虚幻引擎
AA陈超2 天前
ASC学习笔记0004:通知相关方能力规格已被修改
c++·笔记·学习·游戏·ue5·游戏引擎·虚幻
酷柚易汛智推官2 天前
UE5.7:3D 内容生产的新范式
3d·ue5·酷柚易汛
B0URNE2 天前
什么是虚拟现实(VR)?
unity·ue5·vr
曹勖之3 天前
UE5 的 Waterline Pro 6的浮力作用机制解析
ue5