c++ - 无法添加视口 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();
}
}
}
我在这里做错了什么?
解决方案
据我所知,AHUD 不能是 UUserWidget 的所有者。
我实际上检查了AHUD 的源代码,它指出 UUserWidget 的有效所有者可以是以下类型:
- 小部件
- UWidgetTree
- APPlayerController
- UGameInstance
- 优世界
那么你可以尝试这样的事情吗?
CrossHairWidget = CreateWidget<UUserWidget>(GetGameInstance(), wCrossHairWidget, name);
希望有帮助!
推荐阅读
- sml - 如何在 SML 中的 else if 语句中解决“未解析的弹性记录”?
- ruby - 在哈希/数组中查找总和、最高、最低。红宝石
- angular - Angular 中的监听器事件
- flutter - 两个不同的块导致“坏状态:流已经被收听”。
- java - Java中UTF-8编码中2GB txt文件中每个单词的词频
- windows - nuget install 如何决定何时下载新版本的软件包?
- javascript - 正则表达式在记事本++中查找并替换每n次出现
- swift - Swift:隐式解包的变量可以工作,但不会强制将其强制转换为相同的类型。为什么?
- javascript - 从可选数组返回字符串数组
- android - 如何在 android studio 中通过编码使用不同的语言?