Как обновить виджет в UE4 C++?
Я создаю "целевой виджет", который в основном должен делать следующее: помещать виджет на ближайшего актера, если игрок нацелен. Не может быть самим собой.
Я создал компонент виджета для создания виджета, чтобы я мог вызвать виджет внутри компонента виджета и обновить его оттуда. Например у меня есть:
TargetWidgetComponent.cpp
void UTargetWidgetComponent::InitWidget()
{
Super::InitWidget();
//if widget isnt null
if (Widget) {
#if!UE_BUILD_SHIPPING
//if the widget is not the target widget
if (!Widget->IsA(UTargetWidget::StaticClass())) {
//throw this error
UE_LOG(LogTemp, Warning, TEXT("WidgetClass for %s does not derive from SActorWidget"), *GetNameSafe(GetOwner()));
}
#endif
//pointer to call the widget. Casting it so target widget is extended.
WidgetInst = Cast<UTargetWidget>(Widget);
//if target widget is not nullptr
if (WidgetInst) {
//add the widget to the owner, it cannot be the same actor
WidgetInst->SetOwningActor(GetOwner());
}
}
и внутри моего TargetWidget у меня есть:
//TargetWidget.cpp
void UTargetWidget::SetOwningActor(AActor* NewOwner)
{
//if Owning actor is the same or if the owning pawn is = to the new owner aka itself.
if (OwningActor == NewOwner || GetOwningPlayerPawn() == NewOwner)
{
SetVisibility(ESlateVisibility::Hidden);
return;
}
//if its not, change the owning actor to the new actor
OwningActor = NewOwner;
OnOwningActorChanged.Broadcast(NewOwner);
UE_LOG(LogTemp, Warning, TEXT("Owning Actor : %s , NewOwner: %s"), *OwningActor->GetName(),
*NewOwner->GetName());
}
как видите, он вызывает виджет и отображает цель на владельце. Но только при запуске виджета. Как я могу обновить этот виджет или компонент виджета, чтобы всякий раз, когда я нажимаю целевую кнопку (вкладку), он обновляет видимость / владельца моих виджетов?