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

时间:2017-09-18 10:43:49

标签: c++ crash unreal-engine4

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

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

 UNewActorComponent::UNewActorComponent()
 {

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

我知道输出可能是null,因此它会崩溃,但是idk如何在没有任何崩溃的情况下期待错误。

2 个答案:

答案 0 :(得分:0)

可能会创建actor组件但未初始化或附加到对象。您应该在IF语句后面进行这种检查,或者使用断言/检查宏。

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

答案 1 :(得分:0)

<强>的GetName();

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

来自虚幻引擎API参考:

<强> UObjectBaseUtility ::的GetName

语法: FString GetName()

<强>说明 返回此对象的名称(没有路径信息)

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

1)文件 - &gt;新项目 - &gt; C ++ - &gt;基本代码 - &gt;使用入门内容

2)在MinimalDefault Map里面选择一把椅子并选择Add Component Button。

3)选择New C ++ Component

4)选择Actor Component Class并单击em Next Button

5)在NewActorComponent.cpp内的Visual Studio中,在BeginPlay()函数中插入以下代码

UNewActorComponent::UNewActorComponent()

{

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

}

6)在虚幻引擎4中显示日志窗口 Log Windows

7)编译!

8)参见日志窗口中的结果 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);


}