我创建了一个从C++派生的AssetActionUtility类,并在该类中编写了以下函数:
#include "ClipAnimUtility.h"
#include "EditorUtilityLibrary.h"
#include "IAssetTools.h"
#include "ClipAnimAsset.h"
#include "Kismet/KismetStringLibrary.h"
void UClipAnimUtility::ClipAnimCpp(FString path)
{
AnimSource = UEditorUtilityLibrary::GetSelectedAssets()[0];
PackagePath = UEditorUtilityLibrary::GetSelectedAssetData()[0].PackagePath.ToString();
RowData = UClipAnimAsset::ReadFileArray(path);
for (auto dataString : RowData)
{
FString startFrame{}, endFrame{}, clipName{}, subString{};
dataString.Split("|", &startFrame, &subString);
subString.Split("|", &endFrame, &clipName);
SingleClip.StartFrame = UKismetStringLibrary::Conv_StringToInt(startFrame);
SingleClip.EndFrame = UKismetStringLibrary::Conv_StringToInt(endFrame);
SingleClip.ClipName = clipName;
UAnimSequence* animSeq = Cast<UAnimSequence>(
UAssetToolsHelpers::GetAssetTools()->DuplicateAsset(SingleClip.ClipName, PackagePath, AnimSource)
);
UClipAnimAsset::ClipAnimAsset(animSeq, SingleClip.StartFrame, SingleClip.EndFrame);
}
}并将以下模块添加到MyGame.Build.cs文件中:
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "AssetTools", "AssetRegistry" });但是,我仍然得到链接错误LNK2019:
ClipAnimUtility.cpp.obj : error LNK2019: unresolved external symbol "public: static class TScriptInterface<class IAssetTools> __cdecl UAssetToolsHelpers::GetAssetTools(void)" (?GetAssetTools@UAssetToolsHelpers@@SA?AV?$TScriptInterface@VIAssetTools@@@@XZ) referenced in function "public: void __cdecl UClipAnimUtility::ClipAnimCpp(class FString)" (?ClipAnimCpp@UClipAnimUtility@@QEAAXVFString@@@Z)它似乎在抱怨无法链接与UAssetToolsHelpers相关的二进制文件,但根据文档,它包含在模块"AssetTools“中,我已经将它包含在build.cs文件中,这非常令人困惑。我在这里做错事了?
发布于 2022-10-05 16:42:54
更改以下代码:
UAnimSequence* animSeq = Cast<UAnimSequence>(
UAssetToolsHelpers::GetAssetTools()->DuplicateAsset(SingleClip.ClipName, PackagePath, AnimSource)
);转到
FAssetToolsModule& Module = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools");
UAnimSequence* animSeq = Cast<UAnimSequence>(
Module.Get().DuplicateAsset(SingleClip.ClipName, PackagePath, AnimSource)
);https://stackoverflow.com/questions/73959254
复制相似问题