2D平台游戏王牌英雄的AI寻路解决方案
為什么80%的碼農都做不了架構師?>>> ??
當我們在開始開發王牌英雄的機器人時 我們開始了最復雜的部分:怎樣去做尋路? 當人們談到尋路的時候 通常會想到 A*尋路. 這眾所周知的標準算法的確能解決尋路問題 例如RTS類的游戲就是這種解決方案 他能產生出一個容易遍歷的路徑. 但是當在平臺游戲中在找到路徑后更復雜的一步是 執行這個路徑, 王牌英雄有很多不同的平臺物理相關的特征。例如跳躍 雙跳 起飛 漂移 跳上跳下平板 空中移動控制.我們能升級我們的單位的跳躍高度 AI需要知道他什么時候起跳 跳躍多長時間 這的確是一個巨大的挑戰.
有這么多移動相關微妙的地方.我首先想到是用行為樹并不能解決所有問題,行為樹能很好的進行決策,但并不能解決移動中細微的控制. 更加糟糕的是 ,為了性能考慮AI們只能每秒執行10次行為樹.和我預期的一樣麻煩.
我想出的解決方案是記錄真實玩家的移動路徑 記錄不只是玩家的位置還包括確切的按鈕,我認為我們可以得到足夠的信息來復制真正的運動與精確的控制.玩家的移動將被分割成小的片段,從一個平臺到另一個平臺.游戲可以將這些拼接在一起,以產生從A到B特定的路徑。
用這種方式移動,行為樹可以選擇他想去哪和執行哪些塊,這些是全自動的,非常像運動員的回放視頻,行為樹當然可以在任何時候停止移動并進入戰斗,這將再次回到行為樹的控制.
雖然上面聽起來是很有趣并且可行的,但是魔鬼在細節之中.我們需要寫記錄和回放的代碼.并且需要一個復雜的算法來分析運動記錄并且把他們轉化成段.并且這還不是所有. 在王牌英雄中有6個角色,每個角色都有自己的運動特性.他們可以升級走的更快,跳的更高。在場景中還有一些移動的平臺,這意味著有些跳躍在特定時間內才是有效的。所有這些變化都增加了所需的算法的復雜性,和所需移動記錄樣本的量,才能使他工作。而且需要一種方式來使段在一起播放,使動量不能瞬間失去。 最后的問題是關卡在開發過程中還會不停的變化。每次變化都意味著需要重新記錄和處理數據. 這么多問題湊在一起促使這個解決方案太麻煩并且需要太多的工作量了。雖然我仍然可以想象他可以工作的更好但是這不是一個小的獨立團隊的工作范圍。我們需要一個更簡單的解決方案,而不是這樣的東西。 我們開始嘗試尋找一個更好的解決方案。Bart Knuiman在Ronimo實習,他當時的實習工作是AI,所有他開始嘗試這個。他創建了一個小關卡,但是他根本不需要尋路因為這上面根本沒有墻和縫隙。
轉載于:https://my.oschina.net/mzui/blog/1791174
總結
以上是生活随笔為你收集整理的2D平台游戏王牌英雄的AI寻路解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 年报系统课堂讨论记录
- 下一篇: iOS Swift GCD 开发教程