跳到主要内容
← 全部概念
游戏系统 / 25

转向行为

让速度逐渐转向目标

交互演示

交互演示 · 移动指针或点击画面,观察变化

转向行为通过每帧施加一个力来移动单位,使当前速度逐渐接近期望速度,并限制最大施力。到达行为会在减速半径内降低期望速度,这里用虚线圆表示;分离行为则会在单位靠得太近时把它们推开。左侧的八个单位全速冲向目标,冲过头后每帧反向,最终挤在同一点;右侧的八个单位则会减速,并稳定停在目标周围。

适用场景

使用转向行为,可以让单位平滑地朝局部目标移动,或避开邻居。遇到需要绕障碍规划路线的情况,应结合寻路使用;单靠转向行为可能会被困住。

实现示例

不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。

desired = normalize(target - position) * desiredSpeed
steering = clampLength(desired - velocity, maxAcceleration)
velocity = clampLength(velocity + steering * dt, maxSpeed)
position += velocity * dt

常见错误

同时限制加速度和速度。使用到达行为时,应在接近终点时降低期望速度,而不是不断全速冲过目标。

内容原作 Nicolas Zullo · 中文整理与交互改编