一、节点概述
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)移动,移动速度由蓝图控制。
🔧 节点选择与连接
核心蓝图逻辑如下(可在角色蓝图或独立的敌人蓝图中实现):
-
使用 Event Tick 每帧执行追踪逻辑(若性能要求较高,也可使用 Set Timer by Event 按固定间隔执行)
-
获取玩家角色位置和敌人自身位置,输入
Get Unit Direction节点,得到从敌人指向玩家的单位方向向量 -
将输出向量乘以移动速度(可调整的浮点数),得到每帧的实际位移量
-
调用 Add Actor World Offset(或对移动组件施加力/设置速度)将敌人向玩家移动
⚠️ 速度控制说明:在 Event Tick 中,若乘以速度为 1,则每帧移动一个单位方向(长度 1);若要加速,可将速度值设为大于 1(如 5 表示每帧移动 5 个单位);若要减速,可设为小于 1(如 0.5)。若希望脱离帧率影响,需乘以 Delta Seconds。
三、完整案例二:AI 逃亡行为
本案例演示如何让 AI 对象(如萤火虫)在玩家靠近时朝玩家反方向逃离。
📝 案例目标
当玩家接近时,AI 对象反向逃离,且始终沿 X-Z 平面移动(适用于 2D 横版或侧向场景)。
🔧 节点选择与连接
-
获取 AI 自身位置与玩家位置
-
将其输入
Get Unit Direction节点,得到从 AI 指向玩家的单位方向向量 -
对该方向向量整体取负(Multiply 乘以 -1),得到反向方向单位向量
-
创建一个本地 Vector 变量存储该反向方向向量(此步骤至关重要:若直接连接,每帧重算会导致方向不断变化,从而让移动逻辑混乱)
-
将该本地变量值输入 Timeline 节点,通过 Timeline 控制逃离的持续时间与距离,输出 Vector 值用于
Lerp (Vector)节点,再将最终结果传入Set Actor Location完成位置插值
⚠️ 关键要点:通过本地变量事先存储逃离方向,可避免在移动动画过程中因玩家位置变化而重新计算方向,确保逃离路径是直线而非不断折返。
四、完整案例三:沿样条线移动
本案例展示如何使用 Get Unit Direction 实现沿样条曲线移动,适用于过场动画、路线巡逻等场景。
📝 案例目标
使物体沿预设的样条线(Spline)自动移动,并使用 Unit Direction 确定每段的切线方向(也可直接借助 UE5 内置的 GetDirectionAtSplineInputKey 等 Spline 组件节点实现)。
🔧 节点选择与连接
-
在视口中创建一个 Spline 样条线,并添加若干样条点
-
在蓝图中获取 Spline 组件的引用
-
若欲手动计算 Unit Direction,可用 Get Location at Spline Point 获取当前点和下一段点的位置,二者相减后再通过
Get Unit Direction获取该段的移动方向 -
将方向和速度相乘,并利用 Timeline 控制移动进度,调用 Set Actor Location 更新物体位置
✅ 采用样条线方式可使移动路径高度可控,有利于实现平滑的轨道运动或固定路线巡逻。
五、注意事项总结
| 场景 | 注意点 |
|---|---|
| 性能优化 | 建议避免在 Event Tick 中使用过高的调用频率(如设成 0.001s),会增加大量无用开销;推荐使用 Delta Seconds 确保帧率适配 |
| 速度缩放 | 单位方向向量长度为 1,速度缩放值需根据实际需要的单位/秒或单位/帧来衡量 |
| 避免除零 | 两个位置完全相同时,节点会直接返回 (0,0,0);逻辑设计中应避免依赖该特殊结果进行后续运算 |
| 本地变量存储 | 在涉及动画插值时,务必先将 Unit Direction 存入本地变量,以免因持续重算导致方向紊乱 |
| 其他同样产生单位向量的节点 | Get Forward Vector 可获取组件的正向单位向量;To Direction And Length 能将给定向量转换为单位方向并输出其原始长度 |
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容