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

【UE源码向】GameplayTag增加ToolTip

GamepayTag 的 ToolTip 增加 DevComment

  • 我想绝大部分的 UE 项目都会大量使用到 GameplayTag 的功能,主要是用来做一些功能分类、状态标记和资产引用。
  • 问题:在引擎的早期版本中(< 5.6),GameplayTag 的鼠标悬浮提示只会显示 GameplayTag 的名字,而不会显示其对应的开发者功能描述(即创建Tag时手动填入的共功能说明)。
  • 我自己早前支持了这个符合直觉的显示,最近发现新版引擎官方的代码也合入了某个开发者的修改,代码很类似,如果有项目是低版本引擎,不妨也合入或者直接改代码支持一下,还是挺好用的。

直接上手

这里就不放我的修改了,和UE官方的类似,我们直接看代码
官方 GitHub PR 修改

  • 新增获取 TagNode DevComment 的接口
    // 在 GameplayTagsManager.h 中的 FGameplayTagNode 结构体中新增接口,下面会调用到
    #if WITH_EDITORONLY_DATA/** Returns the Comment for this tag */FString GetDevComment() const { return DevComment; }
    #endif
    
  • 先支持单个 FGameplayTag 的 DevComment 显示
    // 在 SGameplayTagCombo.cpp 中修改 SGameplayTagCombo::GetToolTipText(),主要是后半部分,将 TagName 和 DevComment 拼起来显示
    FText SGameplayTagCombo::GetToolTipText() const
    {FGameplayTag TagToDisplay;if (PropertyHandle.IsValid()){return TagsFromProperty.IsEmpty() ? FText::GetEmpty() : FText::FromName(TagsFromProperty[0].GetTagName());TagToDisplay = (TagsFromProperty.Num() > 0) ? TagsFromProperty[0] : FGameplayTag();}else{TagToDisplay = TagAttribute.Get();}TSharedPtr<FGameplayTagNode> TagNode = UGameplayTagsManager::Get().FindTagNode(TagToDisplay);if (TagNode.IsValid() && !TagNode->GetDevComment().IsEmpty()){// 这里加了两个换行符,一个换行更好看些return FText::FromString(FString::Printf(TEXT("%s\n\n%s"), *TagToDisplay.ToString(), *TagNode->GetDevComment()));}else{return FText::FromName(TagToDisplay.GetTagName());}return FText::FromName(TagAttribute.Get().GetTagName());
    }
    
  • 再支持 GameplayTagContainer 的 DevComment 显示
    // 1. 在 SGameplayTagContainerCombo.h 中SGameplayTagContainerCombo 类中 新增函数用于获取某个 Tag 的 ToolTip
    FText GetTagToolTipText(const FGameplayTag TagToDisplay) const;// 2. 在 SGameplayTagContainerCombo.cpp 中SGameplayTagContainerCombo类中实现
    FText SGameplayTagContainerCombo::GetTagToolTipText(const FGameplayTag TagToDisplay) const
    {TSharedPtr<FGameplayTagNode> TagNode = UGameplayTagsManager::Get().FindTagNode(TagToDisplay);if (TagNode.IsValid() && !TagNode->GetDevComment().IsEmpty()){// 同样这里的两个换行有点多余,一个即可return FText::FromString(FString::Printf(TEXT("%s\n\n%s"), *TagToDisplay.ToString(), *TagNode->GetDevComment()));}else{return FText::FromName(TagToDisplay.GetTagName());}
    }// 3. 把ToolTip的获取回调函数用上,在 SGameplayTagContainerCombo::MakeTagListViewRow 函数里将 ToolTipText 的回调绑定为2中新增的函数
    .ToolTipText(this, &SGameplayTagContainerCombo::GetTagToolTipText, Item->Tag)
    

效果

img

http://www.rkmt.cn/news/51406.html

相关文章:

  • 基于c++ eigen的Nelder-Mead算法(仿照scipy)
  • 2D3D-MATR论文学习
  • 2025 年 11 月石笼网厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 详细介绍:通过Modbus TCP网关连接传统RS485电梯的配置详解
  • python多进程mulprocessing初始化传参进行pickle时不能序列化local局部变量
  • 软件工程——设计物品复活软件的思考
  • 做题随笔:P14521
  • Win11系统恢复经典的右键菜单方法(CMD快速执行)
  • 20251116
  • 选拔赛题解
  • C++ 中的 **普通筛、埃氏筛、线性筛**,它们都是求质数或判断质数的方法
  • 完整教程:Rust语言特性深度解析:所有权、生命周期与模式匹配之我见
  • 20231427田泽航第九周预习报告
  • 【2025-11-14】工作压力
  • 20232401 2024-2025-1 《网络与系统攻防技术》实验五实验报告
  • do文件仿真 fpga
  • [ sqlite ]
  • 视野修炼-技术周刊第127期 | Valdi
  • 完整教程:机器学习:基于大数据的基金数据分析可视化系统 股票数据 金融数据 股价 Django框架 大数据技术(源码) ✅
  • 【AIGC】语音识别ASR:火山引擎大模型技术实践 - 详解
  • 2025 年 11 月石笼网厂家最新推荐,技术实力与市场口碑深度解析!
  • 2025年11月温州律师事务所最新推荐,实力机构深度解析与择选指南!
  • 实用指南:spark组件-spark core(批处理)
  • 详细介绍:用Flux.1-Krea[dev]打造动漫风格插画的提示词灵感与创作技巧
  • 11 月 14 日
  • 2025-11-13~15 hetao1733837的刷题记录
  • 20251114周五日记
  • 11 月 7 日
  • Java 可变参数机制
  • C# 高级类型 Dictionary(学习笔记4)