指针相关的UE4崩溃.我的指针哪里错了?

Pointer related UE4 crash. Where are my pointers wrong?

本文关键字:指针 错了 我的 崩溃 UE4      更新时间:2023-10-16

我正在创建一个第三人称激光标签射击游戏来娱乐,但我在创建我的武器层次结构时遇到了困难。我的主要问题是我的编辑器因代码中指针的一些错误的访问错误而崩溃,我对指针的理解不够,无法自己解决这个问题。

我正在尝试将武器添加到我的默认棋子 ALTPlayer 中。我通过使用 TSubclassOf 来确保我只能将 ALTWeapon 的孩子附加到我的角色中

如果它有助于我的解释,当前的层次结构是:

APawn->ALTWeapon->ALaserGun

。我计划添加更多以 ALTWeapon 为父级的类。我希望这将使我的代码井井有条,更容易为每种武器编写不同的功能。

考虑到这一点,我将从我的 ALTPlayer.h 文件开始。在这里,我将 WeaponClass 声明为我的子类变量

#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "LTPlayer.generated.h"
class ALTWeapon;
UCLASS()
class LASERTAG_API ALTPlayer : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values
ALTPlayer();
// Player weapon
UPROPERTY(EditAnywhere)
TSubclassOf<ALTWeapon> WeaponClass;
};

现在我将移动到我的 ALTPlayer.cpp 文件中。在这里,我尝试创建一个存储在 WeaponClass 中的 ALaserGun 对象。(我也不确定这是否正是我应该这样做的方式(

#include "LTPlayer.h"
#include "LaserGun.h"
// Sets default values
ALTPlayer::ALTPlayer()
{
// Creating Weapon
this->WeaponClass->GetDefaultObject<ALaserGun>();
}

此时,我希望在我的蓝图 ALTPlayer 子项中看到一个 ALaserGun 组件。虽然,由于我有指针问题导致我的编辑器崩溃,我不知道这是否是这段代码产生的结果。

如果有人对如何修复我的指针有任何见解,以免我遇到访问违规,那就太棒了!

当您尝试访问其默认对象但尚未将其分配给任何对象时,您正在尝试取消引用 WeaponClass。

您可以在构造函数初始值设定项列表中初始化它,如下所示:

ALTPlayer::ALTPlayer()
: WeaponClass(ALTWeapon::StaticClass())
{
}

如果这是一个可以在蓝图默认值中设置的类,您还可以通过在 PreInitializeComponents中设置它来确保它有一个值:

声明:

//~ Begin AActor Interface
virtual void PreInitializeComponents() override;
//~ End AActor Interface

定义:

void ALTPlayer::PreInitializeComponents()
{
Super::PreInitializeComponents();
// Fallback to default Weapon class if none was specified.
if (WeaponClass == nullptr)
{
UE_LOG(LogGameMode, Warning, TEXT("No WeaponClass was specified in %s (%s)"), *GetName(), *GetClass()->GetName());
WeaponClass = ALTWeapon::StaticClass();
}
}