26. UE5 RPG同步面板属性(二)
在上一篇,我们解析了UI属性面板的实现步骤:
- 首先我们需要通过c++去实现创建GameplayTag,这样可以在c++和UE里同时获取到Tag
- 创建一个DataAsset类,用于设置tag对应的属性和显示内容
- 创建AttributeMenuWidgetController实现对应逻辑
并且我们实现了第一步,就是在C++里可以创建GameplayTag,并且可以通过单例去获取到Tag的变量。后面属性修改委托也会通过Tag去匹配,这一篇,我们将实现创建一个DataAsset类,用于存储UI显示所需的数据。
创建DataAsset类
这里就有一个问题了,为什么这里使用DataAsset而不是DataTable?
DataTable主要用于存储和读取数据,是一种灵活的数据结构,可以用于存储和维护大量的静态数据。而DataAsset则是一种将资源集合在一起的方式,用于实现资源管理。通过DataAsset,可以将某个对象(如英雄)所使用的所有资源集合在一起,当需要加载该对象时,只需加载对应的DataAsset,从而避免了加载不必要的资源。DataAsset需要手动定义数据结构并添加引用的数据,它只存储引用,并不同步加载所有数据,这使得DataAsset在资源管理方面具有较高的灵活性。
我们需要通过代码去修改DataAsset内的属性显示的实际的值, 这里使用DataAsset更合理。
首先我们创建一个类,类继承于DataAsset

编辑器打开文件,首先,我们先创建一个DataAsset使用的结构体,在结构体中增加三项不会在项目运行中修改的内容,实际的属性数值,我们则需要实时修改,所以,不需要通过蓝图面板设置。EditDefaultsOnly标示代表此属性可以通过面板修改内容。
USTRUCT(BlueprintType)
struct FAttributeInfo
{GENERATED_BODY()UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)FGameplayTag AttributeTag = FGameplayTag();UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)FText AttributeName = FText();UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)FText AttributeDescription = FText();UPROPERTY(BlueprintReadOnly)float AttributeValue = 0.f;
};
创建完成结构体后,我们添加一个变量AttributeInformation这是一个数组,后面我们将在UE里面可以使用编辑面板添加数据。接着我们又增加了一个函数,FindAttributeInfoForTag可以实现通过Tag进行获取结构体数据,我们将在C++里对数据进行修改,并在UI里对数据进行获取。
UCLASS()
class AURA_API UAttributeInfo : public UDataAsset
{GENERATED_BODY()public:FAttributeInfo FindAttributeInfoForTag(const FGameplayTag& AttributeTag, bool bLogNotFound = false) const;UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)TArray<FAttributeInfo> AttributeInformation;
};
在函数实现那这里,我们通过标签的匹配来获取结构体,如果设置bLogNotFound为true,如果没有获取到数据,我们将打印错误。
// 版权归暮志未晚所有。#include "AbilitySystem/Data/AttributeInfo.h"FAttributeInfo UAttributeInfo::FindAttributeInfoForTag(const FGameplayTag& AttributeTag, bool bLogNotFound) const
{for(const FAttributeInfo& Info : AttributeInformation){//判断标签是否完全匹配if(Info.AttributeTag.MatchesTagExact(AttributeTag)){return Info;}}//未查询到是否打印if(bLogNotFound){UE_LOG(LogTemp, Error, TEXT("无法从数据列表[%s]中查找到对应的AttributeTag[%s]"), *GetNameSafe(this), *AttributeTag.ToString());}return FAttributeInfo();
}
这里我们就可以编译打开UE,创建一个数据资产

类选择我们创建的AttributeInfo类

打开之后,只有一个AttributeInformation数组,我们可以根据需要添加子项

我们修改标签,填入显示的名称和描述,将所有的主要属性和次级属性都添加进去。


到这里,我们将属性的DataAsset创建完成,并填充了内容,后续可以通过标签获取然后在UI上面显示出来。
这样,我们的数据有了,第二个步骤也实现了,接下来,我们将创建一个控制器类,从AS内获取数据,并通过委托广播出去,让UI去更新数据显示。
相关文章:
26. UE5 RPG同步面板属性(二)
在上一篇,我们解析了UI属性面板的实现步骤: 首先我们需要通过c去实现创建GameplayTag,这样可以在c和UE里同时获取到Tag创建一个DataAsset类,用于设置tag对应的属性和显示内容创建AttributeMenuWidgetController实现对应逻辑 并且…...
五、postman基础使用案例
postman基础使用 相关案例【传递查询参数】【提交表单数据】【提交JSON数据】 注:postman⼀款⽀持调试和测试的⼯具,开发、测试⼯程师都可以使⽤。方法一般统一为:方法→请求头→请求体→断言 相关案例 【传递查询参数】 访问TPshop搜索商品的…...
Git合并利器:Vimdiff使用指南
使用 vimdiff 作为 Git 的合并工具确实可能会让新手感到困惑,但它是一个功能强大的工具,一旦掌握了它,就可以非常高效地进行代码合并和比较。以下是一个简短的教程,旨在帮助理解 vimdiff 的基本用法以及如何利用它来进行 Git 合并…...
阿里云2核4G服务器租用价格_30元3个月_165元一年_199元
阿里云2核4G服务器租用优惠价格,轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月,活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图: 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…...
<QT基础(2)>QScrollArea使用笔记
项目需要设置单个检查的序列图像预览窗口,采用QScrollArea中加入QWidget窗口,每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容 引入QWidget 引入label插入图像(resize) 引入布局 组织 scrollArea内部自带Qwidget&#…...
springboot企业级抽奖项目业务四 (缓存预热)
缓存预热 为什么要做预热: 当活动真正开始时,需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…...
opejdk11 java 启动流程 java main方法怎么被jvm执行
java启动过程 java main方法怎么被jvm执行 java main方法是怎么被jvm调用的 1、jvm main入口 2、执行JLI_Launch方法 3、执行JVMInit方法 4、执行ContinueInNewThread方法 5、执行CallJavaMainInNewThread方法 6、创建线程执行ThreadJavaMain方法 7、执行ThreadJavaMain方法…...
link 样式表是否会阻塞页面内容的展示?取决于浏览器,edge 和 chrome 会,但 firefox 不会。
经过实测: 在 head 中 link 一个 1M 大小的样式表。设置网络下载时间大概为 10 秒。 edge 和 chrome 只有在下载完样式表后,页面上才会出现内容。而 firefox 可以直接先显示内容,然后等待样式表下载完成后再应用样式。 DOMContentLoaded 事…...
uniapp对接极光推送(国内版以及海外版)
勾选push,但不要勾选unipush 国内版 网址:极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台,并选择对应应用开始配置 配置安卓包名 以及ios推送证书,是否将生产证书用于开发环境选择是 ios推送证书…...
智慧城市数字孪生,综合治理一屏统览
现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维,从构成城市诸多要素、结构、功能等方面入手,系统推进…...
在Java中对SQL进行常规操作的通用方法
SQL通用方法 一、常规方法增删改查二、具体优化步骤1.准备工作2.getcon()方法,获取数据库连接对象3.closeAll()方法,关闭所有资源4.通用的增删改方法5.通用的查询方法6.动态查询语句 总结 一、常规方法增删改查 在常规方法中,我们在Java中对…...
JavaSE day16笔记 - string
第十六天课堂笔记 学习任务 Comparable接口★★★★ 接口 : 功能的封装 > 一组操作规范 一个抽象方法 -> 某一个功能的封装多个抽象方法 -> 一组操作规范 接口与抽象类的区别 1本质不同 接口是功能的封装 , 具有什么功能 > 对象能干什么抽象类是事物本质的抽象 &…...
java将文件转成流文件返回给前端
环境:jdk1.8,springboot2.5.3,项目端口号:9100 1.待转换的文件 一、路径 二、文件内容 2.controller中代码 package com.example.pdf.controller;import com.example.pdf.service.GetFileStreamService; import org.springframework.web.b…...
使用Node.js常用命令提高开发效率
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具,可以帮助开发者更高效地开发应用程序。在日常开发中,除了Node.js本身的核心功能外,npm&#x…...
百度资源平台链接提交
百度资源平台是百度搜索引擎提供的一个重要工具,用于帮助网站主将自己的网站链接提交给百度搜索引擎,以便更快地被收录和展示在搜索结果中。以下将就百度资源平台链接提交的概念、操作方法以及其对网站收录和曝光的影响进行探讨: 什么是百度资…...
力扣爆刷第108天之CodeTop100五连刷26-30
力扣爆刷第108天之CodeTop100五连刷26-30 文章目录 力扣爆刷第108天之CodeTop100五连刷26-30一、15. 字符串相加二、300. 最长递增子序列三、42. 接雨水四、43. 重排链表五、142. 环形链表 II 一、15. 字符串相加 题目链接:https://leetcode.cn/problems/add-strin…...
Android裁剪图片为波浪形或者曲线形的ImageView
如果需要做一个自定义的波浪效果的进度条,裁剪图片,对ImageView的图片进行裁剪,比如下面2张图,如何实现? 先看下面的效果,看到其实只需要对第一张高亮的图片进行处理即可,灰色状态的作为背景图。…...
Linux课程____shell脚本应用
:一、认识shell 常用解释器 Bash , ksh , csh 登陆后默认使用shell,一般为/bin/bash,不同的指令,运行的环境也不同 二、 编写简单脚本并使用 # vim /frist.sh //编写脚本文件,简单内容 #!/bin/bash …...
设计模式12--组合模式
定义 案例一 案例二 优缺点...
【微服务】软件架构的演变之路
目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速,网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布…...
将嵌套循环中的Java对象数组转换为HashMap以优化性能
本文旨在指导开发人员如何通过将嵌套循环转换为Hashmap来优化Java代码的性能,特别是当涉及到对象属性的相等性检查时。通过使用Hashmap的快速搜索特性,可以显著降低时间复杂性,提高代码执行效率。本文将提供详细的步骤和示例代码,…...
遇到“用户对AIAgent进行提示词注入”怎么办?
文章目录先理解什么是“提示词注入”图片里的防护方法(两层)第一层:System Prompt 先贴“封条”第二层:输出端再加“安检门”总结先理解什么是“提示词注入” 你可以把 Agent(智能助手) 想象成一个 严格遵…...
YOLOv8目标检测新玩法:用VMamba替换C2f模块,我在DDSM医疗数据集上mAP涨到了0.724
YOLOv8与VMamba融合:医疗影像目标检测的突破实践 在医疗影像分析领域,目标检测技术正经历着从传统卷积神经网络到新型架构的转变。最近,我们将YOLOv8模型中的C2f模块替换为VMamba模块,在DDSM乳腺X光数据集上取得了mAP 0.724的显著…...
SDMatte Web服务灰度发布:新模型版本AB测试与用户反馈闭环机制
SDMatte Web服务灰度发布:新模型版本AB测试与用户反馈闭环机制 1. 引言 在AI图像处理领域,模型迭代更新是持续提升服务质量的必经之路。SDMatte作为一款专注于高质量图像抠图的AI模型,近期完成了新版本SDMatte的研发工作。本文将详细介绍我…...
用腾讯云轻量锐驰和对象存储,手把手教你30分钟搞定私人不限速网盘(附SSL证书配置)
零基础30分钟搭建高性能私人网盘:腾讯云轻量锐驰对象存储实战指南 你是否也受够了公有网盘动辄几百KB的下载速度?每次分享文件给朋友,对方总要忍受龟速下载的煎熬。更别提那些突然消失的文件和频繁弹出的会员广告——是时候拥有一个完全自主掌…...
Local AI MusicGen教育应用:帮助学生理解音乐情绪表达方式
Local AI MusicGen教育应用:帮助学生理解音乐情绪表达方式 1. 引言:当AI成为音乐老师 想象一下,你是一位音乐老师,正在给学生讲解“悲伤”这种情绪在音乐中是如何表达的。传统的教学方式可能是播放一段肖邦的夜曲,或…...
LabVIEW新手避坑指南:用For循环和数组搞定水仙花数,别再手动算啦!
LabVIEW实战:用For循环与数组高效求解水仙花数的5个关键技巧 水仙花数这个经典的编程练习题,在文本编程语言中可能只需十几行代码,但切换到LabVIEW的图形化编程环境时,不少初学者会陷入连线混乱和逻辑纠结。本文将从实际工程视角…...
基于扩散模型的歌声合成技术:DiffSinger架构解析与实践应用
基于扩散模型的歌声合成技术:DiffSinger架构解析与实践应用 【免费下载链接】DiffSinger 项目地址: https://gitcode.com/gh_mirrors/dif/DiffSinger DiffSinger作为开源歌声合成领域的创新解决方案,通过扩散模型与深度学习技术的深度融合&#…...
OpenClaw+Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF:学术论文辅助写作系统
OpenClawQwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF:学术论文辅助写作系统 1. 为什么需要AI辅助学术写作 去年冬天,我在赶一篇计算机视觉领域的会议论文时,经历了所有研究者都熟悉的痛苦:连续三天熬夜整理参考文献、…...
Wan2.2-I2V-A14B部署教程:系统盘50GB+数据盘40GB最小化配置实操
Wan2.2-I2V-A14B部署教程:系统盘50GB数据盘40GB最小化配置实操 1. 镜像概述与核心特性 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,特别针对RTX 4090D 24GB显存显卡进行了深度优化。这个镜像最大的特点是开箱即用,内置了完整…...
