從A*到Navmesh都是完備的尋路方案,能滿足任意距離的路徑搜索。它們都需要根據(jù)場景預先生成相關(guān)數(shù)據(jù)(A*是規(guī)整的2D格子數(shù)據(jù),Navmesh則是mesh數(shù)據(jù)),在場景尺寸確定的情況下,Navmesh算法的網(wǎng)格數(shù)會隨障礙的復雜程度改變,而A*是固定的。就時空復雜度而言,通常情況下Navmesh要優(yōu)于A*,但一些優(yōu)化的變種A*算法(如:Hierarchy A*)在長距離尋路上要優(yōu)于Navmesh。然而對于動態(tài)改變的場景障礙,在使用以上兩種算法時都會有性能和設計上的限制。在實際項目中,我們通常將戰(zhàn)斗約束在一定區(qū)域內(nèi),而且這些區(qū)域有可能是諸如移動平臺之類的,此時A*和Navmesh可能會面臨無法使用的境地。下面這個方案是在洗澡時突然想到的,確切點應該稱之為避障算法,因為它源自之前做智能避障小車時的經(jīng)驗。
設,角色到目標點的方向向量為D0,投射線長度為L,探測間隙角為θ,N = 180 / θ,算法流程如下:

算法通過優(yōu)先搜索目標方向左右無障礙空間,減少檢測次數(shù),通過設置θ和L可以控制檢測精度和范圍。此外,設置合適的Collision Matrix和檢測頻率可以約束RayCast的性能開銷。