【问题标题】:LineTraceSingle Collision Not Working (Unreal Engine 4)LineTraceSingle Collision 不工作(虚幻引擎 4)
【发布时间】:2015-11-06 07:43:32
【问题描述】:

我在尝试使用 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,它阻挡了所有的碰撞。

我做错了什么?

【问题讨论】:

    标签: unreal-engine4


    【解决方案1】:

    回答

    world 必须是GetWorld()


    说明

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

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

    问题是 GetWorld() 在这里返回 NULL! 我很惊讶实际上没有抛出任何错误...... 为了防止这种情况发生,这个电话应该在其他地方,比如BeginPlay()

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

    但当我真正查找 GetWorld() 时,我发现它是一个“缓存世界指针的获取器”。因此,将其保存到变量中确实没有意义。


    TL;DR

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

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2020-07-24
      • 2015-02-04
      • 1970-01-01
      • 2020-08-09
      • 2015-01-13
      • 2015-07-03
      • 2019-12-09
      • 2020-03-26
      相关资源
      最近更新 更多