在蓝图中使用 Raycasts(Tracing)

本页面的内容:

在本页中,您将了解 SingleMulti Raycasts 的区别,以及如何设置它们来检索碰撞信息。

单线跟踪

LineTraceByChannel

LineTraceByChannel 将沿着指定的线路执行一次碰撞跟踪,然后返回撞到的(对跟踪通道做出响应的)第一个对象。

以下步骤用于设置基于通道的单线跟踪。

1.用 Blueprint First Person 模板(选择 Include Starter Content)新建一个项目,然后打开此项目。

1.在 FirstPersonBP/Blueprints 文件夹中,打开 FirstPersonCharacter 蓝图。

  1. 在图表中 Right-click,然后搜索并添加一个 Event Tick 节点。

    GHT2B_1.png

    这会在跟踪时执行每一帧。

  2. 拖开执行针,然后搜索 LineTraceByChannel 节点。

    GHT2B_2.png

  3. 按住 Ctrl 键,将 FirstPersonCamera 组件拖入。

    GHT2B_3.png

    我们将在这里开始(来自于摄像机的)跟踪。

  4. 拖开 FirstPersonCamera 节点,然后添加一个 Get World Location 节点,随后将其连接至跟踪的 Start

  5. 再次拖开 FirstPersonCamera 节点并添加一个 Get World Rotation 节点。

    GHT2B_4.png

    我们将从 FirstPersonCamera 的位置开始跟踪,然后获取 FirstPersonCamera 的旋转值。

  6. 拖出 Get World Rotation 并添加一个 Get Forward Vector,然后将其拖开并添加一个 Vector * Float 节点(设置为 1500)。

    GHT2B_5.png

    我们将获取旋转和前进向量,然后由此向外扩张 1500(跟踪长度值)。

  7. 拖开 Get World Location 并添加一个 Vector + Vector 节点,然后按照以下方式连接至跟踪节点的 End

    GHT2B_6.png

    我们将获取 FirstPersonCamera 的位置,并根据其旋转和前进向量由此向外扩张 1500单位。

  8. 在跟踪节点上,将 Draw Debug Type 设置为 For One Frame

    GHT2B_7.png

    这样我们就能在查看调试行的同时运行游戏并查看线踪迹。

  9. 拖开踪迹的执行外针并添加一个 Print String 节点。

    GHT2B_8.png

  10. 拖开 Out Hit 针并搜索 Break Hit,然后添加一个 Break Hit Result 节点。

    GHT2B_9.png

  11. Hit Actor 针连出 Break Hit Result,添加一个 To String (Object) 节点,然后将其连接至 Print String 节点。

    单击图像可查看全图。

    这样可以让我们将跟踪时击中的对象输出至屏幕。

  12. 单击 Compile 按钮,然后在编辑器中运行并查看关卡中的立方体。

    GHT2B_11.png

    我们在这里没有使用第一人称视角,为的是让您看到跟踪视角。

    您应当看到在跟踪线击中立方体时,它会将立方体输出至屏幕。

以上示例将返回所有被设置为对提供的跟踪通道做出响应的对象,但有时您可能只想返回特定的对象。在上面的示例中,您可以使用 Actors to Ignore) 针,它对应的是一个应当被跟踪所忽略的 Actor 阵列, 但这意味着您需要指定每一个要忽略的 Actor。

您也可以执行一个基于对象的单线跟踪,从而仅返回指定的 ObjectTypes。这样就可以在跟踪时只包含一组特定对象。

LineTraceForObjects

LineTraceForObjects 将沿着指定的线路执行一次碰撞跟踪,然后返回撞到的(对ObjectType做出响应的)第一个对象。

要设置基于对象的单线跟踪,请执行以下步骤:

1.按照 LineTraceByChannel 示例所用的步骤设置一个跟踪。

  1. LineTraceByChannel 节点替换为 LineTraceForObjects 节点。

  2. 拖开 Object Types 针并添加 Make Array 节点。

    GHT2B_12.png

  3. Make Array 节点上,通过下拉菜单指定您要执行跟踪的 ObjectType

    GHT2B_13.png

    在这里,我们要针对 WorldDyanmic 对象执行跟踪。您可以单击 Add Pin 按钮来添加更多。

  4. 您可以按照 LineTraceByChannel 的设置方式来设置其余的跟踪。

    单击图像可查看全图。

  5. 我们在关卡中添加了一个 WorldDynamic 对象。

    GHT2B_16.png

    现在,只有添加的 Actor 才返回为“命中”,而立方体作为物理 Actor(Physics Actor)将不会返回“命中”。

多线跟踪

MultiLineTraceByChannel

MultiLineTraceByChannel 将沿着指定的线路执行一次碰撞跟踪,然后返回所有遇到的撞击,包括第一个阻挡撞击,仅返回对指定跟踪通道做出响应的对象。

以下步骤用于设置 MultiLineTraceByChannel

1.按照 LineTraceByChannel 示例所用的步骤设置一个跟踪。

1.将 LineTraceByChannel 节点替换为 MultiLineTraceByChannel 节点。

  1. 拖开 Out Hits 针并添加一个 ForEachLoop 节点。

    GHT2B_18.png

    由于击中了多个 Actor,我们需要对其各个采取某种操作(在本示例中,我们将Actor输出至屏幕)。

  2. 拖开 Array Element 并添加一个 Break Hit Result,然后拖出 Hit Actor,添加一个 To String (Object),随后再连接至一个 Print String

    单击图像可查看全图。

    这样可以将每个被阵列击中的 Actor 输出至字符串。

  3. 现在物理 Actor 前面有一个玻璃窗。

    GHT2B_17.png

    这个玻璃窗是一个 Destructible Mesh,其碰撞设置中对于 VisibilityTrace Response**被设为**Overlap,而物理Actor(立方体)的 Visibility 被设置为 Block

    这种设定可用于射穿(摧毁)某个对象,也可以击中玩家或敌人。

MultiLineTraceForObjects

MultiLineTraceForObjects 将沿着指定的线路执行一次碰撞跟踪,然后返回所有遇到的撞击,同时仅返回对指定对象类型做出响应的对象。

以下步骤用于设置 MultiLineTraceForObjects

1.按照 LineTraceByChannel 示例所用的步骤设置一个跟踪。

  1. LineTraceByChannel 节点替换为 MultiLineTraceForObjects 节点。

  2. 拖开 Object Types 针并添加一个 Make Array 节点,然后用下拉菜单将对象添加到阵列。

    GHT2B_21.png

    在这里,我们将 WorldDynamicPhysics Body 指定为我们的对象类型。您可以使用 Add pin 按钮将更多对象类型添加到阵列。

  3. 从跟踪节点的 Out Hits 针连出来,然后添加一个 ForEachLoop 节点。

    GHT2B_22.png

    这样可以对跟踪时击中的每个 Actor 采取操作。

  4. 拖开 Array Element 并添加一个 Break Hit Result,然后拖出 Hit Actor,添加一个 To String (Object),随后再连接至一个 Print String

    单击图像可查看全图。

    这样可以将每个被阵列击中的 Actor 输出至屏幕。

  5. 这一次,我们在物理 Actor(物理实体对象类型)前面布置了一个悬挂吊灯(世界动态对象类型)。

    GHT2B_20.png

    Multi Line Trace by Object 不同于 Multi Line Trace by Channel,它不会在击中第一个对象后停下,因此跟踪会经过光线直达立方体。

形状跟踪

GHT2B_24.png

如果线性跟踪无法满足要求,您可以使用形状跟踪来获得所需的结果。例如,您可能要为敌人创建一个“视界圆锥”,并希望探测到进入圆锥范围内的玩家。而单靠线性跟踪可能已经不够,因为玩家可以躲在线性轨迹下方来避开探测。

这时,您可以使用方形跟踪、胶囊跟踪或球形跟踪。每一种形状跟踪的工作原理都与线性跟踪类似:您需要从起点到终点进行扫描并寻找碰撞。但由于您将形状用作 Raycast 中的某种实体时,形状跟踪还多出了一个检查层级。

您可以将形状跟踪用作单一或多重跟踪,并通过线性跟踪的设置方式来设置它们,但需要提供更多关于所用形状的大小或方向的详细信息。