U++ 射线检测

📅 2026/7/19 13:50:08
U++ 射线检测
发射射线UWorld* World GetWorld(); // 1. 射线起点 FVector Start GetActorLocation(); // 2. 当前 Actor 的前方方向 FVector ForwardVector GetActorForwardVector(); // 3. 射线终点 FVector End Start ForwardVector * TraceDistance; // 4. 用于保存命中结果 FHitResult HitResult; // 5. 射线附加设置 FCollisionQueryParams QueryParams; // 忽略当前 Actor防止射线击中自己 QueryParams.AddIgnoredActor(this); // 6. 发射射线 bool bHit World-LineTraceSingleByChannel( HitResult, Start, End, ECC_Visibility, QueryParams );HitResult用于保存射线命中的详细信息执行射线检测前HitResult是一个空的结果对象执行后如果命中物体UE会将以下信息写进去HitResult.GetActor()HitResult.GetComponent()HitResult.ImpactPointHitResult.ImpactNormalHitResult.Distance注意一下*HitComponent-GetName()、*HitActor-GetName()ECC_Visibility这是射线使用的通道碰撞目标物体的碰撞响应通常要设置为Block否则射线可能会直接穿过目标。QueryParams用于设置射线检测的附加规则。例忽略当前ActorQueryParams.AddIgnoredActor(this);还可以忽略多个ActorQueryParams.AddIgnoredActor(this); QueryParams.AddIgnoredActor(OtherActor);返回值bHitbool bHit World-LineTraceSingleByChannel(...);返回true表示找到阻挡射线的命中结果返回false表示没有找到阻挡结果。if (bHit) { // 命中了 } else { // 没有命中 }调试射线DrawDebugLineDrawDebugLine( GetWorld(), Start, End, FColor::Red, false,//bPersistentLines 2.0f,//LifeTime 0,//DepthPriority 2.0f//Thickness );DrawDebug调试参数还有好几种DrawDebugLine()DrawDebugPoint()DrawDebugSphere()DrawDebugBox()......