【Godot4笔记】NPC巡逻(Path2D)



添加结点Path2D绘制好巡逻路线后,在该节点下添加结点PathFollow2D结点,在PathFollow2D结点下添加巡逻角色。

Path2D结点用于烘培巡逻路径上的点坐标,PathFollow2D结点则用于在这些坐标点上移动。

PathFollow2D结点属性中Progress、ProgressRatio表示在path上的移动距离,表示方式不同而已,注意游戏初始化前,要把移动距离的值归零,不归零的情况下运行游戏,虽然能够正常巡逻,但该角色的动画可能会表现异常,可能和我根据当前位置与烘培的下一位置点的关系来判断角色状态有关。

在process方法中,使用path.progress += speed * delta就可以让PathFollow2D工作了。
添加角色的位移动画,需要先判断角色当前运动方向,然后播放那个运动方向的动画。角色将要前往的位置全局坐标减去角色当前位置的全局坐标,即可获得一个方向向量,使用方向向量,计算出与x轴正方向的夹角,根据这些角度来判断播放什么动画。
对于path上的一些属性、方法,都在Path2D结点的curve属性中,详细可以参考文档。


如果巡逻的角色需要与玩家进行交互之类的操作,可以定义一个patrol_statu属性,来判断当前是否进行巡逻。
当玩家靠近巡逻角色,或者触发某些事件时,可以停止巡逻,玩家离开巡逻角色或结束事件后,恢复正常巡逻。


也可以使用NavigationRegion2D 或者TileMap上的NavigationLayers通过寻路的方式实现巡逻,但文档中写道NavigationRegion2D 将来可能会移除或者修改。