Search code examples
c++unreal-engine4

UE4 setting sprite by using C++


I didn't figure out how can i set a sprite in actor class constructor by using its reference. Reference is "PaperSprite'/Game/cc/combat/units/archer_Sprite_0.archer_Sprite_0'"

I want to make this sprite static. I think should use ConstructorHelpers::FObjectFinder . When i run the code below, i got this error:

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);

"Severity Code Description Project File Line Suppression State Error C2664 'void ConstructorHelpers::ValidateObject(UObject *,const FString &,const TCHAR *)': cannot convert argument 1 from 'T *' to 'UObject *' MyProject C:\Program Files\Epic Games\UE_4.26\Engine\Source\Runtime\CoreUObject\Public\UObject\ConstructorHelpers.h 110 "

Any help or advice would be nice. Thanks in advance.


Solution

  • I want to make this sprite static.

    ConstructorHelpers::FObjectFinder is for finding an asset.

    In case of movement would be:

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

    I tested the code below without any problem. Are you sure ConstructorHelpers::FObjectFinder... is causing the error?

    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"));
    }
    

    Don't forget to add Paper2D module to your YourGame.build.cs file:

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

    And add to your file:

    #include "PaperSprite.h"