【UE源码向】GameplayTag ToolTip 增加 DevComment
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)
效果


浙公网安备 33010602011771号