Unreal Engine 4 C++ UMG血条及头顶信息
来源:互联网 发布:理财规划师网络课程 编辑:程序博客网 时间:2024/04/19 11:28
- Unreal Engine 4 C UMG血条及头顶信息
- 创建血条控件
- 使用编辑器添加血条
- 使用C添加血条
- 血条的更新
Unreal Engine 4 C++ UMG血条及头顶信息
好记性不如烂笔头啊,还是记录一下!
创建血条控件
首先在内容里创建一个UI的控件蓝图
接着在控件中的CanvasPanel中创建一个ProgressBar
设置锚点为下图中的样子:
细节设置可以跟根据你的喜好来。这里有几个必须要弄的东西:
- Alignment 设置为X:0.5 Y:0.5
- BackGround Image 是背景图片,根据你的需求弄。
- Fill Image 是填充图片,同样根据你的需求弄
- Bar Fill Type 一般是选Left To Right
血条控件就创建完成了。
使用编辑器添加血条
我们先来介绍第一种方式,用编辑器添加血条。
往角色上添加一个新的WidgetComponent:
设置WidgetComponent如下图所示:
这里也有几个参数要讲一下:
Space 有两种方式World和Screen
World方式是绘制在场景中,会被物体遮挡,相当于一个场景的公告板。
Screen方式是绘制在屏幕上,不会被物体遮挡,并且一直面向摄像机。Widget Class 就是选择你要渲染的控件,选择刚才你创建的空间蓝图。
- Draw Size 就是你要绘制的尺寸,根据你的需要调整。
拖动WidgetComponent到角色头顶位置,
调整完后我们来测试一下,就会发现血条正常显示在了头顶:
蓝图绑定并更新血条这里我就不介绍了(其实我不会用蓝图绑定。。。),本文着重介绍C++部分
使用C++添加血条
我们在来看第二种方式,用C++添加血条
首先在你角色类中添加以下属性:
- MyCharacter.h
// 如果使用GENERATED_BODY()宏// 添加构造函数AMyCharacter(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());// // 在本文我直接使用GENERATED_UCLASS_BODY()宏GENERATED_UCLASS_BODY()// ...// WidgetComponentUPROPERTY(EditAnywhere, Category = WidgetComponent)class UWidgetComponent* WidgetComponent;
关于GENERATED_UCLASS_BODY()和GENERATED_BODY()宏,详见Unreal Eegine 4 C++ UCLASS构造函数易出错分析
我们在头文件添加了一个UWidgetComponent的指针,接着就该实现了,在构造函数:
- MyCharacter.cpp
AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer){ // ....你的代码 // 初始化WidgetComponent WidgetComponent = CreateDefaultSubobject<UWidgetComponent>(TEXT("WidgetComponent")); WidgetComponent->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform); // 设置Widget Class UClass* Widget = LoadClass<UUserWidget>(NULL, TEXT("WidgetBlueprint'/Game/UI/widget/HpBar.HpBar_C'")); WidgetComponent->SetWidgetClass(Widget);}
我们先初始化了WidgetComponent,然后把他添加到角色身上。接着我们读取了我们之前创建的蓝图控件,然后设置给了WidgetComponent(路径可以通过右键点击控件蓝图,选择复制引用)
注意:这里有个大坑,动态加载UClass时需要在资源路径结尾增加“_C”
编译你的代码,你的角色就可以显示出血条了:
血条的更新
血条已经显示出来来了,接下来的工作就是怎么来更新他的长度,我们先要找到控件:
- MyCharacter.h
public: // 在初始化完组件之后调用 virtual void PostInitializeComponents() override; // HpBarWidget UPROPERTY() UProgressBar* HPBarProgress;
我们需要在PostInitializeComponents函数中找到控件,因此我们重写了此方法。然后定义了一个UProgressBar指针来存储它,我们来看看实现部分:
- MyCharacter.cpp
void AMyCharacter::PostInitializeComponents(){ Super::PostInitializeComponents(); UUserWidget* CurrentWidget = WidgetComponent->GetUserWidgetObject(); if ( NULL != CurrentWidget ) { HPBarProgress = Cast<UProgressBar>(CurrentWidget->GetWidgetFromName(TEXT("HPBarProgress"))); if (NULL != HPBarProgress) { HPBarProgress->SetPercent(0.1f); } }}
这个函数中我们先获得了WidgetComponent当前正在显示的控件,然后我们在控件里用GetWidgetFromName方法找到了血条的控件。然后为了方便测试,在不为空的时候,我们把血量设置为了还有10%。现在我们成功找到了并存储了血条控件。你可以在你想要的地方更新血条的长度,只需要调用下面的方法:
HPBarProgress->SetPercent(HpPercent);
这就完成了血条部分的更新。
- Unreal Engine 4 C++ UMG血条及头顶信息
- Unreal Engine 4 C++ UMG自定义控件
- Unreal Engine 4 C++ 动态加载UMG界面
- [UE4]用UMG方式实现Character头顶显示3D血条
- Unreal Engine 4 发布
- Unreal Engine 4 Terminology
- unreal engine 4 生成Actor及实例化UObject对象
- 从Unreal Engine 3到Unreal Engine 4
- 从Unreal Engine 3到Unreal Engine 4
- Unreal Engine 4 编码规范
- Unreal Engine 4 字符串转换
- Unreal Engine 4:数据存储
- Unreal Engine 4 术语简介
- Unreal Engine 4 初始化流程
- Unreal Engine 4 字符串转换
- Unreal engine 4 Automation Test
- Unity 绘制人物头顶的血条
- 敌人头顶血条的制作心得
- dbms_alert(预警)
- Linux下history命令详解---转载
- com.microsoft.sqlserver.jdbc.SQLServerException: 不支持此服务器版本。目标服务器必须是 SQL Server 2000 或更高版本。
- 批处理打包 AssetBundle(一)
- 怎样让Service不被杀死?
- Unreal Engine 4 C++ UMG血条及头顶信息
- strace 线程跟踪详解
- Sublime Text 3最好的功能、插件和设置
- android 点击全屏设置
- 浅谈TCP/IP网络编程中socket的行为
- jquery.form完美ajax表单提交插件全部代码
- Lua中对table排序实例
- Eclipse快捷键
- HDOJ.1051 Wooden Sticks (贪心)