NavMesh,MovementComponent,PathFollowingComponent的关系

 
 

NavMesh

NavMesh是导航网格,底层基于Recast Navigation,所以实际上是对Recast的NavMesh的封装。

NavMesh里面包含很多个凸多边形,导航网格的构建主要是产生这些多边形的过程,寻路算法使用这些多边形进行寻路。

MovementComponent

MovementComponent是移动组件,根据输入向量负责对Actor进行变换,比如移动或者旋转Actor。输入可以来自玩家输入,也可以来自其他地方。

MovementComponent有多个子类,比如PawnMovementComponent,CharacterMovementComponent,WheeledVehicleMovementComponent,ProjectileMovementComponent等等。

在这些子类中,CharacterMovementComponent是最完善和最复杂的,支持网络同步和预测,支持多种移动模式,支持动画和碰撞等等,单个文件代码多达10000多行。由于在内部处理的东西较多,在有多个Character的情况下,CharacterMovementComponent组件经常会占用较多的CPU时间。

PathFollowingComponent

PathFollowingComponent是寻路组件,负责寻路,通过向MovementComponent输入移动向量,沿着预设路线移动到目的地。

PathFollowingComponent在UE4中有两个主要的实现UPathFollowingComponent和UCrowdFollowingComponent,另外还有一个UGridPathFollowingComponent,貌似不太常用。

UPathFollowingComponent主要用来对Character进行寻路,沿着路径点移动。 UCrowdFollowingComponent主要用于多个Character的情况下,可以较好地处理Character之间的避让问题。 UCrowdFollowingComponent不是使用路径点,而是使用NavMesh中的多边形,配合CrowdManager来处理多个Character的运动。

通常在下达移动命令后,比如说MoveTo,首先会查询NavMesh,生成路径,然后向PathFollowingComponent发出MoveRequest, PathFollowingComponent 然后会按照输入的路径使用MovementComponent进行移动。

猜你喜欢

转载自www.cnblogs.com/haisong1991/p/11448970.html