AI是游戲的靈魂,是人物的智商,是讓玩家覺得游戲是否幼稚的重要判斷功能,下面我將介紹國外流行,國內不行的,ai算法。
主要介紹 Flocking 和 Reciprocal Velocity Obstacles。
序言:歷史
大家都知道 尋路算法,這些年,自從 XX大神 網上 發布了 A*算法 之后,國內 大白小白 ,只要是個人 都開始 使用他,
一時間,A* 尋路 是 做游戲 的 標准,也是面試 最常問的 話題。
A* 尋路 也是有發展歷史的,最早是 Dijkstra算法,

后來 發明了啟發式 搜索,BFS,他效率最快

但啟發式搜索也有 智障的時候

然后 1968年,大神 把 常用算法和啟發式算法 結合起來,發明 了A*算法。
好像是 時間的停止,又好像是 國人的 愚昧無知,A*算法被國人定義為 最終的 尋路方案,但歷史的腳步不會停止。
之后的 幾十年,國外對A*算法做了深入的加強
迭代深化、動態衡量、帶寬搜索、動態A*與終身計划A*
今天我將推開歷史的進程,尋找A*的未來
A* 算法之后,是動態A*尋路。大家都會對動態A*尋路提出各種想法,
有些人說,我可以讓 運動物體 碰撞時候 再次 A*。但如果多個運動物體,碰撞太多,是否效率會影響
還有人說,遇到 動態 碰撞物體,我讓A* 只做 一定 距離的 尋路,那我又問,如果短距離范圍 會讓運動物體不能合理指向 最終位置,那就是事與願違。
所以此時 XX大神提出了 Flocking。
運動物體好比就是一輛輛 行駛在 馬路上的汽車,他們都有GPS導航儀 進行路徑設定。
但突然 有車輛 發生車禍,那么車禍會造成 汽車 失去控制,偏離軌道,這個時候,運動的指揮權 不再是 方向盤。
而是 其他車輛 碰撞后 產生的 軌跡。等碰撞結束后,汽車會繼續 打開GPS 導航儀,開始尋路。
這個過程 我們發現,在多車 撞擊的時候,汽車並沒有在 這個時候 尋路,他會頭昏,是的,他只做 物理運動,一陣暈眩后,他恢復神智,重新尋路。
這樣的 過程,A*次數 開銷會很小。
提出Flocking思想后,聰明可愛的 程序員(這里只單指 外國人),發現,他們可以用來做 群體尋路。
XX大神 提出Reciprocal Velocity Obstacles算法,有一個運動物體來進行A*尋路,其他物體跟着他,稱為 領導者模式。
因為他們之間不會重疊,用來做即時戰略游戲非常棒。(帝國時代,星際爭霸 )等一系列的 策略類型游戲相繼推出受到了廣大玩家的青睞。
正文:開啟
unity 的A*starPathfindingProject插件,就集成了Reciprocal Velocity Obstacles,我們簡稱RVO.
可能是版權問題,3.51后,作者自己重新編寫了RVO的代碼,大家不需要改動。
這是作者在文檔上提出的
- Note
- The local avoidance system was previously disabled because of licensing issues. This is no longer the case as the whole system has been rewritten in a new way. The exposed APIs for the previous system and the new one are almost identical.
- 國人有些人喜歡 以訛傳訛搬弄是非,我就不想說他們了,永遠是小白的命!
簡單的使用下RVO的功能。
新建一個GameObject,選擇菜單

這個是說,我同意 使用 RVO這個功能了。。
按照上圖 選擇 RVONavmesh。說明,他可以 穿透 范圍數據內的 物體,為啥要穿透物體。
因為有時候,在相互撞車的時候,會發生死路的可能,我們不能讓他卡死在那吧,所以,有必要讓他造假一下,當然這種情況很少,也是情非得已。
接下來,我們做一個運動物體,讓他加載 插件 第一個RVOController。
這個意思是所,我可以 不要 碰撞盒子,我不需要重力影響,我也可以碰撞了。當然移動按照這個類的方法來執行。
RVOController的參數和使用方法,以及優化,我下一節來說。大家可以先看看我做的demo來感受下。
分享一個 國外 制作的 案例,我研究的方向 和他是 一樣的,大家可以看這個demo
。
具體代碼,我整合到 框架中。
