首页 > 解决方案 > 无法添加视口 Unreal C++

问题描述

我正在尝试通过 C++ 添加蓝图视口。尽管我一直在关注此https://wiki.unrealengine.com/UMG,_Referencing_UMG_Widgets_in_Code,但我不断收到函数 CreateWidget 没有重载实例的错误

// HUD.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once 

#include "CoreMinimal.h"
#include "GameFramework/HUD.h"
#include "ZombieHUD.generated.h"

UCLASS()
class AZombieHUD : public AHUD
{
    GENERATED_BODY()

public:
    AZombieHUD();

    /** Primary draw call for the HUD */
    virtual void DrawHUD() override;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Widgets")
    TSubclassOf<class UUserWidget> wCrossHairWidget;

    UUserWidget* CrossHairWidget;

private:
    /** Crosshair asset pointer */
    class UTexture2D* CrosshairTex;

};


// HUD.cpp

// imports
#include "ZombieHUD.h"
#include "Engine/Canvas.h"
#include "Engine/Texture2D.h"
#include "TextureResource.h"
#include "Blueprint/UserWidget.h"
#include "CanvasItem.h"
#include "UObject/ConstructorHelpers.h"

...

void AZombieHUD::DrawHUD()
{
    Super::DrawHUD();
    if (wCrossHairWidget) {

        auto name = FName(TEXT("CH"));
        CrossHairWidget = CreateWidget<UUserWidget>(this, wCrossHairWidget, name);
        if (CrossHairWidget)
        {
            CrossHairWidget>AddToViewport();
        }
    }
}

我在这里做错了什么?

标签: c++unreal-engine4

解决方案


据我所知,AHUD 不能是 UUserWidget 的所有者。

我实际上检查了AHUD 的源代码,它指出 UUserWidget 的有效所有者可以是以下类型:

  • 小部件
  • UWidgetTree
  • APPlayerController
  • UGameInstance
  • 优世界

那么你可以尝试这样的事情吗?

CrossHairWidget = CreateWidget<UUserWidget>(GetGameInstance(), wCrossHairWidget, name);

希望有帮助!


推荐阅读