【Godot4筆記】NPC巡邏(Path2D)



????????添加結(jié)點(diǎn)Path2D繪制好巡邏路線后,在該節(jié)點(diǎn)下添加結(jié)點(diǎn)PathFollow2D結(jié)點(diǎn),在PathFollow2D結(jié)點(diǎn)下添加巡邏角色。

????????Path2D結(jié)點(diǎn)用于烘培巡邏路徑上的點(diǎn)坐標(biāo),PathFollow2D結(jié)點(diǎn)則用于在這些坐標(biāo)點(diǎn)上移動(dòng)。

????????PathFollow2D結(jié)點(diǎn)屬性中Progress、ProgressRatio表示在path上的移動(dòng)距離,表示方式不同而已,注意游戲初始化前,要把移動(dòng)距離的值歸零,不歸零的情況下運(yùn)行游戲,雖然能夠正常巡邏,但該角色的動(dòng)畫可能會(huì)表現(xiàn)異常,可能和我根據(jù)當(dāng)前位置與烘培的下一位置點(diǎn)的關(guān)系來判斷角色狀態(tài)有關(guān)。

????????在process方法中,使用path.progress += speed * delta就可以讓PathFollow2D工作了。
???????? 添加角色的位移動(dòng)畫,需要先判斷角色當(dāng)前運(yùn)動(dòng)方向,然后播放那個(gè)運(yùn)動(dòng)方向的動(dòng)畫。角色將要前往的位置全局坐標(biāo)減去角色當(dāng)前位置的全局坐標(biāo),即可獲得一個(gè)方向向量,使用方向向量,計(jì)算出與x軸正方向的夾角,根據(jù)這些角度來判斷播放什么動(dòng)畫。
???????? 對(duì)于path上的一些屬性、方法,都在Path2D結(jié)點(diǎn)的curve屬性中,詳細(xì)可以參考文檔。


????????如果巡邏的角色需要與玩家進(jìn)行交互之類的操作,可以定義一個(gè)patrol_statu屬性,來判斷當(dāng)前是否進(jìn)行巡邏。
???????? 當(dāng)玩家靠近巡邏角色,或者觸發(fā)某些事件時(shí),可以停止巡邏,玩家離開巡邏角色或結(jié)束事件后,恢復(fù)正常巡邏。


????????也可以使用NavigationRegion2D 或者TileMap上的NavigationLayers通過尋路的方式實(shí)現(xiàn)巡邏,但文檔中寫道NavigationRegion2D 將來可能會(huì)移除或者修改。