返回首页

Unity 中的转向行为:代理导航

本文描述了转向行为在水下 Unity 3D 迷宫中导航鱼代理的应用。寻求、追逐、逃避等算法详细说明了数学公式。该方法确保平滑、反应式移动,而无需全局路径规划。

Unity 3D 中的代理导航转向行为
Advertisement 728x90

在Unity 3D中实现智能体导航的转向行为

转向行为为动态环境中的自主智能体提供反应式导航。在一个Unity项目中,智能体——三种类型的鱼——在水下迷宫中移动,对玩家的潜艇做出反应。每种类型都结合了基本行为:寻找、追击、逃避、漫游和碰撞避免。这实现了无需全局路径规划的平滑轨迹。

该方法依赖于每帧的局部向量计算。智能体根据目标、威胁和障碍物,调整其速度和朝向期望方向。结合简单规则可生成复杂、自然的运动。

转向行为的基本类型

转向行为通过向量数学实现,分为基本类型:

Google AdInline article slot
  • 寻找:计算从智能体位置到目标的向量,归一化后作为期望速度方向。
  • 追击:基于目标的速度和方向预测其位置,然后寻找预测点。
  • 逃避:从预测的威胁位置向相反方向追击。
  • 漫游:在智能体前方的球体圆盘半径内,对基础方向施加随机偏差。
  • 碰撞避免:向前扫描射线,避开最近的障碍物。

这些行为通过权重求和产生最终的转向力,并受最大力限制。

在水下环境中,由于迷宫墙壁,碰撞避免至关重要。漫游为潜艇区域外的可食用鱼增加了变异性。

鱼智能体的行为模型

鱼分为可食用、危险和有毒类型。每种类型对应基于转向行为的算法:

Google AdInline article slot
  • 跟随(所有类型初始):向潜艇寻找,加入轻微随机噪声以避免线性运动。
  • 追击(危险/有毒):追击并平滑方向。
  • 躲避(可食用):进入交互区域时,从寻找过渡到逃避+横向偏移。

通过用系数α ∈ [0,1]插值当前和期望方向来确保平滑性。速度受v_max限制,并考虑生命周期t_life ≤ T_max。

算法的数学实现

符号:

  • x_s — 潜艇位置
  • x_f — 鱼位置
  • v_f — 鱼速度
  • Δt — 时间步长
  • R — 区域半径
  • v_max — 最大速度
  • u — 上向量
  • t_life — 生命周期
  • T_max — 最大生命周期

距离:d = ||x_s - x_f||

Google AdInline article slot

到目标的单位向量:e_t = (x_s - x_f) / ||x_s - x_f||

跟随

d = ||x_s - x_f|| > R

e_follow = e_t

加入噪声:e_follow = normalize(e_follow + k_r r),其中r是随机向量 ||r|| < ε

追击

e_p = e_t

平滑:e_new = normalize((1-α) e_cur + α e_p)

v_f = v_max * e_new

躲避

如果 d > R:e = e_follow*

否则:e_evade = -e_t + lateral_offset(垂直于 u × e_t)

v_f = v_max * normalize(e_evade)

位置更新:x_f += v_f * Δt

这些公式集成到Unity中智能体的Update()中。碰撞避免在检测到射线命中时作为优先转向力添加。

集成到Unity和优化

在Unity中,实现使用Transform处理位置/旋转,Rigidbody处理物理(可选)。转向力通过AddForce或直接设置速度应用。

关键性能方面:

  • 无需导航网格的局部计算。
  • 限制避免的射线投射(锥形3-5条射线)。
  • 池化鱼以生成/销毁。

行为适应3D迷宫:垂直运动考虑u向量,障碍物——来自Collider的墙壁。

对于高级开发者:扩展模型,包括到达(靠近目标时减速)、分离(智能体间距离)、凝聚力/群集用于鱼群。

关键要点

  • 局部性:转向行为避免昂贵的A*类规划,适用于50+个智能体。
  • 可组合性:用权重求和力允许分层行为(漫游+寻找+避免)。
  • 反应性:即时适应潜艇运动,无需重新规划。
  • 平滑性:插值防止抖动,适合水下环境。
  • 可扩展性:易于添加领导跟随或群体行为。

— Editorial Team

Advertisement 728x90

继续阅读