持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
前言
角色扮演类的游戏免不了要给角色添加一个血条来显示当前角色的生命值,所以血条对于玩家来说也是一个非常重要的提示工具,今天就让我来带大家用 UE4 的进度条制作一个简单的血条吧!
正文
本文制作血条分为俩个部分,分别是通过蓝图来设计UMG,然后再通过 C++ 代码去实现血条生命值。
蓝图
打开我们的虚幻编辑器,然后右键选择 UserInterface->Widget Blueprint 来创建一个UI,取名 Health_Widget。
双击打开它,然后我这边血条用的是Progress Bar来实现,于是找到控件 Progress Bar,将其拖入到UI中,并调整大小。
然后为了测试我们的血条是有进度的,我在UI中添加了一个测试按钮,点击按钮后,血条就会慢慢回血。最后的效果图如下:
接下来需要将这个 UI 关联到我们的代码,新建一个 C++ 类继承自 UserWidget, 我们取名 HealthWidget:
回到我们的 Health_Widget 中,然后在类设置中将其 Parent Class 设置为我们新创建的类:HealthWidget。
代码
蓝图设置完成以后,接下来就要来写我们的代码逻辑了,通过 VS 打开我们的UE项目工程,然后在 HealthWidget 中,通过UE的反射机制来获取控件的实例。这里为了测试,我使用了定时器的方式来给血条回血,代码比较简单,如下:
HealthWidget.h
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Button.h"
#include "Components/ProgressBar.h"
#include "Components/TextBlock.h"
#include "HealthWidget.generated.h"
/**
*
*/
UCLASS()
class DP_API UHealthWidget : public UUserWidget
{
GENERATED_BODY()
public:
virtual bool Initialize() override;
UFUNCTION()
void TestLoadEvent();
void Repeating();
public:
UPROPERTY(Meta = (BindWidget))
UProgressBar *HealthProgressBar;
UPROPERTY(Meta = (BindWidget))
UButton *TestBtn;
UPROPERTY(Meta = (BindWidget))
UTextBlock *processValue;
float pValue;
FTimerHandle MemberTimerHandle;
};
HealthWidget.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "HealthWidget.h"
#include "TimerManager.h"
bool UHealthWidget::Initialize()
{
if (!Super::Initialize())
{
return false;
}
if(TestBtn != nullptr)
{
TestBtn->OnClicked.__Internal_AddDynamic(this, &UHealthWidget::TestLoadEvent, FName("TestLoadEvent"));
}
return true;
}
void UHealthWidget::TestLoadEvent()
{
FTimerManager& timerManager = GetWorld()->GetTimerManager();
timerManager.SetTimer(MemberTimerHandle, this, &UHealthWidget::Repeating, 2.0f, true, 0);
}
void UHealthWidget::Repeating()
{
pValue += 2.0f;
if(pValue > 100)
{
GetWorld()->GetTimerManager().ClearTimer(MemberTimerHandle);
return;
}
HealthProgressBar->SetPercent(pValue/100);
}
这里需要注意的是,通过 UPROPERTY(Meta = (BindWidget)) 来获取控件实例的时候,在我们的UMG里名称需要与我们的代码保持一致,如图:
最后
最终效果如图:
一个简单的角色血条就做好了,你学会了吗?
我是杰少,如果您觉的我写的不错,那请给我 点赞+评论+收藏 后再走哦!
往期文章:
- 使用 Google Breakpad 来助力解决程序崩溃
- UE4 多人游戏服务器探索
- 使用虚幻引擎自动化工具实现自动化部署
- 如何在 UE4 中制作一扇自动开启的大门
- 如何在 UE4 中用代码去控制角色移动
- 如何给 UE4 场景添加游戏角色
- UE4:Android 平台开发实践指南
- UE4 开发避坑指南(持续更新)
- 新年开工啦,放个小烟花庆祝一下
- 聊聊与苹果审核员的爱恨情仇(下)
- 聊聊与苹果审核员的爱恨情仇(上)
- 一名普通工具人的 2021 | 2021年终总结
- 二叉树刷题总结:二叉搜索树的属性
- 二叉树总结:二叉树的属性
- 二叉树总结:二叉树的修改与构造
- StoreKit2 有这么香?嗯,我试过了,真香
- 看完这篇文章,再也不怕面试官问我如何构造二叉树啦!
- 那帮做游戏的又想让大家氪金,太坏了!
- 手把手带你撸一个网易云音乐首页 | 适配篇
- 手把手带你撸一个网易云音乐首页(三)
- 手把手带你撸一个网易云音乐首页(二)
- 手把手带你撸一个网易云音乐首页(一)
- 代码要写注释吗?写你就输了
- Codable发布这么久我就不学,摸鱼爽歪歪,哎~就是玩儿
- iOS 优雅的处理网络数据,你真的会吗?不如看看这篇
- UICollectionView 自定义布局!看这篇就够了
请你喝杯 ☕️ 点赞 + 关注哦~
- 阅读完记得给我点个赞哦,有👍 有动力
- 关注公众号--- HelloWorld杰少,第一时间推送新姿势
最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~**