How to add Widget to Local Player Screen correctly

Hello everyone, currently I’m trying to add Widget to Local Player Screen in c++ (in BeginPlay of my PlayerController class) like this
UI = CreateWidget<UWidgetAnimationControl>(this, UIClass, TEXT("Control_UI"));
UI->SetOwningLocalPlayer(GetLocalPlayer());
UI->AddToPlayerScreen(0);
but it only visible in one player screen

the first player is automatically spawned by GameMode and the other 3 players I create by Creating Local Player in GameMode Blueprint

I also tried to create Widget and set the OwningPlayer with created local player then it worked but i cannot find the way to add the Widget to the first player

Please help me.

Anyone please

GetLocalPlayer() might be too early to access in PlayerController’s BeginPlay for this specific scenario.

Consider adding a frame-delay, or override function SetPlayer or ReceivePlayer, or reach the corresponding LocalPlayer in a different way somehow.

I know delay sounds ugly, but to me it seems to be the simplest functional approach here :

void ACustomPC::BeginPlay()
{
    Super::BeginPlay();

    GetWorld()->GetTimerManager().SetTimerForNextTick(FTimerDelegate::CreateWeakLambda(this, [this]() {
        UI = CreateWidget<UWidgetAnimationControl>(this, UIClass, TEXT("Control_UI"));
        UI->SetOwningLocalPlayer(GetLocalPlayer());
        UI->AddToPlayerScreen(0);
    });
}