关于UE4中AI视线感知的逻辑为:
(1)通过CheckIsTargetInSightCone函数,检测注册了可被视觉感知的目标是否在Cone范围内(实时检测)。
(2)如果在扇形范围,则发射一条射线,如射线命中目标,则判定为看到目标。
所以,AI视觉感知的检测范围,在俯视图上为 近为NearClippingRadiusSq,远为FarClippingRadiusSq,角度为 PeripheralVisionAngleCos的扇形范围。
如下图所示,CheckIsTargetInSightCone函数的注释。
//----------------------------------------------------------------------//
// CheckIsTargetInSightCone
// F
// *****
// * *
// * *
// * *
// * *
// * *
// \ /
// \ /
// \ /
// \ X /
// \ /
// \ *** /
// \ * N * /
// \ * * /
// N N
//
//
//
//
//
//
// B
//
// X = StartLocation
// B = Backward offset
// N = Near Clipping Radius (from the StartLocation adjusted by Backward offset)
// F = Far Clipping Radius (from the StartLocation adjusted by Backward offset)
//----------------------------------------------------------------------//
但我们需要注意的是,该范围检测并不是一个圆锥体的检测,而是一个俯视图为扇形,高为无限高的几何体。
如下图所示,下方的Pawn为AI,上方的Pawn为玩家。
在上下差距极大的情况下,下方的AI依旧可以看到玩家,所以我们可以得知玩家只要在NPC的扇形范围内,且从NPC点发射的射线击中玩家,NPC即可看到玩家。
由此,UE4中AI视线感知的具体检测范围为下图所示图形的,无限拉高后的几何体:
只要玩家出现在这个几何体内,并玩家位置未被物体阻挡,即可被检测到。