Unreal 4.27.2
Hi,
I’m having an issue where a reference to a UUserWidget in a Widget Component returns a valid pointer at begin play but then the pointer is null despite being a UPROPERTY()
.h file
UPROPERTY(EditDefaultsOnly)
UWidgetComponent*_MusicSheetWidgetComponent{nullptr};
UPROPERTY()
UPzUserWidget_MusicSheet*_MusicSheetWidget{nullptr};
.cpp file
APzMusicStand::APzMusicStand()
{
PrimaryActorTick.bCanEverTick = true;
USceneComponent* rootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
SetRootComponent(rootComponent);
_CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
_CameraComponent->SetupAttachment(rootComponent);
_PianoStand=CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Piano Stand"));
_PianoStand->SetupAttachment(rootComponent);
_MusicSheetWidgetComponent=CreateDefaultSubobject<UWidgetComponent>(TEXT("Partition Widget Component"));
_InstrumentChildActorComponent=CreateDefaultSubobject<UChildActorComponent>(TEXT("Music Instrument"));
_InstrumentChildActorComponent->SetupAttachment(rootComponent);
}
void APzMusicStand::BeginPlay()
{
Super::BeginPlay();
SetMusicSheetWidget();
}
void APzMusicStand::SetMusicSheetWidget()
{
_MusicSheetWidget=Cast<UPzUserWidget_MusicSheet>(_MusicSheetWidgetComponent->GetWidget());
//THIS IS WORKING, PTR IS VALID. CALLED AT BEGIN PLAY
if(_MusicSheetWidget==nullptr)
{
UE_LOG(LogTemp,Warning,TEXT("Begin play widget NOT SET"));
}
else
{
UE_LOG(LogTemp,Warning,TEXT("Begin play widget IS SET"));
}
}
void APzMusicStand::SetExerciceMusicSheet(UPzMusicSheetDataAsset* OutMusicSheet)
{
//HERE PTR IS NULL, EVEN TRYING TO RE DO THE CAST DOES NOT WORK.
//WIDGET COMPONENT IS VALID AT THIS STAGE
//_MusicSheetWidget=Cast<UPzUserWidget_MusicSheet>(_MusicSheetWidgetComponent->GetUserWidgetObject());
if(_MusicSheetWidget==nullptr)
{
UE_LOG(LogTemp,Warning,TEXT("Widget is not set"));
}
else
{
UE_LOG(LogTemp,Warning,TEXT("Good widget IS SET"));
_MusicSheetWidget->SetExerciceSheet(OutMusicSheet);
}
}
Thanks
EDIT:
Adding setup attachement and register does not solve the issue, the widget is found at begin play and just after its pointer returns null. The widget component stays valid.
_MusicSheetWidgetComponent=CreateDefaultSubobject<UWidgetComponent(TEXT("Partition Widget Component"));
_MusicSheetWidgetComponent->SetupAttachment(rootComponent);
_MusicSheetWidgetComponent->RegisterComponent();