首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在代码中使用UE4 ()时UE4中的链接错误

在代码中使用UE4 ()时UE4中的链接错误
EN

Stack Overflow用户
提问于 2022-10-05 10:43:56
回答 1查看 84关注 0票数 3

我创建了一个从C++派生的AssetActionUtility类,并在该类中编写了以下函数:

代码语言:javascript
复制
#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文件中:

代码语言:javascript
复制
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "AssetTools", "AssetRegistry" });

但是,我仍然得到链接错误LNK2019:

代码语言:javascript
复制
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文件中,这非常令人困惑。我在这里做错事了?

EN

回答 1

Stack Overflow用户

发布于 2022-10-05 16:42:54

更改以下代码:

代码语言:javascript
复制
UAnimSequence* animSeq = Cast<UAnimSequence>(
    UAssetToolsHelpers::GetAssetTools()->DuplicateAsset(SingleClip.ClipName, PackagePath, AnimSource)
    );

转到

代码语言:javascript
复制
FAssetToolsModule& Module = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools");
UAnimSequence* animSeq = Cast<UAnimSequence>(
    Module.Get().DuplicateAsset(SingleClip.ClipName, PackagePath, AnimSource)
    );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73959254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档