Download

Reference Blueprint Component

Hello.

I have a class that inherits from APawn, and the class is used in the Blueprint Graph Editor. How would I create a class member that would reference another component in the Blueprint?

Basically, several components are added together to create the final object. Now I need to reference different parts of the object via C++. I can’t seem to get this to work with:



TAssetPtr<AActor> myVar;
AActor* myVar;

TAssetPtr<UStaticMeshComponent> myVar;
UStaticMeshComponent* myVar;


because the components are Static Mesh Components. I can assemble components in the Graph Editor Viewport but the components added are not considered Actors. Additionally, components could span the gamut, and I would like a more robust and generic solution if one exists.

When using UUserWidget I have used WidgetTree and searched for a hardcoded name, something I don’t like, but if possible, I’d like to use a class member to point to the object that needs to be manipulated.

Can someone help?

Thank you.

In case anyone else is interested I am scanning through the GetComponents list during the BeginPlay() call:



.h
    UStaticMeshComponent* partOne;
    UStaticMeshComponent* partTwo;


.cpp

void AMyCustomPawn::BeginPlay()
{
    const FName partOneName = FName("Part_One");
    const FName partTwoName = FName("Part_Two");

    partOne = nullptr;
    partTwo = nullptr;

    const TArray<UActorComponent*>& theComponents = GetComponents();

    int32 componentCount = theComponents.Num();
    for (int32 x = 0; x < componentCount; x++)
    {
        UStaticMeshComponent* theMesh = Cast<UStaticMeshComponent>(theComponents[x]);
        if (theMesh)
        {
            if (theMesh->GetFName().Compare(partOneName) == 0)
                partOne = theMesh;

            if (theMesh->GetFName().Compare(partTwoName) == 0)
                partTwo = theMesh;
        }
    }


Then during the Tick call I can manipulate the individual parts as needed:



void AMyCustomPawn::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    if (partOne != nullptr)
    {
        :
        :
    }

    if (partTwo != nullptr)
    {
        :
        :
    }
}


Of course I’d rather have a class member that could be assigned to in the blueprint, and access the part that way.