发生异常:读取访问冲突 **this** 是 nullptr

问题描述

我刚刚开始学习使用虚幻引擎 4.26.2 开发游戏的 C++。

我真的不知道我在做什么。

我创建了一个 UMG.UserWidget 来显示 HUD。然后我创建了一个继承自 UserWidget 的 C++ 类。之后,我重新绘制了该 UMG.UserWidget 的蓝图。我这样做是因为我想从 C++ 代码访问这个小部件(以更新玩家分数)。

除此之外,我还有一个 C++ 类,它继承自 AHUD。我使用这个类来显示带有以下代码的 UMG.UserWidget:

自定义 C++ HUD 构造函数

APongHUD::APongHUD()
{
    PlayerHudWidget = NewObject<UPlayerHUDWidget>(UPlayerHUDWidget::Staticclass());
    ConstructorHelpers::FClassFinder<UUserWidget> WBPPlayerHudFinder(TEXT("/Game/Blueprint/Widgets/UI/UMG_PlayerHUD"));
    if (WBPPlayerHudFinder.Succeeded())
    {
        HudClass = WBPPlayerHudFinder.Class;
    }
    else
    {
        PlayerHudWidget = nullptr;
    }
}

开始游戏

void APongHUD::BeginPlay()
{
    Super::BeginPlay();

    if (HudClass)
    {
        Widget = CreateWidget<UUserWidget>(GetWorld(),HudClass);

        Widget->AddToViewport();

        PlayerHudWidget = Cast<UPlayerHUDWidget>(Widget);
    }
}

我已经用 PlayerHudWidget = Cast<UPlayerHUDWidget>(Widget); 行尝试了这段代码,并用相同的错误对其进行了注释。

当我尝试使用此功能更改分数时出现问题:

void APongHUD::SetAIscored(int value)
{
    if (PlayerHudWidget != nullptr)
    {
        PlayerHudWidget->SetAIscore(value);
    }
}

在这if (PlayerHudWidget != nullptr) 我收到错误

发生异常:读访问 违反。 this 是 nullptr。

这是 UPlayerHUDWidget文件

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "PlayerHUDWidget.generated.h"

/**
 * 
 */
UCLASS()
class POMG_API UPlayerHUDWidget : public UUserWidget
{
    GENERATED_BODY()
    
public:
    UPROPERTY(BlueprintReadWrite,Meta = (BindWidget))
    class UTextBlock* Player_score;
    class UTextBlock* AI_score;

    void SetPlayerscore(int Newscore);

    void SetAIscore(int Newscore);
};

及其实现:

#include "PlayerHUDWidget.h"
#include "Components/TextBlock.h"

void UPlayerHUDWidget::SetPlayerscore(int Newscore)
{
    Player_score->SetText(FText::AsNumber(Newscore));
}

void UPlayerHUDWidget::SetAIscore(int Newscore)
{
    AI_score->SetText(FText::AsNumber(Newscore));
}

我的问题是我不知道如何从 C++ 更新 UMG.UserWidget HUD,而且我尝试的方法不起作用。

如何从 C++ 更新 UMG.UserWidget HUD?也许修复这个错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)