血量条

先看一下最终效果

这里写图片描述

上面红色的就是血条啦,在游戏运行的时候可以随血量增加减少而使红色部分的长度发生变化

一、首先说明,我的Character是在c++中建立的,各个组件都是在c++中添加的,所以血条也是在蓝图中画好后加到c++里的。

二、先画一个血条:创建一个widget,添加一个ProgressBar组件即可:调好位置(尽量调到(500,500)以内,原因在“四、5”中说明),“Bar Fill Type”就是血量变化的方向,可以根据需要进行选择,其他的属性可以自行选择更改,如图:

这里写图片描述

三、现在进入c++中,首先在.h文件中声明WidgetComponent组件以及其他要用到的函数和变量:


    //组件
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Mesh)
        class UWidgetComponent* EagleBloodWidget;

    //初始化完组件后调用这个函数
    virtual void PostInitializeComponents() override;

    //ProgressBar
    UPROPERTY()
        class UProgressBar *HPBarProgress;

四、编写c++代码

1.先添加头文件
#include "Components/WidgetComponent.h"
#include "Components/ProgressBar.h"
#include "Runtime/UMG/Public/Components/ProgressBar.h"
2.首先在构造函数中添加这个组件:
    // 初始化EagleBloodWidget

    //从蓝图中找到UserWidget这个蓝图类
    static ConstructorHelpers::FClassFinder<UUserWidget>  EagleBloodShow(TEXT("/Game/UMG/BP_Blood"));//注意路径要去掉.以及其后的内容

    //添加组件
    EagleBloodWidget = CreateDefaultSubobject<UWidgetComponent>(TEXT("EagleBlood"));

    //附着
    EagleBloodWidget->SetupAttachment(GetCapsuleComponent());

    //选定刚找到的UserWidget来设置EagleBloodWidget
    EagleBloodWidget->SetWidgetClass(EagleBloodShow.Class);
3.完善PostInitializeComponents()函数
void AEagle::PostInitializeComponents()
{
    Super::PostInitializeComponents();

    UUserWidget* CurrentWidget = EagleBloodWidget->GetUserWidgetObject();

    if (NULL != CurrentWidget)
    {
        //TEXT中填写的是你在蓝图中创建的ProgressBar的名字,因为是根据名字进行寻找
        HPBarProgress = Cast<UProgressBar>(CurrentWidget->GetWidgetFromName(TEXT("ProgressBar_24")));
        if (NULL != HPBarProgress)
        {
            //设置初始的百分比,可以根据需要任意设置
            HPBarProgress->SetPercent(1.f);
        }
    }
}
4.在需要更改血量条的时候调用
HPBarProgress->SetPercent(Percent);

我的是在Tick中写的,如下:

    if (CurrentEagleBlood>=0)
    {
        //注意是float,int相除得到的是0,给我坑了好久
        HPBarProgress->SetPercent((float)((float)CurrentEagleBlood / (float)MaxEagleBlood));//更新血条长度
    }
5.现在编译运行,从c++类创建一个蓝图子类如下图所示:

这里写图片描述

看右边的“User Interface”:其中的“Widget Class”已经成了我们选择的Widget;“Draw Size”中则是(500,500),表明选择的是Widget中(500,500)以内的内容,所以之前要把Progress Bar尽量放在(500,500)以内。

接下来运行就能看到血量条的变化啦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值