虚幻引擎 Get Unit Direction (Vector) 节点

一、节点概述

Get Unit Direction (Vector) 节点位于蓝图数学库(Kismet Math Library)中,其功能是计算从位置 A 指向位置 B 的单位方向向量单位方向向量 = (位置B - 位置A) / |位置B - 位置A|

该节点接收两个输入——From(起点)和 To(终点)——并输出一个长度为 1 的方向单位向量。如果两个位置完全相同,节点直接输出 (0,0,0) 以避免除零错误。在蓝图中选择右键输入 Get Unit Direction 即可找到该节点。

💡 数学本质Get Unit Direction 先计算向量差 To - From,再对结果进行归一化(Normalize)。归一化是将向量长度缩放为 1 的关键操作,而 Get Unit Direction 正是将”向量减法”与”归一化”合二为一的便捷节点


二、完整案例一:敌人追踪玩家

本案例展示如何使用 Get Unit Direction 让一个 AI 敌人持续追踪玩家角色。

📝 案例目标

让一个敌对人类(Enemy)在游戏世界中持续向玩家角色(Player)移动,移动速度由蓝图控制。

🔧 节点选择与连接

核心蓝图逻辑如下(可在角色蓝图或独立的敌人蓝图中实现):

  1. 使用 Event Tick 每帧执行追踪逻辑(若性能要求较高,也可使用 Set Timer by Event 按固定间隔执行)

  2. 获取玩家角色位置和敌人自身位置,输入 Get Unit Direction 节点,得到从敌人指向玩家的单位方向向量

  3. 将输出向量乘以移动速度(可调整的浮点数),得到每帧的实际位移量

  4. 调用 Add Actor World Offset(或对移动组件施加力/设置速度)将敌人向玩家移动

⚠️ 速度控制说明:在 Event Tick 中,若乘以速度为 1,则每帧移动一个单位方向(长度 1);若要加速,可将速度值设为大于 1(如 5 表示每帧移动 5 个单位);若要减速,可设为小于 1(如 0.5)。若希望脱离帧率影响,需乘以 Delta Seconds


三、完整案例二:AI 逃亡行为

本案例演示如何让 AI 对象(如萤火虫)在玩家靠近时朝玩家反方向逃离。

📝 案例目标

当玩家接近时,AI 对象反向逃离,且始终沿 X-Z 平面移动(适用于 2D 横版或侧向场景)。

🔧 节点选择与连接

  1. 获取 AI 自身位置与玩家位置

  2. 将其输入 Get Unit Direction 节点,得到从 AI 指向玩家的单位方向向量

  3. 对该方向向量整体取(Multiply 乘以 -1),得到反向方向单位向量

  4. 创建一个本地 Vector 变量存储该反向方向向量(此步骤至关重要:若直接连接,每帧重算会导致方向不断变化,从而让移动逻辑混乱)

  5. 将该本地变量值输入 Timeline 节点,通过 Timeline 控制逃离的持续时间与距离,输出 Vector 值用于 Lerp (Vector) 节点,再将最终结果传入 Set Actor Location 完成位置插值

⚠️ 关键要点:通过本地变量事先存储逃离方向,可避免在移动动画过程中因玩家位置变化而重新计算方向,确保逃离路径是直线而非不断折返。


四、完整案例三:沿样条线移动

本案例展示如何使用 Get Unit Direction 实现沿样条曲线移动,适用于过场动画、路线巡逻等场景。

📝 案例目标

使物体沿预设的样条线(Spline)自动移动,并使用 Unit Direction 确定每段的切线方向(也可直接借助 UE5 内置的 GetDirectionAtSplineInputKey 等 Spline 组件节点实现)

🔧 节点选择与连接

  1. 在视口中创建一个 Spline 样条线,并添加若干样条点

  2. 在蓝图中获取 Spline 组件的引用

  3. 若欲手动计算 Unit Direction,可用 Get Location at Spline Point 获取当前点和下一段点的位置,二者相减后再通过 Get Unit Direction 获取该段的移动方向

  4. 将方向和速度相乘,并利用 Timeline 控制移动进度,调用 Set Actor Location 更新物体位置

✅ 采用样条线方式可使移动路径高度可控,有利于实现平滑的轨道运动或固定路线巡逻。


五、注意事项总结

场景 注意点
性能优化 建议避免在 Event Tick 中使用过高的调用频率(如设成 0.001s),会增加大量无用开销;推荐使用 Delta Seconds 确保帧率适配
速度缩放 单位方向向量长度为 1,速度缩放值需根据实际需要的单位/秒或单位/帧来衡量
避免除零 两个位置完全相同时,节点会直接返回 (0,0,0);逻辑设计中应避免依赖该特殊结果进行后续运算
本地变量存储 在涉及动画插值时,务必先将 Unit Direction 存入本地变量,以免因持续重算导致方向紊乱
其他同样产生单位向量的节点 Get Forward Vector 可获取组件的正向单位向量To Direction And Length 能将给定向量转换为单位方向并输出其原始长度

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容