UE4。当外部是控制器时,Widget 组件不显示

UE4. Widget component doesn't show up when its outer is controller

正如所说,在 UE 4.27 中,当其外部是播放器控制器时,小部件组件不会显示。但在 4.18 版本中它起作用了。

你能解释一下为什么吗?

我如何(如果可能的话)让它在 4.27 中工作?

在widget组件中设置了widget。

重现:

.h:

UPROPERTY(EditDefaultsOnly)
TSubclassOf<UComicFXWidgetComponent> ComicWidgetClass;

UComicFXWidgetComponent* NewComponent;

我的 .cpp 代码有效

“开始播放”:

// If I change "this" with PlayerController ref then it will not work
NewComponent = NewObject<UComicFXWidgetComponent>(this, ComicWidgetClass);
NewComponent->RegisterComponent();

“InteractButtonPressed”:

NewComponent->AttachToComponent(equippedWeapon_->mesh_, FAttachmentTransformRules::SnapToTargetNotIncludingScale, TEXT("DamageSocket"));

我的 .cpp 代码 不起作用:

“开始播放”:

APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0);
NewComponent = NewObject<UComicFXWidgetComponent>(PC, ComicWidgetClass); // "this" replaced with "PC"
NewComponent->RegisterComponent();

“InteractButtonPressed”:

NewComponent->AttachToComponent(equippedWeapon_->mesh_, FAttachmentTransformRules::SnapToTargetNotIncludingScale, TEXT("DamageSocket"));
  1. 将 UMG 添加到 * .build.cs

    PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "UMG" });

  2. 为您的角色添加代码

.h

UPROPERTY(VisibleDefaultsOnly)
UWidgetComponent* WidgetComponent;

.cpp

Construct
{
    MyComponent = CreateDefaultSubobject <UWidgetComponent>(TEXT("DamageWidget"));

    //EquippedWeapon Должен быть USkeletalMeshComponent, не mesh

    MyComponent->AttachToComponent(EquippedWeapon, FAttachmentTransformRules::KeepRelativeTransform, TEXT("DamageSocket"));
    MyComponent->SetWidgetSpace(EWidgetSpace::Screen);
    MyComponent->SetDrawSize(FVector2D(100.f, 50.f));//Your size

}
  1. 结束

好的。答案是:

APlayerController 派生自AController。并且它的构造函数中的 AController 调用 SetHidden(true); 并且它影响它的 children (或外部是控制器的演员)。

要解决只需在您的 Controller 构造函数中添加:

SetActorHiddenInGame(false);