当前位置: 首页 > 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.jsqmd.com/news/42043/

相关文章:

  • 基于c++ eigen的Nelder-Mead算法(仿照scipy)
  • 量化存储墙(三):GEMM EMA 下限解析解以及硬件静态资源分配设计
  • Docker - 配置镜像站解决下载镜像的网络问题
  • 2D3D-MATR论文学习
  • c# 获取当前时间
  • YOLOv3 深度解析:网络架构、核心改进与目标检测实践 - 指南
  • ai学习机是不是智商税?到底有没有用?2025年学习机推荐指南
  • Linux问题
  • 2025 年 11 月石笼网厂家最新推荐,实力品牌深度解析采购无忧之选!
  • docker命令提示插件
  • C语言和C++有什么区别
  • 详细介绍:通过Modbus TCP网关连接传统RS485电梯的配置详解
  • python多进程mulprocessing初始化传参进行pickle时不能序列化local局部变量
  • Snipe-IT支持Oauth2登录
  • 20232424 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 绝对值的性质
  • 软件工程——设计物品复活软件的思考
  • 软件工程——设计物品复活软件的思考
  • 【C++STL :stack queue (二) 】stack 与 queue 的模拟实现与双端队列探秘 - 指南
  • 做题随笔:P14521
  • 《重生之我成为世界顶级黑客》第五章:失败,失败,还是失败
  • Win11系统恢复经典的右键菜单方法(CMD快速执行)
  • 20251116
  • 智能硬件利用小聆AI自定义MCP应用开发操作讲解
  • 选拔赛题解
  • C++ 中的 **普通筛、埃氏筛、线性筛**,它们都是求质数或判断质数的方法
  • Linux - sudo -i
  • 利用单片机的TIM模块播放春日影
  • warp-cli代理
  • 完整教程:Rust语言特性深度解析:所有权、生命周期与模式匹配之我见