能迂回,會繞路的開源游戲AI:解決怪物撞墻卡死角
賈浩楠 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
作為一個游戲玩家,有一天你發(fā)現(xiàn)了游戲中的bug:
竟然可以把怪拉到墻角卡住!
于是整個游戲成了白送局,一刀999,本來要1個小時的關(guān)卡5分鐘就打通了,很爽對嗎?
爽完之后呢?是不是有無可言狀的空虛和罪惡感?一個好游戲就這么廢掉了。
游戲開發(fā)者本意是想讓玩家歷經(jīng)磨難、欲罷不能,但愚蠢的游戲bug毀了一切。
最近,一家來自加拿大的初創(chuàng)游戲工作室:A Bit Awake,開源了新模型——Enemy AI,可以讓游戲中的敵人自動追蹤玩家路徑,并主動避開墻角、巖石等環(huán)境障礙,提升整個游戲的挑戰(zhàn)和可玩性。
如果你在做游戲開發(fā),那么這個項目可能會對你有很大的幫助。
從0開始,先寫一個卡墻角的蠢AI
首先,我們先在Godot引擎中建立一個使用KinematicBody2D碰撞節(jié)點的敵對單位,并且使用State Machine來設(shè)置它的狀態(tài)。
寫出最簡單的、只會向玩家直線移動的敵人追蹤狀態(tài):
玩家逃跑路徑的設(shè)置與追蹤
為了提高追蹤算法的表現(xiàn),先要給玩家角色的移動線路上設(shè)置標記。
這樣一來,如果敵人無法看到玩家,就會自動搜尋是否有玩家留下的移動軌跡并向這個軌跡移動,就像警犬一樣。
接下來要確保痕跡信息真實有效地留在路徑上,這里用到了一個帶計時器的Node2D場景。我們將軌跡產(chǎn)生間隔設(shè)為0.1秒。
調(diào)試時,如果你想讓路徑軌跡可見,只需要加一個ColorRect節(jié)點。
現(xiàn)在你的敵人已經(jīng)激發(fā)出內(nèi)心嗜血的本能,對玩家窮追不舍了!
物理障礙的設(shè)置
接下來我們還需要讓敵對AI清楚追蹤路徑上有哪些要避開的障礙物。
首先要給敵對單位添加一個RayCast2D節(jié)點,同時還要設(shè)置環(huán)境中的物理層,讓AI知道它與痕跡點之間(Ray)有哪些障礙。
在Godot中選出Project欄,在Project Settings中找到LayerNames選項,根據(jù)你的游戲選擇2D或3DPhysics。
命名不同的的物理層后,要將這些物理層應(yīng)用到不同的目標(比如巖石、墻、關(guān)閉的門等)之上,在Property Inspector欄中的Collision選項中將目標設(shè)置為某一定義好的物理層。
將目標的物理層設(shè)置好以后,我們還要更新敵人的RayCast2D節(jié)點,使它能夠判斷眼前的障礙物能否通過。
最后一步,將以上的步驟同步在敵人單位的追蹤狀態(tài)算法中:
好了,現(xiàn)在你的敵對AI如果在追蹤路上遇到了障礙物丟失痕跡目標,它會逐個檢查玩家的路徑痕跡,并試圖建立與痕跡點的連線,一旦成功就會馬上開始追蹤。
至此整個算法完成,實現(xiàn)簡單,但對游戲質(zhì)量有大的提升,希望能夠幫到做游戲開發(fā)的你。
代碼開源鏈接:
https://abitawake.com/news/articles/enemy-ai-chasing-a-player-without-navigation2d-or-a-star-pathfinding
— 完 —
量子位 QbitAI · 頭條號簽約
關(guān)注我們,第一時間獲知前沿科技動態(tài)
- 中國汽車一哥加持,自動駕駛界「大疆」估值沖破百億2025-11-26
- 神盾金磚電池成功挑戰(zhàn)行業(yè)首個“整車+整包”帶電六大極端測試2025-09-02
- 對話吉利技術(shù)一號位:VLA大模型打底,沖刺全球最大機器人公司2025-09-02
- 全新嵐圖知音正式上市,20.29萬元起2025-08-28




