【发布时间】:2022-11-05 04:15:43
【问题描述】:
对于工作流程(以及学习目的),我尝试创建一个函数,以便我们可以将 AssetRegistry 标签添加到内容浏览器中的现有静态网格对象(来自 EditorUtilityWidget 或任何蓝图),因此能够通过这些标签对其进行排序,无需通过上下文菜单“资产操作”->“显示元数据”来查看它们(就像我们可以使用“设置元数据标签”-Editor Scripting Utilities 插件中的节点一样)。
ExpBlueprintFunctionLibrary.h
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "ExpBlueprintFunctionLibrary.generated.h"
UCLASS()
class DP_API UExpBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "")
static void AddCustomTag(UObject* Asset);
};
Exp蓝图函数库.c++
#include "AssetRegistry/IAssetRegistry.h"
#include "ExpBlueprintFunctionLibrary.h"
void UExpBlueprintFunctionLibrary::AddCustomTag(UObject* Asset)
{
int32 NewParam = 454;
static TArray<FAssetRegistryTag> AssetTags;
Asset->UObject::GetAssetRegistryTags(AssetTags);
AssetTags.Add(FAssetRegistryTag(
"ExtraTag",
FString::FromInt(NewParam),
FAssetRegistryTag::ETagType::TT_Numerical));
for (const FAssetRegistryTag& AssetTag : AssetTags)
{
UE_LOG(LogTemp, Log, TEXT("Tag : %s :: %s"), *AssetTag.Name.ToString(), *AssetTag.Value)
}
//Super::GetAssetRegistryTags(AssetTags);
}
我要添加到AssetRegistryTagsScreenshot 的标签列表
上面的代码实际上添加了标签,但它不在列表中,也没有过滤器搜索
输出日志:
LogTemp: Tag : Triangles :: 48
LogTemp: Tag : Vertices :: 54
LogTemp: Tag : UVChannels :: 2
LogTemp: Tag : Materials :: 1
LogTemp: Tag : ApproxSize :: 100x100x100
LogTemp: Tag : CollisionPrims :: 1
LogTemp: Tag : LODs :: 1
LogTemp: Tag : MinLOD :: 0
LogTemp: Tag : SectionsWithCollision :: 1
LogTemp: Tag : DefaultCollision :: BlockAll
LogTemp: Tag : CollisionComplexity :: CTF_UseSimpleAndComplex
LogTemp: Tag : AssetImportData :: []
LogTemp: Tag : LODGroup :: None
LogTemp: Tag : NeverStream :: False
LogTemp: Tag : ExtraTag :: 454
我有一种感觉,我必须以某种方式注册它并且不太明白我想念什么。
我在蓝图中连接它的方式BlueprintScreenshot
通过我能找到的一小部分示例,我们设法创建了一个自定义类对象并覆盖GetAssetRegistryTags,但它不适用于现有的静态网格实例:
。H
...
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, AssetRegistrySearchable, Category = Max)
int32 MaxCount;
int32 DummyData;
.cpp
void UExpBlueprintFunctionLibrary::GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const
{
Super::GetAssetRegistryTags(OutTags);
OutTags.Add(FAssetRegistryTag(
"DummyData",
FString::FromInt(DummyData),
FAssetRegistryTag::ETagType::TT_Numerical
));
}
(这里非常感谢 Alex Stevens (@MilkyEngineer) 在他的tweetorial 中的解释)
这可能是我试图实现的目标吗?
PS:欢迎任何确切和概念性的解释,这将非常有帮助!我已经花了很多时间试图弄清楚它应该如何工作并且现在感觉有点绝望和无用
【问题讨论】:
标签: c++ oop unreal-engine4