GetOwner() 导致虚幻编辑器崩溃

GetOwner() cause unreal editor crash

我是使用 C++ 和 UE 的新手。 我尝试了一些简单的编程,但编辑器崩溃了。

#include "NewActorComponent.h"
#include "Runtime/Engine/Classes/GameFramework/Actor.h"

 UNewActorComponent::UNewActorComponent()
 {

     PrimaryComponentTick.bCanEverTick = true;
     GetOwner()->GetName();
 }

我知道可能输出为空所以它崩溃了,但不知道如何在没有任何崩溃的情况下预期错误。

Actor 组件可能已创建但未初始化或附加到对象。您应该在 IF 语句后面进行这些类型的检查,或者使用 assert/check 宏。

此外,您可能希望使用 BeginPlay() 函数而不是构造函数。 BeginPlay 需要注册和初始化组件,因此它应该有一个所有者。

GetName();

找到组件的所有者。 例如:在椅子中插入组件时,将返回对椅子的引用。

来自Unreal EngineAPI参考:

UObjectBaseUtility::GetName

语法:FString GetName()

备注 Returns这个对象的名称(没有路径信息)

好的,按照以下步骤操作:

1) 文件 -> 新建项目 -> C++ -> 基本代码 -> 包含初学者内容

2) 在 MinimalDefault 地图内 select 一把椅子,然后选择添加组件按钮。

3) 选择新的 C++ 组件

4) 选择 Actor 组件 Class 并单击下一步按钮

5) 在 Visual Studio 里面 NewActorComponent.cpp 在 BeginPlay() 函数下面插入代码

UNewActorComponent::UNewActorComponent()

{

 PrimaryComponentTick.bCanEverTick = true;
 FString ObjectName = GetOwner()->GetName();
 UE_LOG(LogTemp, Warning, TEXT("ObjetctName: %s"), *Objectname);  

}

6) 在 Unreal Engine 4 中显示日志 Window Log Windows

7) 编译!

8) 查看日志中的结果 Window logwindowresults

完整代码下方。有用!享受吧!

#include "NewActorComponent.h"
#include "Runtime/Engine/Classes/GameFramework/Actor.h"

UNewActorComponent::UNewActorComponent()
{
    PrimaryComponentTick.bCanEverTick = true;

}

void UNewActorComponent::BeginPlay()
{
    Super::BeginPlay();
    FString NameOfObject = GetOwner()->GetName();
    UE_LOG(LogTemp, Warning, TEXT("Name is: %s"), *NameOfObject)

}


void UNewActorComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
    Super::TickComponent(DeltaTime, TickType, ThisTickFunction);


}