LineTraceSingle 碰撞不起作用 (Unreal Engine 4)
LineTraceSingle Collision Not Working (Unreal Engine 4)
我在尝试使用 LineTraceSingle
检测命中时遇到了相当大的困难。
void ACustomActor::Tick(float DeltaTime){
bool isHit = world->LineTraceSingle(HitResult, start, endV,
traceParams, FCollisionObjectQueryParams(ECC_WorldStatic));
}
我的理解是,这是从起点到终点发出一条线,并试图从类型为 WorldStatic
的对象中发现第一个 "block"(命中)事件。
我正在使用以下代码绘制调试线:
DrawDebugLine(GetWorld(), start, endV, FColor::Blue, true, 1.0F, (uint8)'[=12=]0', 5.0f);
这很有效,我可以看到我的线穿过墙。
正如你在上面看到的,这面墙的对象类型确实是WorldStatic
并且它阻止了所有碰撞。
我做错了什么?
回答
world
需要 GetWorld()
说明
我在 Actor 的构造函数中保存了对 UWorld* 指针的引用,如下所示:
MyActor::MyActor()
{
PrimaryActorTick.bCanEverTick = true;
world = GetWorld();
}
问题是 GetWorld()
returns NULL here! 我很惊讶没有实际上抛出的错误...
为了防止这种情况发生,这个调用应该在其他地方,比如 BeginPlay()
:
void AForceField::BeginPlay()
{
Super::BeginPlay();
world = GetWorld();
}
但是当我真正查找 GetWorld()
时,我看到它是一个“getter 用于缓存的世界指针 ”。所以将其保存到变量中真的没有意义。
TL;DR
不要将 GetWorld()
保存到变量。
我在尝试使用 LineTraceSingle
检测命中时遇到了相当大的困难。
void ACustomActor::Tick(float DeltaTime){
bool isHit = world->LineTraceSingle(HitResult, start, endV,
traceParams, FCollisionObjectQueryParams(ECC_WorldStatic));
}
我的理解是,这是从起点到终点发出一条线,并试图从类型为 WorldStatic
的对象中发现第一个 "block"(命中)事件。
我正在使用以下代码绘制调试线:
DrawDebugLine(GetWorld(), start, endV, FColor::Blue, true, 1.0F, (uint8)'[=12=]0', 5.0f);
这很有效,我可以看到我的线穿过墙。
正如你在上面看到的,这面墙的对象类型确实是WorldStatic
并且它阻止了所有碰撞。
我做错了什么?
回答
world
需要 GetWorld()
说明
我在 Actor 的构造函数中保存了对 UWorld* 指针的引用,如下所示:
MyActor::MyActor()
{
PrimaryActorTick.bCanEverTick = true;
world = GetWorld();
}
问题是 GetWorld()
returns NULL here! 我很惊讶没有实际上抛出的错误...
为了防止这种情况发生,这个调用应该在其他地方,比如 BeginPlay()
:
void AForceField::BeginPlay()
{
Super::BeginPlay();
world = GetWorld();
}
但是当我真正查找 GetWorld()
时,我看到它是一个“getter 用于缓存的世界指针 ”。所以将其保存到变量中真的没有意义。
TL;DR
不要将 GetWorld()
保存到变量。