我是使用c ++和UE的新手。 我尝试了一些简单的编程,但编辑器崩溃了。
#include "NewActorComponent.h"
#include "Runtime/Engine/Classes/GameFramework/Actor.h"
UNewActorComponent::UNewActorComponent()
{
PrimaryComponentTick.bCanEverTick = true;
GetOwner()->GetName();
}
我知道输出可能是null,因此它会崩溃,但是idk如何在没有任何崩溃的情况下期待错误。
答案 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);
}