返回

Ue 4 Actor射线追踪——Actor Line Trace 碰撞检测

前端

UE 4 Actor 射线追踪——Actor Line Trace 碰撞检测

欢迎来到 UE 4 Actor 射线追踪教程的第十七部分!在本教程中,我们将使用 Actor 类来实现射线追踪碰撞检测。准备好在 UE 4 中构建一个更具交互性的游戏世界吧!

1. 创建 Actor 子类

首先,让我们创建一个新的 Actor 子类,在这个例子中,我们将新建的 Actor 子类称为 ActorLineTrace。

#include "ActorLineTrace.h"

// 头文件

// 构造函数
ActorLineTrace::ActorLineTrace()
{
    // 变量

    // 射线追踪参数
    TraceLength = 1000.0f;
    TraceChannel = ECC_Visibility;
}

// 成员函数

// 射线追踪碰撞检测
void ActorLineTrace::Trace()
{
    // 射线追踪起点和终点
    FVector Start = GetActorLocation();
    FVector End = Start + FVector(0.0f, 0.0f, TraceLength);

    // 射线追踪参数
    FCollisionQueryParams TraceParams;
    TraceParams.AddIgnoredActor(this);

    // 执行射线追踪
    FHitResult HitResult;
    bool bHit = GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, TraceChannel, TraceParams);

    // 处理碰撞结果
    if (bHit)
    {
        // 获取碰撞到的 Actor
        AActor* HitActor = HitResult.GetActor();

        // 输出碰撞信息
        UE_LOG(LogTemp, Warning, TEXT("碰撞到 Actor:%s"), *HitActor->GetName());
    }
}

// BeginPlay 事件
void ActorLineTrace::BeginPlay()
{
    Super::BeginPlay();

    // 开始射线追踪
    Trace();
}

2. 实现射线追踪

接下来,我们需要实现射线追踪功能。我们将使用 Trace() 函数来执行射线追踪并处理碰撞结果。

void ActorLineTrace::Trace()
{
    // 射线追踪起点和终点
    FVector Start = GetActorLocation();
    FVector End = Start + FVector(0.0f, 0.0f, TraceLength);

    // 射线追踪参数
    FCollisionQueryParams TraceParams;
    TraceParams.AddIgnoredActor(this);

    // 执行射线追踪
    FHitResult HitResult;
    bool bHit = GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, TraceChannel, TraceParams);

    // 处理碰撞结果
    if (bHit)
    {
        // 获取碰撞到的 Actor
        AActor* HitActor = HitResult.GetActor();

        // 输出碰撞信息
        UE_LOG(LogTemp, Warning, TEXT("碰撞到 Actor:%s"), *HitActor->GetName());
    }
}

3. 调用射线追踪

最后,我们需要在 Actor 的 BeginPlay() 事件中调用 Trace() 函数来开始射线追踪。

void ActorLineTrace::BeginPlay()
{
    Super::BeginPlay();

    // 开始射线追踪
    Trace();
}

4. 运行游戏

现在,你可以运行游戏并观察射线追踪的碰撞检测效果。当 ActorLineTrace 类中的 Actor 移动时,它会不断执行射线追踪并输出碰撞信息。

总结

在本教程中,我们学习了如何使用 UE 4 C++ 来实现 Actor 射线追踪碰撞检测。你不仅掌握了射线追踪的基本原理,还了解了如何在 UE 4 中使用 LineTraceSingleByChannel() 函数来执行射线追踪。通过本教程,你将能够在你的 UE 4 游戏项目中创建更加动态、交互性的游戏环境。