11月10日 生命值,减少生命值,创建生命值UI UE4斯坦福 学习笔记

制作角色属性Comp

添加一个Actorcomp

在.h内添加生命值与减少血量的函数

protected: //只在蓝图内可以编辑,在编辑器界面不能编辑 UPROPERTY(EditDefaultsOnly,BlueprintReadOnly,Category="Attributs") float Health; // Called when the game starts // public: UFUNCTION(BlueprintCallable,Category="Attributs") bool ApplyHealthChange(float Delta); // Called every frame // };

在.cpp内绑定变量与添加减少血量的void

USAttributeComponent::USAttributeComponent() { // Health = 100; // ... } bool USAttributeComponent::ApplyHealthChange(float Delta) { Health += Delta; return true; }

在角色的.h和.cpp内绑定这个actorcomp

.h

//角色属性 UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category="Components") USAttributeComponent * AttributeComp;

.cpp

//将创建的AttributeComp绑定在角色上 AttributeComp = CreateDefaultSubobject<USAttributeComponent>("AttributeComp");

修改魔法子弹的.h,添加一个void

UFUNCTION() void OnActorOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);

.cpp

void ASMagicProjectile::OnActorOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { if(OtherActor) { //注意是GetComponentByClass不是GetComponentsByClass USAttributeComponent* AttributeComp = Cast<USAttributeComponent>(OtherActor->GetComponentByClass(USAttributeComponent::StaticClass())); if(AttributeComp) { AttributeComp->ApplyHealthChange(-20.0f); Destroy(); } } }

最后修改碰撞选项

创建一个生命值的UMG

首先添加Canvas Panel,然后添加Horizontal Box,再添加ProgressBar和Text

在ProgressBar的Slot -> Size处改为Fill

在Text的Content ->Text处新建一个Binding

函数为接受之前创建的AttributeComponent的Float Health值

效果图:

受到子弹攻击会减少HP的数值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值