我在尝试使用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);
这是有效的,我可以看到我的线穿过一堵墙。
如上所示,此墙的对象类型确实是WorldStatic
,它会阻止所有碰撞。
我做错了什么?
答案 0 :(得分:0)
world
必须为GetWorld()
我在Actor的构造函数中保存了对UWorld *指针的引用,如下所示:
MyActor::MyActor()
{
PrimaryActorTick.bCanEverTick = true;
world = GetWorld();
}
问题是GetWorld()
在这里返回NULL! 我很惊讶没有发现任何错误......
为防止这种情况发生,此调用应位于其他位置,例如BeginPlay()
:
void AForceField::BeginPlay()
{
Super::BeginPlay();
world = GetWorld();
}
但是当我实际查找GetWorld()
时,我发现它是缓存世界指针"的" getter。因此,将变量保存到变量中真的没有意义。
不要将GetWorld()
保存到变量中。