虚幻引擎 Find Look at Rotation 节点

Find Look at Rotation 是一个很实用的蓝图节点,用于让一个角色或物体(比如AI敌人)的面部始终朝向某个目标(比如玩家)。它的原理是:给定 起始点 (Start) 和 目标点 (Target) 在世界空间中的坐标,为你计算出一个能让对象“看向”目标点的世界旋转值 (Rotator)

下面会先介绍节点的具体输入输出,再通过几个递进的案例为你演示具体用法。

📖 节点详解 (Input & Output)

使用时,你需要为这个节点提供两个输入,它将输出一个旋转值。

  • Inputs

    • Start (Vector): 准备旋转的物体(“观察者”)的世界坐标,通常源自其父对象的 Get World Location 节点

    • Target (Vector): 要注视的目标(“被观察者”)的世界坐标,同样来自目标对象的 Get World Location 节点

  • Outputs

    • Return Value (Rotator): 一个 Rotator(由 Pitch, Yaw, Roll 组成的旋转值)。它代表从起始点到目标点所需的绝对世界旋转量。

    如果只需要在水平方向旋转,可以配合 Break Rotator 和 Make Rotator 节点,提取 Yaw 值并将 Pitch 和 Roll 设为 0


📝 完整案例实操

案例一:让立方体始终注视玩家(最基础)

这是理解该节点最直观的例子:创建一个立方体,并让它始终面向玩家。

  1. 准备场景:新建一个第三人称模板项目。在场景中放置一个 Cube,在细节面板将其 Mobility 设为 Movable

  2. 添加蓝图:选中 Cube,点击“蓝图/添加脚本”,命名为 BP_LookAtTarget

  3. 编写逻辑:打开 BP_LookAtTarget 的事件图表,按以下方式连接节点

    • Tick 事件: 先从 Event Tick 节点拖出执行线。

    • 获取目标位置: 拖出 Get Player Pawn(获取角色)→ Get Actor Location(获取角色世界位置),连接到 Find Look At Rotation 的 Target 输入。

    • 获取自身位置: 自身位置通过 Get Actor Location 获取,连接到 Start 输入。

    • 应用旋转Find Look At Rotation 的输出连接到 Set Actor Rotation 的 New Rotation 输入,其目标为 Self

  4. 测试结果:编译保存后,运行游戏,你会发现 Cube 的正面会一直跟随角色旋转。

案例二:平滑注视效果(进阶体验)

直接注视在角色移动时显得很僵硬。我们可以通过 RInterp To 节点来平滑过渡,这在游戏角色转向时非常实用

在前一个案例的蓝图基础上做如下修改即可

  • 加入平滑逻辑:在 Find Look at Rotation 和 Set Actor Rotation 之间加入 RInterp To 节点。

    • Current: 连接 Get Actor Rotation 的返回值,获取当前帧的物体旋转角度。

    • Target: 连接 Find Look at Rotation 的计算结果。

    • Delta Time: 连接从 Event Tick 引出的相同名称的引脚。

    • Interp Speed: 使用 Float 常量,设置一个值(如 5-10),值越小,转向越平滑。

  • 完成连接:最后,将 RInterp To 的输出连接到 Set Actor Rotation 的 New Rotation 输入。

现在运行,立方体将会以一个平滑的速度缓慢转向玩家,而不是“瞬间回头”。

案例三:C++中的实现

在C++代码中,可以通过 UKismetMathLibrary::FindLookAtRotation 来实现同样的功能。以下是关键代码片段

cpp
#include "Kismet/KismetMathLibrary.h"

void AMyActor::LookAtTarget(AActor* TargetActor)
{
    if (TargetActor)
    {
        // 计算需要旋转的角度
        FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(
            GetActorLocation(),
            TargetActor->GetActorLocation()
        );

        // 应用旋转
        SetActorRotation(LookAtRotation);
    }
}

这段代码的逻辑和蓝图完全一致,通过 FindLookAtRotation 计算出指向目标的方向,再用 SetActorRotation 应用到物体上。


💡 可能遇到的问题与解决思路

  • 物体不旋转?

    • 检查 Mobility:放置为静态或固定属性的 Actor 无法被旋转,请务必在细节面板中将 Mobility 设置为 Movable

    • 检查连接:需确保 Set Actor Rotation 的 New Rotation 输入被正确连接。

  • 只绕 Z 轴旋转 (仅水平转向)

    • 目的:常用于需要保持垂直方向的角色或炮塔。

    • 解决方法:在应用旋转前,先将 Find Look At Rotation 的结果 Break Rotator,然后 Make Rotator,将 Pitch 和 Roll 置为 0,只保留 Yaw 值即可

  • 与动画蓝图的联动

    • 目的:让角色的上半身或头部独立旋转,而下半身保持移动方向

    • 核心思路:结合 Two Bone IK 或 Look At 节点(位于动画蓝图中)。注意:Find Look At Rotation 通常用于设置Actor或Component的世界旋转,而角色头部的单独旋转更适合在动画蓝图内部处理,使用专门的 Look At 节点

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容