当前位置: 首页 > 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.dtcms.com/a/294476.html

相关文章:

  • Effective Python 第15条 不要过分依赖给字典添加条目时所用的顺序
  • Kafka的介绍
  • Linux 或者 Ubuntu 离线安装 ollama
  • windows 11 下git软件提交正常,idea git提交总提示需要token
  • Java设计模式-备忘录模式
  • 前缀和经典问题整理
  • 扫描电镜与透射电镜联用表征形貌与元素组成-测试GO
  • C语言(20250723)
  • Zookeeper基本功能和应用场景
  • Zookeeper学习专栏(八):使用高级客户端库Apache Curator
  • 【数据结构初阶】--树和二叉树先导篇
  • spring的value注解
  • 使用Qt下QAudioOutput播放声音
  • Google DeepMind发布MoR架构:50%参数超越传统Transformer,推理速度提升2倍
  • 网络安全威胁和防御措施
  • 水库大坝安全自动监测系统:守护水脉长城的智能防线
  • DDD领域驱动设计C++实现案例:订单管理系统
  • mysql 远程连接配置
  • 比特币技术简史 第六章:网络协议 - P2P网络、节点类型与消息传播
  • SCDN:网络安全新防线下的技术革新与安全效能
  • SQL数据清洗实用函数——以具体场景为例详细学习
  • (一)从零搭建unity3d机械臂仿真-unity3d导入urdf模型
  • 初识opencv02——图像预处理1
  • Spark实现WorldCount执行流程图
  • 生产环节网页适配难题:老旧浏览器与新型工控设备的兼容性突围
  • 【LeetCode 热题 100】78. 子集——(解法二)回溯+选哪个
  • 第十一章 W55MH32 SMTP示例
  • C# 值类型与引用类型的储存方式_堆栈_
  • Java面试宝典:Spring专题一
  • C语言-函数