微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决发生异常:读取访问冲突 **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 举报,一经查实,本站将立刻删除。