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);
}
我是使用 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);
}