UE4使用C++设置精灵

UE4 setting sprite by using C++

我不知道如何通过引用在 actor class 构造函数中设置精灵。 参考是“PaperSprite'/Game/cc/combat/units/archer_Sprite_0.archer_Sprite_0'”

我想让这个精灵静态化。我认为应该使用 ConstructorHelpers::FObjectFinder 。当我 运行 下面的代码时,我得到了这个错误:

sprite = CreateDefaultSubobject<UPaperSpriteComponent>(TEXT("Sprite_comp"));
sprite->SetupAttachment(RootComponent);

ConstructorHelpers::FObjectFinder<UPaperSprite> SpriteAssetObj(TEXT("PaperSprite'/Game/cc/combat/units/archer_Sprite_0.archer_Sprite_0'"));

//sprite->SetSprite(SpriteAssetObj.Object);

"严重性代码说明项目文件行抑制状态 错误 C2664 'void ConstructorHelpers::ValidateObject(UObject *,const FString &,const TCHAR *)': 无法将参数 1 从 'T *' 转换为 'UObject *' MyProject C:\Program Files\Epic Games\UE_4.26\Engine\Source\Runtime\CoreUObject\Public\UObject\ConstructorHelpers.h 110 “

任何帮助或建议都会很好。提前致谢。

I want to make this sprite static.

ConstructorHelpers::FObjectFinder 用于查找资产。

在移动的情况下:

sprite->SetMobility(EComponentMobility::Type::Stationary);

我测试了下面的代码没有任何问题。您确定 ConstructorHelpers::FObjectFinder... 导致错误吗?

static ConstructorHelpers::FObjectFinder<UPaperSprite> SpriteAssetObj(TEXT("PaperSprite'/Game/TEMP/Sprites/SP_TempSprite_1.SP_TempSprite_1'"));
if (SpriteAssetObj.Object)
{
    UE_LOG(LogTemp, Warning, TEXT("PaperSprite loaded"));
}
else
{
    UE_LOG(LogTemp, Warning, TEXT("PaperSprite not found"));
}

不要忘记将 Paper2D 模块添加到您的 YourGame.build.cs 文件中:

PublicDependencyModuleNames.AddRange(new string[] { "Paper2D" });

并添加到您的文件中:

#include "PaperSprite.h"