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

UE5多人MOBA+GAS 29、创建一个等级UI

文章目录

  • 制作一个材质函数提供两个材质使用
  • 创建等级UI的cpp文件
  • 蓝图中创建UI并添加到主UI上


制作一个材质函数提供两个材质使用

创建一个材质函数
在这里插入图片描述
在技能中替换一下
在这里插入图片描述
给等级的经验条创建一个UI材质
在这里插入图片描述

if(gradient == 0)
{return 0;
}if(gradient < thickness)
{return 1;
}return 0;

在这里插入图片描述

创建等级UI的cpp文件

在这里插入图片描述

// 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Image.h"
#include "Components/TextBlock.h"
#include "GAS/Core/CAttributeSet.h"
#include "LevelGauge.generated.h"/*** ULevelGauge* 用于显示角色等级进度的UI控件(包含进度条和文本显示)* 依赖GameplayAbilities系统实现属性绑定*/
UCLASS()
class CRUNCH_API ULevelGauge : public UUserWidget
{GENERATED_BODY()
public:virtual void NativeConstruct() override;private:/*** 材质参数名称(用于动态调整进度条材质)* 在编辑器中可配置,默认值为"Percent"*/UPROPERTY(EditDefaultsOnly, Category = "Visual")FName PercentMaterialParamName = "Percent";// 等级进度条UPROPERTY(meta = (BindWidget))TObjectPtr<UImage> LevelProgressImage;// 等级文本UPROPERTY(meta = (BindWidget))TObjectPtr<UTextBlock> LevelText;// 数字格式化设置FNumberFormattingOptions NumberFormattingOptions;TObjectPtr<const UAbilitySystemComponent> OwnerASC;void UpdateGauge(const FOnAttributeChangeData& Data);
};
// 幻雨喜欢小猫咪#include "LevelGauge.h"#include "AbilitySystemBlueprintLibrary.h"
#include "GAS/Core/CHeroAttributeSet.h"void ULevelGauge::NativeConstruct()
{Super::NativeConstruct();// 设置为无小数格式NumberFormattingOptions.SetMaximumFractionalDigits(0);// 获取角色APawn* OwnerPawn = GetOwningPlayerPawn();if (!OwnerPawn) return;// 通过角色获取ASC组件UAbilitySystemComponent* OwnerAbilitySystemComponent = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(OwnerPawn);if (!OwnerAbilitySystemComponent) return;OwnerASC = OwnerAbilitySystemComponent;// 构造的时候触发一次修改UpdateGauge(FOnAttributeChangeData());// 绑定属性变化委托:// 监听经验属性变化(当前经验值)OwnerAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCHeroAttributeSet::GetExperienceAttribute()).AddUObject(this, &ULevelGauge::UpdateGauge);// 监听升级所需经验属性变化下一级的经验值OwnerAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCHeroAttributeSet::GetNextLevelExperienceAttribute()).AddUObject(this, &ULevelGauge::UpdateGauge);// 监听上一级经验属性变化该等级的启始经验值OwnerAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCHeroAttributeSet::GetPrevLevelExperienceAttribute()).AddUObject(this, &ULevelGauge::UpdateGauge);// 监听等级属性变化(用于显示当前等级)OwnerAbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(UCHeroAttributeSet::GetLevelAttribute()).AddUObject(this, &ULevelGauge::UpdateGauge);
}void ULevelGauge::UpdateGauge(const FOnAttributeChangeData& Data)
{// 查询属性值时的标记bool bFound;// 获取当前经验值float CurrentExperience = OwnerASC->GetGameplayAttributeValue(UCHeroAttributeSet::GetExperienceAttribute(), bFound);if (!bFound) return;// 获取升级所需经验值float NextLevelExperience = OwnerASC->GetGameplayAttributeValue(UCHeroAttributeSet::GetNextLevelExperienceAttribute(), bFound);if (!bFound) return;// 获取上一级经验值float PrevLevelExperience = OwnerASC->GetGameplayAttributeValue(UCHeroAttributeSet::GetPrevLevelExperienceAttribute(), bFound);if (!bFound) return;// 获取当前等级float CurrentLevel = OwnerASC->GetGameplayAttributeValue(UCHeroAttributeSet::GetLevelAttribute(), bFound);if (!bFound) return;// 更新等级LevelText->SetText(FText::AsNumber(CurrentLevel, &NumberFormattingOptions));// 计算进度百分比// 获取当前等级获取到的经验float Progress = CurrentExperience - PrevLevelExperience;// 获取到下一级等级需要获取到的经验float LevelExpAmt = NextLevelExperience - PrevLevelExperience;float Percent = Progress / LevelExpAmt;// 满级if (NextLevelExperience == 0.f){Percent = 1.f;}// 更新进度条材质if (LevelProgressImage){LevelProgressImage->GetDynamicMaterial()->SetScalarParameterValue(PercentMaterialParamName, Percent);}
}

蓝图中创建UI并添加到主UI上

创建对应的蓝图类
在这里插入图片描述
再放进UI里
在这里插入图片描述
设置一下升级点数的获取
在这里插入图片描述

vv
在这里插入图片描述

http://www.lryc.cn/news/597420.html

相关文章:

  • k8s中的configmap存储
  • K8s:离线部署Kubernetes1.26.12及采用外部Harbor
  • CSP-J系列【2023】P9751 [CSP-J 2023] 旅游巴士题解
  • 视频孪生赋能数字住建:构建智慧城市新蓝图​
  • 绿地集团携手深兰科技推动AI医诊大模型快速落地
  • 【补题】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two
  • Python 爬虫(一):爬虫伪装
  • .NET-键控服务依赖注入
  • C 语言基础第9天:一、二维数组
  • 基于Python的新闻爬虫:实时追踪行业动态
  • 网络调制技术对比表
  • 【CNN】模型评估标准
  • 开源新基准!OmniGen2 文本图像对齐度提升 8.6%,视觉一致性超越现有开源模型15%
  • MIPI DSI 转 1LVDS ,分辨率1920*1080.
  • 变频器带动电机:全方位解析参数变化
  • 14. 如何获取用户浏览器内核
  • 【无标题】word 中的中文排序
  • Docker详解及实战
  • Oracle物化视图详解
  • RPA认证考试全攻略:如何高效通过uipath、实在智能等厂商考试
  • InfluxDB HTTP API 接口调用详解(一)
  • 【DataWhale】快乐学习大模型 | 202507,Task06笔记
  • Hexo - 免费搭建个人博客03 - 将个人博客托管到github,个人博客公开给大家访问
  • 深度相机---像素转物理尺寸
  • Paimon的部分更新以及DeleteVector实现
  • 篇四 tcp,udp客户端服务器编程模型
  • MYSQL 笔记3
  • 实验室信息管理系统的设计与实现/实验室管理系统
  • lwIP学习记录5——裸机lwIP工程学习后的总结
  • 【bug】websocket协议不兼容导致的一个奇怪问题