UE小:在Unreal Engine 5中实现多层静态网格体遮挡拾取

问题描述

当需要拾取被多层静态网格体 遮挡的对象时,若所有网格体碰撞预设为BlockAll,需要通过特殊配置实现穿透检测。


完整实现方案

1. 创建自定义追踪通道

  1. 进入 项目设置(Project Settings) > 碰撞(Collision)​
  2. 追踪通道(Trace Channels)​ 下添加新通道(如 MultiTrace

2. 调整静态网格体碰撞响应

  1. 将需要穿透的静态网格体碰撞预设改为 Custom
  2. 设置新建的 MultiTrace 通道响应为 Overlap
  3. 其他通道保持 Block 维持原有碰撞行为

3. 蓝图实现

项目设置初始化
  1. 项目设置 > 碰撞 > 添加追踪通道 "MultiTrace"
静态网格体配置
  1. 静态网格体属性 > 碰撞预设 > Custom
  2. MultiTrace 响应设置为 Overlap
  3. 其他通道保持 Block
射线检测逻辑
  1. Line Trace Multi by Channel (Trace Channel: MultiTrace, Start, End)
  2. 获取返回的 Out Hits 数组
  3. 使用数组节点获取 Last Element
  4. 处理 Last Hit 中的 Hit Actor

4. C++实现

cpp 复制代码
void YourClass::PerformMultiTrace()
{
    UWorld* World = GetWorld();
    if (!World) return;

    FVector Start = ...; // 射线起点
    FVector End = ...;   // 射线终点

    TArray<FHitResult> Hits;
    FCollisionQueryParams Params;
    Params.bTraceComplex = true;

    bool bHit = World->LineTraceMultiByChannel(
        Hits,
        Start,
        End,
        ECC_GameTraceChannel1, // 替换为自定义通道枚举
        Params
    );

    if (bHit && Hits.Num() > 0)
    {
        FHitResult& LastHit = Hits.Last();
        if (AActor* HitActor = LastHit.GetActor())
        {
            UE_LOG(LogTemp, Log, TEXT("Hit Actor: %s"), *HitActor->GetName());
        }
    }
}

参数说明表

参数/节点 作用
LineTraceMultiByChannel 穿透多层物体的射线检测方法
bTraceComplex 启用三角面层级的精确碰撞检测
ECC_GameTraceChannel1 需替换为项目中实际的自定义通道枚举名
Hits.Last() 按射线发射方向排序的最终命中对象

无论前面挡着多少东西也要检测到的对象:

挡在前面的东西:

相关推荐
AI视觉网奇19 小时前
ue 蓝图动画学习笔记
笔记·学习·ue5
陈友松1 天前
UE5 文件传输插件:支持任意类型,任意大小(超过2G)的文件上传和下载
ue5
AI视觉网奇2 天前
CBAudio2Face
ue5·audio2face
AI视觉网奇2 天前
ue 操作 metahuman
ue5
AI视觉网奇2 天前
ue python脚本 获取资产
笔记·ue5
AI视觉网奇2 天前
audio2face docker方式
docker·ue5
会思考的猴子2 天前
UE5 笔记二 GameplayAbilitySystem Dash(冲刺)
笔记·ue5
AI视觉网奇3 天前
audio2face ue插件形式实战笔记
笔记·ue5
nutriu4 天前
从UE5.6DNA 导出指定LOD层级的ARkit52个表情或者Metahuman263个表情教程 #BlendShapeExporter
ue5·数字人·arkit·blendshape·虚拟角色·meta human·dna
AI视觉网奇4 天前
nvcr.io 登录方法
docker·ue5