Unity中短距離尋路方案
從A*到Navmesh都是完備的尋路方案,能滿足任意距離的路徑搜索。它們都需要根據(jù)場(chǎng)景預(yù)先生成相關(guān)數(shù)據(jù)(A*是規(guī)整的2D格子數(shù)據(jù),Navmesh則是mesh數(shù)據(jù)),在場(chǎng)景尺寸確定的情況下,Navmesh算法的網(wǎng)格數(shù)會(huì)隨障礙的復(fù)雜程度改變,而A*是固定的。就時(shí)空復(fù)雜度而言,通常情況下Navmesh要優(yōu)于A*,但一些優(yōu)化的變種A*算法(如:Hierarchy A*)在長(zhǎng)距離尋路上要優(yōu)于Navmesh。然而對(duì)于動(dòng)態(tài)改變的場(chǎng)景障礙,在使用以上兩種算法時(shí)都會(huì)有性能和設(shè)計(jì)上的限制。在實(shí)際項(xiàng)目中,我們通常將戰(zhàn)斗約束在一定區(qū)域內(nèi),而且這些區(qū)域有可能是諸如移動(dòng)平臺(tái)之類的,此時(shí)A*和Navmesh可能會(huì)面臨無(wú)法使用的境地。下面這個(gè)方案是在洗澡時(shí)突然想到的,確切點(diǎn)應(yīng)該稱之為避障算法,因?yàn)樗醋灾白鲋悄鼙苷闲≤嚂r(shí)的經(jīng)驗(yàn)。
設(shè),角色到目標(biāo)點(diǎn)的方向向量為D0,投射線長(zhǎng)度為L(zhǎng),探測(cè)間隙角為θ,N = 180 / θ,算法流程如下:
算法通過(guò)優(yōu)先搜索目標(biāo)方向左右無(wú)障礙空間,減少檢測(cè)次數(shù),通過(guò)設(shè)置θ和L可以控制檢測(cè)精度和范圍。此外,設(shè)置合適的Collision Matrix和檢測(cè)頻率可以約束RayCast的性能開銷。
posted on 2016-03-13 18:40 Heath 閱讀(1771) 評(píng)論(0) 編輯 收藏 引用 所屬分類: Game Development