UE MultiLineTraceByChannel函数返回只有一个对象的问题

ue,multilinetracebychannel · 浏览次数 : 7

小编点评

**MultiLineTraceByChannel与MultiLineTraceForObjects的区别** 在Unreal Engine中,MultiLineTraceByChannel和MultiLineTraceForObjects都用于执行射线检测,但它们的工作方式和返回的结果有所不同。 - **MultiLineTraceByChannel**:这个节点主要用于沿着给定的线条追踪碰撞,并返回所有在指定通道上产生碰撞的Actor。重要的是要注意,如果首个命中对象阻止了特定通道的继续追踪,那么在该通道上的其他对象将不会被检测到。这通常适用于需要检查特定通道内多个对象的情况。 - **MultiLineTraceForObjects**:与前者不同,这个节点会沿着给定线执行碰撞追踪,并返回所有与之相交的动态Actor(包括静态Actor)。重要的是,无论是否遇到阻挡,都会返回所有匹配特定物体类型的对象。这使得它更适合于检查沿一条线分布的多个对象。 **使用场景对比** - 如果你的目标是检测沿一条线分布的多个对象,并且不关心某个特定对象是否阻挡了其他对象,那么使用`MultiLineTraceForObjects`会更加合适。 - 如果你只想检测特定通道上的所有对象,并且不希望后续的对象被检测到(因为它们已经被第一个阻挡了),那么应该使用`MultiLineTraceByChannel`。 **结论** 根据你的具体需求选择合适的节点。如果需要返回多个对象(不受阻挡影响),则`MultiLineTraceForObjects`是更好的选择。如果只想检测特定通道上的所有对象,即使它们被其他对象阻挡,`MultiLineTraceByChannel`也会更符合你的需求。

正文

问题描述

MultiLineTraceByChannel,看函数名字是返回射线检测到的所有对象,实际使用过程中,发现返回的数组中只又一个对象。

Multi Line Trace by Channel

可以看下官方的文档解释:

此指南说明如何使用 Multi Line Trace by Channel 蓝图节点返回在 Visilibity 通道上响应的所有 Actor,并输出它们的名称。
image.png
Multi Line Trace By Channel 将沿给定线条执行碰撞追踪,并返回所有遭遇的命中,直到并包含首次阻挡命中,只返回对特定追踪通道响应的对象。这就意味着追踪的开始和结束之间有多个带碰撞的 Actor 或 组件 与特定的追踪通道发生 重叠,而您将接收到所有的 Actor 和组件。但是,如果首次命中 阻挡 了特定的追踪通道,则只会接收到这一个内容。如希望无视追踪通道的重叠或阻挡接受所有内容,则需要使用 Multi Line Trace By Object节点。以下是设置 Multi Line Trace By Channel 的步骤。

所以,如果第一个是Block的碰撞体,根本就不会返回后面的命中检测对象。

参考文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/using-a-multi-line-trace-raycast-by-channel-in-unreal-engine

看文档中的示例,可以看出该功能是为了命中玻璃后面的目标设计的。

Multi Line Trace By Object

如果你希望能够返回多个对象,可以使用Multi Line Trace By Object 方法。 官方文档如下:

参考文档 https://dev.epicgames.com/documentation/zh-cn/unreal-engine/using-a-multi-line-trace-raycast-by-object-in-unreal-engine

此指南说明如何使用 Multi Line Trace by Object 蓝图节点返回其命中的全部世界动态 Actor,并输出它们的名称。

MultiLineTraceForObjects 将沿给定的线执行碰撞追踪并返回所有遭遇的命中,只返回与特定物体类型相匹配的物体。以下是设置 MultiLineTraceForObjects 的步骤。

结语

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。

与UE MultiLineTraceByChannel函数返回只有一个对象的问题相似的内容: