Good question, I also wondered about it sometime ago.
UE_DEPRECATED(5.1, "Direct access to Visibility is deprecated. Please use the getter or setter.")
/** The visibility of the widget */
UPROPERTY(EditAnywhere, BlueprintReadWrite, FieldNotify, Getter, Setter, BlueprintGetter="GetVisibility", BlueprintSetter="SetVisibility", Category="Behavior")
ESlateVisibility Visibility;
void UUserWidget::SetVisibility(ESlateVisibility InVisibility)
{
ESlateVisibility OldVisibility = GetVisibility();
Super::SetVisibility(InVisibility);
if (OldVisibility != GetVisibility())
{
OnNativeVisibilityChanged.Broadcast(InVisibility);
OnVisibilityChanged.Broadcast(InVisibility);
}
}
ESlateVisibility UWidget::GetVisibility() const
{
TSharedPtr<SWidget> SafeWidget = GetCachedWidget();
if (SafeWidget.IsValid())
{
return UWidget::ConvertRuntimeToSerializedVisibility(SafeWidget->GetVisibility());
}
return Visibility;
}
First seems its being deprecated. As second it has events as visibility changed, those events will not fire if you directly change visibility value, since I didn’t see any broadcasts about those somewhere else.
Besides that I don’t know, would be great if explained