📚 World/AI

此类控制关于世界的角色AI及寻路相关逻辑。

📒 Static Function

📘 AI.SetActive()

设置世界AI逻辑寻路开关。

注意:此方法执行激活后,会默认自动开始渲染寻路网格,这是一个相对耗费CPU的异步操作。

function SetActive( active: bool, isFullNavMesh: bool = false )
  • isFullNavMesh是否生成全局寻路网格(根据地图的大小,会占用大量的CPU,但是会提前渲染寻路网格)

📘 AI.GetActive()

获取世界AI逻辑寻路开关。

function GetActive(): bool

📘 AI.SetNavMeshSampleDistance()

设置全局网格采样最大距离,默认为5.0,范围限制0.0~128.0

采样距离影响到网格寻路时的最大容错距离。

function SetNavMeshSampleDistance( sampleDistance: float )

📘 AI.GetNavMeshSampleDistance()

获取全局网格采样最大距离

function GetNavMeshSampleDistance(): float

📘 AI.SetAllNavMeshDirty()

重置全部寻路网格脏数据(重建)。

此方法通常不需要手动调用,除非希望重新烘焙全图寻路数据,这是一个相对耗费CPU的异步操作。

不建议中大型地图使用此方法,应该由每次触发寻路时引擎自动发起烘焙请求。

function SetAllNavMeshDirty()

📘 AI.SetNavMeshDirtyByPos()

重置指定坐标的寻路网格脏数据,该区域范围内的寻路数据(如存在)将会在后续自动重建。

此方法通常不需要手动调用,除非希望动态生成对象参与寻路逻辑,这就需要在合适时机对发生变化的区域进行重建,因为区域可能在之前已经烘焙完成。

function SetNavMeshDirtyByPos( pos: Vector )

📘 AI.SampleNavMeshRandomPoint()

获取指定坐标范围内的随机网格坐标点(已烘焙),此方法会内部遍历多次,但不确保每次都能获取到数据。

如果范围内不存在合适的坐标,将返回VECTOR_NULL

function SampleNavMeshRandomPoint( pos: Vector, radius: float, sampleDistance: float = -1 ): Vector
  • radius随机遍历范围
  • sampleDistance采样容错距离(-1继承全局设定)

📘 AI.SampleNavMeshPoint()

获取指定坐标的采样后最终坐标(已渲染的网格坐标)。

如果不存在合适的坐标,将返回VECTOR_NULL

function SampleNavMeshPoint( pos: Vector, sampleDistance: float = -1 ): Vector
  • sampleDistance采样容错距离(-1继承全局设定)

📘 AI.IsValidNavMeshPoint()

判断指定坐标是否已被烘焙完成(即合理的寻路坐标)。

如果返回false则表示此区域没有被烘焙,关于AI的移动逻辑也无法到达目标。

通常情况下,关于AI的移动将会在设置目标点时自动请求烘焙(可能会在数秒内完成),如果确实需要主动激活某处NavMesh烘焙,请使用SetNavMeshDirtyByPos()

function IsValidNavMeshPoint( pos: Vector, sampleDistance: float = -1 ): bool
  • sampleDistance采样容错距离(-1继承全局设定)