LineTraceSingle碰撞不起作用(虚幻引擎4)

时间:2015-11-06 07:43:33

标签: unreal-engine4

我在尝试使用LineTraceSingle来检测点击时非常困难。

void ACustomActor::Tick(float DeltaTime){
    bool isHit = world->LineTraceSingle(HitResult, start, endV,
            traceParams, FCollisionObjectQueryParams(ECC_WorldStatic));
}

我的理解是这是从起点到结束点发出一条线并试图发现第一个"块"来自WorldStatic类型的对象的(命中)事件。

我正在使用以下代码绘制调试行:

    DrawDebugLine(GetWorld(), start, endV, FColor::Blue, true, 1.0F, (uint8)'\000', 5.0f);

这是有效的,我可以看到我的线穿过一堵墙。

enter image description here enter image description here

如上所示,此墙的对象类型确实是WorldStatic,它会阻止所有碰撞。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

<强>答案

world必须为GetWorld()

说明

我在Actor的构造函数中保存了对UWorld *指针的引用,如下所示:

MyActor::MyActor()
{
    PrimaryActorTick.bCanEverTick = true;
    world = GetWorld();
}

问题是GetWorld()在这里返回NULL! 我很惊讶没有发现任何错误...... 为防止这种情况发生,此调用应位于其他位置,例如BeginPlay()

void AForceField::BeginPlay()
{
    Super::BeginPlay();
    world = GetWorld();
}

但是当我实际查找GetWorld()时,我发现它是缓存世界指针&#34;的&#34; getter。因此,将变量保存到变量中真的没有意义。

TL; DR

不要将GetWorld()保存到变量中。