斯坦福UE4 C++课学习补充 14:UMG-优化血量条

文章目录

  • 一、优化执行效率
  • 二、简单脉冲动画

一、优化执行效率

  1. 绑定事件需要每一帧检查绑定对象是否有变化,势必造成CPU资源的浪费,因此优化执行效率的思路是:UI组件不再自行每帧查询血量,而是让血量自己在发生变化的同时通知UI进行刷新。
  2. 多播委托Multicast Delegate)是一种特殊的委托类型,它允许多个函数绑定到同一个委托实例,当该委托被调用时,会依次调用所有绑定的函数。这在需要通知多个对象或系统某个事件发生时非常有用。

参考链接:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.2

(1)声明多播委托
SurAttributeComponent.h

#pragma once
#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "SurAttributeComponent.generated.h"// 发起者,控件拥有者,改变后的血量,变化值
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOnHealthChanged, AActor*, InstigatorActor, USurAttributeComponent*, OwningComp, float, NewHealth, float, Delta);UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class SURKEAUE_API USurAttributeComponent : public UActorComponent
{GENERATED_BODY()protected:UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Attributes")float Health;public:USurAttributeComponent();// 声明一个多播委托实例UPROPERTY(BlueprintAssignable)FOnHealthChanged OnHealthChanged;// 要触发的函数UFUNCTION(BlueprintCallable, Category="Attributes")bool ApplyHealthChange(float Delta);}; 

(2)触发多播委托
SurAttributeComponent.cpp

#include "SurAttributeComponent.h"USurAttributeComponent::USurAttributeComponent()
{Health = 100;
}bool USurAttributeComponent::ApplyHealthChange(float Delta)
{Health += Delta;// 由多播实例触发多播委托,通知所有绑定的函数OnHealthChanged.Broadcast(nullptr, this, Health, Delta);return true;
} 

(3)绑定函数到多播委托

 MyCharacter->OnTakeDamage.AddDynamic(this, &AMyGameMode::OnCharacterTakeDamage);
  1. 回到UE,在PlayerAttributeComp中添加刚刚编写的OnHealthChanged事件,利用PrintString节点快速验证效果
    在这里插入图片描述
  2. 现在需要把这个事件分配给相应的UI控件PlayerHealth_Widget即可,绑定到血条(进度条)
  3. 在·PlayerHealth_Widget·的事件图表中编写蓝图程序,在“事件构造”一开始就将将玩家PawnAttributeComp绑定到OnHealthChanged事件上。在每次事件触发时计算当前血量与玩家默认血量的百分比,并设置给进度条。此外,我还顺便设置了文本块显示的内容,并在设计器中取消了上一节实现的绑定函数。如果在蓝图中找不到文本框变量,记得在设计器中把相应控件前的Is Variable打开。

二、简单脉冲动画

  1. 此这部分通过在UI中添加血量减少时的脉冲动画,来了解UMG中动画的使用
  2. 在左下角的“动画”中点击“添加动画”,命名为PulseHealthAnim,点击动画,并选择旁边的“时间轴”。选择显示血量数字的文本块,在细节中下滑找到“渲染变换”,将缩放添加为关键帧
  3. 将时间轴拖拽到0.75,添加关键帧;在0.25处,将缩放的XY设置为0.5再次添加关键帧。此时拖动时间轴(或者按下空格键),就可预览到这个简易的脉冲动画。切换切换到蓝图中,添加播放动画的节点。
  4. 在刚才设置关键帧的时候更改了文本缩放的默认值,此时需要回到设计器中,点击黄色返回键将文本的缩放变为默认值

参考链接:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/animating-umg-widgets-in-unreal-engine?application_version=5.2

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

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

相关文章

Linux环境下(DeepinV20+)安装并配置jdk和maven

一、jdk下载 Oracle的JDK开始收费了,如非必要,请勿使用!!! jdk下载地址1(推荐)https://github.com/graalvm/graalvm-ce-builds/releases jdk下载地址2(可选):…

LLM 大语言模型显存消耗估计与计算

LLM 大语言模型显存消耗估计与计算 1. LLM 大语言模型开发流程 在大模型(如 LLaMA-7B、GPT-3 等)的开发、训练、微调、推理和部署过程中,各个阶段的流程都涉及多个复杂的步骤。以下是详细的流程描述,涵盖训练和微调的区别&#…

SpringCloud+Vue3多对多,多表联查

♥️作者:小宋1021 🤵‍♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

学习日记:数据类型2

目录 1.转义字符 2.隐式类型转换 2.1 强制类型转换 2.2 不同类型间赋值 3.运算符 表达式 3.1 算术运算符 3.2 算术运算优先级 3.3 赋值运算 3.3.1 不同类型间混合赋值 3.4 逗号运算 4.生成随机数 5. 每日一练 1.转义字符 \n 表示换行 \t …

前端渲染模式

渲染的概念 在Web开发中,渲染(Rendering)是一个核心概念,指的是将应用程序的数据(data)与模板(template)结合,生成最终的HTML页面,这个页面随后会被浏览器解析…

RedHat9 | Ansible 角色

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 描述角色结构 Playbook可能比较冗长且负载,也可能存在大量的重复代码。而角色(roles)可以用于层次性结构化的组织playbo…

55. 跳跃游戏【 力扣(LeetCode) 】

一、题目描述 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 二、测试用…

在vue中优雅地异步引入(懒加载)腾讯地图API

背景 接到一个需求需要在网站首页显示使用腾讯地图展示公司所在地。一开始我直接全局引入了腾讯地图js,结果发现在用户打开登陆页面的时候首页比较缓慢,为了提高用户登陆的加载效率,需要优化为异步引入。 思路 根据官网的示例,…

SQL 注入漏洞详解 - Union 注入

1)漏洞简介 SQL 注入简介 SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,…

【前端 02】新浪新闻项目-初步使用CSS来排版

在今天的博文中,我们将围绕“新浪新闻”项目,深入探讨HTML和CSS在网页制作中的基础应用。通过具体实例,我们将学习如何设置图片、标题、超链接以及文本排版,同时了解CSS的引入方式和选择器优先级,以及视频和音频标签的…

分布式光伏并网AM5SE-IS防孤岛保护装置介绍——安科瑞 叶西平

产品简介 功能: AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。当发生孤岛现象时,可以快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全。 应用…

Hello 算法:动画图解、一键运行的数据结构与算法教程

Hello 算法 《Hello 算法》是一份开源、免费的数据结构与算法入门教程,特别适合新手。全书采用动画图解,内容清晰易懂,学习曲线平滑,引导初学者探索数据结构与算法的知识地图。源代码可以一键运行,帮助读者通过练习提…

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行…

springboot中使用knife4j访问接口文档的一系列问题

springboot中使用knife4j访问接口文档的一系列问题 1.个人介绍 🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的…

用Java手写jvm之实现查找class

写在前面 完成类加载器加载class的三阶段,加载,解析,初始化中的加载😀😀😀 源码 。 jvm想要运行class,是根据类全限定名称来从特定的位置基于类加载器来查找的,分别如下:…

解决R语言找不到系统库导致的报错

1、基本需知 1.1、系统库 系统库(System library)是一组预先编写和编译好的软件模块集合,用于支持操作系统的基本功能和提供一些常见的服务。这些库通常由操作系统或第三方开发者提供,并且在系统安装过程中被预装或者用户可以额…

崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

前言 首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB》(作者:小草),满满…

【vue前端项目实战案例】之Vue仿饿了么App

本文将介绍一款仿“饿了么”商家页面的App。该案例是基于 Vue2.0 Vue Router webpack ES6 等技术栈实现的一款外卖类App,适合初学者进行学习。 项目源码下载链接在文章末尾 1 项目概述 该项目是一款仿“饿了么”商家页面的外卖类App,主要有以下功能…

51单片机嵌入式开发:17、STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息

51单片机嵌入式开发 STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息 51单片机嵌入式开发STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单片机电路2.4 数码管…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置4.编写测试类Entity层Mapper接口MapperXML文件测试类 5.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是: 2.3.…