虚幻引擎 Line Trace by Object 节点

Line Trace by Object”(按对象类型进行线条追踪)是虚幻引擎5中一种非常实用的碰撞检测方法。它与“按通道追踪”的核心区别在于:它只会检测你指定类型的物体,而忽略其他所有物体

以下是“Single Line Trace by Object”(单线)和“Multi Line Trace by Object”(多线)两个节点的完整使用案例和具体操作步骤。

准备工作:创建被检测的物体

为了让追踪有目标,我们首先需要创建一些带有碰撞的Actor。

  1. 创建蓝图类:在内容浏览器中右键,选择“蓝图类”,父类选择“Actor”。将其命名为 BP_TargetActor

  2. 添加碰撞组件:打开 BP_TargetActor,在组件面板添加一个“立方体”(或球体、胶囊体)组件。确保该组件的“碰撞预设”设置为“BlockAllDynamic”或类似的能产生阻挡的选项。

  3. 设置物体类型:这是“By Object”追踪的关键。选中立方体组件,在细节面板中找到“碰撞”->“物体类型”。你可以将其设置为“WorldDynamic”或“PhysicsBody”等。为了演示,我们保留默认的“WorldDynamic”

  4. 放置到关卡:编译并保存蓝图,然后将它从内容浏览器拖拽到游戏关卡中。可以多放几个作为不同位置的检测目标。

案例一:Single Line Trace by Object (单线检测)

这个节点会从起点到终点发射一条射线,返回第一个命中的、且类型匹配的物体

具体操作步骤:

  1. 打开事件图表:在内容浏览器中创建一个新的Actor蓝图(例如 BP_LineTracer)并打开其事件图表。

  2. 添加追踪节点:在事件图表中右键,搜索并添加 Line Trace For Objects 节点

  3. 设置追踪起点和终点

    • Start (起点):通常可以连接到 Get Actor Location 节点,表示从Actor自身位置开始发射。

    • End (终点):这里我们做一个简单的向前发射。从 Start 引脚拖出,添加 Get Actor Forward Vector 节点,再乘以一个距离(比如 * 1000),然后将结果与 Start 相加,得到终点位置。

  4. 指定要检测的物体类型 (核心步骤)

    • 从 Object Types 引脚拖出引线,搜索并添加 Make Array 节点

    • 点击 Make Array 节点上的 Add Pin 按钮,在下拉菜单中选择你想要检测的物体类型,例如 WorldDynamic。如果你想同时检测多种类型,可以添加多个引脚并分别设置

  5. 处理检测结果

    • 从 Line Trace For Objects 节点的 Out Hit 引脚拖出,添加 Break Hit Result 节点

    • 从 Break Hit Result 的 Hit Actor 引脚拖出,可以连接到 Print String 节点,在屏幕上打印出被击中物体的名称

    • Return Value 是一个布尔值,True 表示有命中,False 表示没有。你可以用这个值来控制分支逻辑(Branch)。

其他输入引脚说明

  • Trace Complex:是否检测复杂碰撞(如模型表面的三角面),默认False检测简单碰撞(如盒体、球体)即可

  • Actors to Ignore:一个数组,可以指定某些Actor不被检测到

  • Draw Debug Type:调试用,可以选择在场景中绘制出射线,方便观察

案例二:Multi Line Trace by Object (多线检测)

这个节点与单线版本类似,但它会返回所有命中且类型匹配的物体,而不仅仅是最先碰到的那个

具体操作步骤:

  1. 替换节点:在事件图表中,将 Line Trace For Objects 节点替换为 Multi Line Trace For Objects 节点

  2. 设置起点、终点和Object Types:设置方法与单线版本完全一致。

  3. 处理多个检测结果

    • 单线版本的 Out Hit 是一个结构体,而多线版本的 Out Hits 是一个数组

    • 从 Out Hits 引脚拖出,添加 For Each Loop 节点来遍历这个数组

    • 在循环体内,从 Array Element 引脚拖出,添加 Break Hit Result 节点

    • 之后,你就可以像单线版本一样,对每一个被命中的Actor进行操作了,比如打印出所有被击中物体的名称

常见问题与调试技巧

  • 为什么我的射线检测不到物体?

    1. 检查物体类型:确保被检测物体的“碰撞”->“物体类型”与你 Make Array 中指定的类型一致

    2. 检查碰撞响应:虽然“By Object”追踪会忽略碰撞响应设置,但请确保被检测物体的碰撞预设不是“NoCollision”或“OverlapAll”。

    3. 检查射线方向:确保射线的起点和终点设置正确,没有反向或长度为0。

  • 如何可视化我的射线?
    在 Line Trace For Objects 或 Multi Line Trace For Objects 节点中,找到 Draw Debug Type 下拉菜单,选择 For Duration 或 For One Frame,这样在运行时就能在场景中看到射线了

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容