当前位置: 首页 > news >正文

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.效果如下:

点击

相关文章:

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

一. 1.C创建一个继承Widget类的子类&#xff0c; 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…...

抖店无货源违规频发,不能入驻?这个是真的吗?

我是电商珠珠 还没有踏入抖店这个电商行业的新手&#xff0c;单从别人的口中&#xff0c;听说了抖店无货源特别容易违规&#xff0c;还会被扣除全部的保证金&#xff0c;得不偿失之类的话。有的还专门劝诫新手不要做抖店&#xff0c;做了就会亏本之类的话&#xff0c;这搞得人…...

HarmonyOS—开发云数据库

您可以在云侧工程下开发云数据库资源&#xff0c;包括创建对象类型、在对象类型中添加数据条目、部署云数据库。 创建对象类型 对象类型&#xff08;即ObjectType&#xff09;用于定义存储对象的集合&#xff0c;不同的对象类型对应的不同数据结构。每创建一个对象类型&#…...

mysql查询某个数据库的数量有多少GB

要查询MySQL数据库中某个数据库&#xff08;或称为“schema”&#xff09;所占用的磁盘空间大小&#xff08;以GB为单位&#xff09;&#xff0c;你可以使用information_schema数据库中的TABLES和DATA_LENGTH、INDEX_LENGTH字段来获取每个表的数据和索引的大小&#xff0c;然后…...

table展示子级踩坑

##elemenui中table通过row中是否有children进行判断是否展示子集&#xff0c;通过设置tree-prop的属性进行设置&#xff0c;子级的children的名字可以根据自己的子级名字进行替换&#xff0c;当然同样可以对数据处理成含有chilren的子级list。 问题&#xff1a; 1.如果是根据后…...

xss过waf的小姿势

今天看大佬的视频学到了几个操作 首先是拆分发可以用self将被过滤的函数进行拆分 如下图我用self将alert拆分成两段依然成功执行 然后学习另一种姿势 <svg id"YWxlcnQoIlhTUyIp"><img src1 οnerrοr"window[eval](atob(document.getElementsByTagNa…...

【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;

InnoDB 这是一个MySQL组件&#xff0c;结合了高性能和事务处理能力&#xff0c;以确保可靠性、健壮性和并发访问。它体现了ACID设计哲学。它作为一个存储引擎存在&#xff0c;处理使用ENGINEINNODB子句创建的或修改的表。请参阅第14章“InnoDB存储引擎”以获取有关架构细节和管…...

可移植性(兼容性)测试指南

可移植性是指应用程序能够安装到不同的环境中&#xff0c;在不同的环境中使用&#xff0c;甚至可以移动到不同的环境中。当然&#xff0c;前两者对所有系统都很重要。就PC软件而言&#xff0c;鉴于操作系统、共存和互操作应用程序、硬件、带宽可用性等方面的快速变化&#xff0…...

软件更新快讯-Obsidian更新-1.5.8 linux Appimage直装

更新内容 1.5.8&#xff1a; 从具有相同属性的文件导航时&#xff0c;固定属性不会显示。 修复了Home和End在导航文档顶部和底部时不总是起作用的问题。 Fixed properties not appearing when navigating from a file that has the same properties.Fixed Home and End not a…...

Android Gradle开发与应用 (二) : Groovy基础语法

1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言&#xff0c;语法和Java非常相似&#xff0c;并能够无缝地与Java代码集成和互操作&#xff0c;增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点&#xff0c;意味着&#xff0c;如果我们完全不懂…...

iptables学习

iptables的4表5链的处理流程 一&#xff1a;业务地址请求服务时&#xff0c;首先经过iptables服务&#xff0c;iptables通过校验规则&#xff0c;通过校验是否同意业务访问&#xff0c;规则从上到下&#xff0c;匹配规则都失败了的话&#xff0c;走默认规则 &#xff08;1&…...

kafka 集群搭建

kafka集群搭建 1. kafka介绍 Apache Kafka是一个开源的流处理平台&#xff0c;由Scala和Java编写1。它是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统2。Kafka的最大特…...

springboot-基础-eclipse配置+helloword示例

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 下一篇&#xff1a;springboot-基础-添加model和controller的简单例子常用注解含义 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse&#xff0c;也就是…...

关于HTML标签应用教程

简介 HTML&#xff08;HyperText Markup Language&#xff09;是用于创建网页结构的标记语言。在本教程中&#xff0c;我们将介绍一些常用的HTML标签&#xff0c;以及它们的用法和示例。 1. HTML基础结构 <!DOCTYPE html> <html> <head><title>页面…...

3. 台阶问题

数楼梯 题目描述 楼梯有 N N N 阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 输入格式 一个数字&#xff0c;楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4样例输出 #1 5提示…...

推荐一个 Obsidian 的 ChatGPT 插件

源码地址&#xff1a;https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容&#xff0c;以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT&#xff0c;还提供了优…...

aws的RDS数据库开启慢查询日志

#开启慢日志两个参数 slow_query_log 1 设置为1&#xff0c;来启用慢查询日志 long_query_time 5 &#xff08;单位秒&#xff09; sql执行多长时间被定义为慢日志1. 点击RDS然后点击参数组&#xff0c;选择slow_query_log&#xff0c;设置为1【表示开启慢日志】点击保存…...

一文读懂 Python 值传递和引用传递

文章目录 版本前言形参和实参值传递和引用传递Python 变量存储值语义和引用语义值语义引用语义 探讨 Python 值传递和引用传递不可变&#xff08;immutable&#xff09;类型可变&#xff08;mutable&#xff09;类型案例一案例二 拓展&#xff1a;不可变类型真的不可变&#xf…...

Linux进阶——系统安全,重要文件,加固系统的相关配置

目录 引出Linux系统安全一、重要文件二、帐户口令三、权限管理四、日志配置五、服务安全六、其他配置 缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Linux进阶——系统安全&#xff0c;重要文件&#xff0c;加固系统的相关配置 Linux系统安…...

C++三级专项 字符串逆序

输入一串‘&#xff01;’结束的字符&#xff0c;按逆序输出。 输入 如题述。 输出 如题述。 输入样例 abc! 输出样例 cba解析&#xff1a;strlen(s)用来计算指定的字符串s的长度&#xff0c;不包括结束字符“\0”。 不准直接抄&#xff01;&#xff01;&#xff01; …...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...