UE5 C++ Widget练习 Button 和 ProgressBar创建血条

一.

1.C++创建一个继承Widget类的子类, 命名为MyUserWidget

2.加上Button 和 UserWidget的头文件

#include "CoreMinimal.h"
#include "Components/Button.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"

3.声明两个按钮 组件,两个浮点数。每次按Start按钮,当前生命值就减一。和两个准备用来代理调用的函数Start,Quit。减少并更新生命值状态的函数UpdateLife。

并且重写Initialize函数,实现初始化。相当于Actor里个Begin()。

	UPROPERTY(meta = (BindWidget))UButton* ButtonStart;UPROPERTY(meta = (BindWidget))UButton* ButtonQuit;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "MyHealth")//UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyTestDataTableStruct")float CurrentLife = 100.f;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "MyHealth")float MaxLife = 100.f;void UpdateLife();virtual bool Initialize()override;UFUNCTION()void Start();UFUNCTION()void Quit();

4.使用Button里的,OnClicked 绑定代理。

bool UMyUserWidget::Initialize()
{if (!Super::Initialize()){return false;}//ButtonStart->OnClicked.AddDynamic(this,&MyUserWid);  //代理绑定ButtonStart->OnClicked.AddDynamic(this,&UMyUserWidget::Start);ButtonQuit->OnClicked.AddDynamic(this, &UMyUserWidget::Quit);return true;
}

5.代理时,按下按钮里的函数再套用减少血量的函数。

void UMyUserWidget::Start()
{UpdateLife();GEngine->AddOnScreenDebugMessage(-1,5.f,FColor::Red,TEXT("Start"));
}void UMyUserWidget::Quit()
{GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Quit"));
}

二 蓝图里操作

1.创建一个Widget Blueprint。

2.加入三个组件,按钮组件需要和C++里命名一样。

3.将新建的UMG_Widget里的classsetting里的继承的父类,修改为MyUserWiget。这样C++里的逻辑就在这里了。

4.将ProgessBar里Percent,创建绑定的蓝图函数。

5.这里的C++声明过的参数可以直接访问到,计算现阶段血量的百分比,赋值给ProgressBar

6.在PlayerController里面,添加这个Widget。之前PlayerController里曾设置Pawn,并绑定相机。

官方文档:

C++里的写法如下:

新添加Blueprint/UserWidget.h的头文件

#include "MyPlayerController.h"
#include "MyPawn.h"
#include"Blueprint/UserWidget.h"

UClass指针 指向 动态加载LoadClass<UUserWidget>类(MyUserWidget),UserWidget指针 指向 用CreateWidget实例化UClass指向的类。并将它 AddToViewport。

void AMyPlayerController::BeginPlay()
{Super::BeginPlay();UClass* widgetClass = LoadClass<UUserWidget>(NULL,TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/UMG_Widget.UMG_Widget_C'")); //动态加载UUserWidget* MyWidgetClss = nullptr;MyWidgetClss = CreateWidget<UUserWidget>(GetWorld(),widgetClass); //创建UUserWidgetMyWidgetClss->AddToViewport();
}

7.效果如下:

点击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/493727.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[设计模式Java实现附plantuml源码~行为型]算法的封装与切换——策略模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

助力智能化农田作物除草,基于DETR(DEtection TRansformer)模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中&#xff0c;关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了&#xff0c;结合智能化的设备可以实现只能除草等操作&#xff0c;玉米作物场景下的杂草检测我们则少有涉及&#xff0c;这里本文的主要目的就是想要基于DETR模型来开发构建玉米…

SIMON 32/64加密电路的实现(System Verilog)

关于SIMON加密电路的原理&#xff0c;参考之前发布的博文【SIMON加密算法的原理】 1.总览与电路介绍 1.1 电路总体结构图 1.2 模式配置介绍 SIMON加密算法的分组长度、密钥长度以及必要的参数配置如下图&#xff1a; 本次需要实现的是SIMON 32/64&#xff0c;即分组长度2n3…

影像仪满足0.02㎜~4㎜的筛网检测需求

影像仪具有高精度、高效、全面数据分析和可视化展示的测量优势。通过影像测量技术&#xff0c;可以有效解决筛网检测中的难题&#xff0c;提高工作效率和工作质量&#xff0c;为筛网的使用和管理提供科学依据&#xff0c;推动筛网行业的发展。 筛网检测的难点 1、超细筛网的…

PHP+vue+mysql校园论坛bbs系统w076f-

本文尝试以B/S架构设计模式中的vue框架&#xff0c;php语言为基础&#xff0c;通过必要的编码处理、BBS论坛系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法&#xff0c;旨在完成一个快速、高效、便捷的BBS论坛系统。本系统以用户与管理员两类人&#xff0c;作为…

Redis 服务集群、哨兵、缓存及持久化的实现原理和应用场景

Redis 是一种高性能的键值存储系统&#xff0c;已经成为了许多企业和互联网公司的核心技术之一。本文将介绍 Redis 的服务集群、哨兵以及缓存实现原理和应用场景&#xff0c;以帮助读者更好地理解和使用 Redis。 引言&#xff1a; 随着互联网应用规模不断扩大&#xff0c;Redi…

Datawhale-Sora技术原理分享

目录 Sora能力边界探索 Sora模型训练流程 Sora关键技术拆解 物理引擎的数据进行训练 个人思考与总结 参考 https://datawhaler.feishu.cn/file/KntHbV3QGoEPruxEql2c9lrsnOb

动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】

动态规划动态规划之第 N 个泰波那契数/三步问题 动态规划LeetCode题目第 N 个泰波那契数求解1求解2&#xff08;滚动数组&#xff09; 三步问题求解1求解2&#xff08;滚动数组&#xff09; 动态规划 如果问题是由重叠的子问题构成的&#xff0c;那就可以用动态规划&#xff08…

限流算法八股笔记

前言&#xff1a;本文是限流算法的八股总结和详解&#xff0c;博主在准备暑期实习&#xff0c;应该会持续更新 参考文章 服务限流详解 5种限流算法&#xff0c;7种限流方式&#xff0c;挡住突发流量&#xff1f; 超详细的Guava RateLimiter限流原理解析 使用Guava实现限流器…

react useRef用法

1&#xff0c;保存变量永远不丢失 import React, { useState,useRef } from react export default function App() { const [count,setcount] useState(0) var mycount useRef(0)//保存变量永远不丢失--useRef用的是闭包原理 return( <div> <button onClick{()>…

SocketError | Socket错误码一览表(每一种错误码的故障排查建议)

Socket错误码一览表 文章目录 Socket错误码一览表前言错误码表 前言 在软件开发和网络通信编程中&#xff0c;SocketError算是一个绕不开的坎。它可能因为各种原因而来&#xff0c;比如网络问题、用户搞错了、应用程序出错等等。本文整理一张SocketError排查建议表格就是为了帮…

蜘蛛蜂优化算法SWO求解不闭合MD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&#xff0c;具有搜索速度快&#xff0c;求解精度高的优势。VRPTW&#x…