我制作了一个简单的脚本,就像在视频教程中一样。它编译没有错误,当我按下播放按钮时,引擎崩溃。为什么会这样?
·H
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/StaticMeshComponent.h"
#include "MyActor.generated.h"
UCLASS()
class ROTATION_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
};
的.cpp
#include "MyActor.h"
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
FString a = GetOwner()->GetName(); // ERROR
}
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
答案 0 :(得分:2)
为防止崩溃,您应该检查nullptr。
auto Owner = this->GetOwner();
if (Owner)
{
//use Owner
}
这至少可以让你打印一些日志来追踪问题。问题本身很可能是因为您的AActor派生类没有所有者(因为它不是另一个类的组件)。如果您要获取this
AActor的名称,可以拨打this->GetName()
。