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() 按射线发射方向排序的最终命中对象

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

挡在前面的东西:

相关推荐
ricky6752 天前
[Linux]Linux系统的20个实用命令详解
ue5
AA陈超3 天前
虚幻引擎5 GAS开发俯视角RPG游戏 P05-01.创建游戏玩法标签
c++·游戏·ue5·游戏引擎·虚幻
reddingtons4 天前
场景美术师的“无限画板”:UE5中非破坏性的材质混合(Material Blending)工作流
ue5·材质·设计师·技术美术·游戏策划·游戏美术·substance
m0_552200824 天前
《UE5_C++多人TPS完整教程》学习笔记61 ——《P62 武器开火特效(Fire Weapon Effects)》
c++·游戏·ue5
努力的小钟4 天前
UE5 GAS GameAbility源码解析 EndAbility
ue5
AA陈超4 天前
虚幻引擎5 GAS开发俯视角RPG游戏 P05-04 使用效果应用游戏标签
c++·游戏·ue5·游戏引擎·虚幻
zhangzhangkeji4 天前
UE5 测量 -1,长度测量:P2制作定位球与定位线,P3制作射线检测节点,P4在鼠标位置生成定位球
ue5
AA陈超6 天前
虚幻引擎UE5专用服务器游戏开发-33 在上半身播放组合蒙太奇
c++·游戏·ue5·游戏引擎·虚幻
zhangzhangkeji6 天前
cesium126,230130,Editing Tileset Materials - 0,编辑瓦片集材质,官方教程:
ue5
zhangzhangkeji6 天前
cesium126,230131,区域局部染色:赋值材质实例,建立“材质图层混合”文件,建立裁剪多边形,并应用自己的材质实例
ue5