返回
Ue 4 Actor射线追踪——Actor Line Trace 碰撞检测
前端
2023-10-29 17:26:51
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 游戏项目中创建更加动态、交互性的游戏环境。