用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的

GWB編譯發表於2021-11-16
《銀河破裂者》是一款內容豐富,趣味橫生的遊戲。在探索自己所在的外星球時,您永遠沒有真正安全的時刻。即使你躲在基地的牆後,嘗試熬過夜晚,也會有成千上萬的敵人準備攻擊你。生成成群的外星生物不是問題,讓它們以令人信服的方式行事才是。筆者會向大家展示開發人員必須採取哪些步驟才能讓這個遊戲世界充滿活力。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的

作者:Piotr Bomak
校稿:maggiemmi
本文內容首發Game Developer,經由GWB編譯首發自“騰訊GWB遊戲無界”公眾號
https://www.gamedeveloper.com/disciplines/the-puppet-master---the-development-of-the-ai-system-for-the-riftbreaker

前文回顧(點選下方文字即可檢視全文):

萬物皆可隨機化!淺談《銀河破裂者》中程式化地圖生成

即使您的目標是讓數以千計的敵人同時攻擊玩家,最開始也只是從幾個敵人開始。下面展示的是《銀河破裂者》的首批原型之一。基本上什麼都沒有,甚至連物體的比例都有問題,但足以進行第一次實驗。佔位符立方體象徵著敵人,您可以看到他們正試圖定位並接近玩家。當時我們嘗試使用我們在Zombie Driver中使用的舊款生物碰撞檢測系統。每個敵人在其碰撞體前都有 3 條光線軌跡,以避開其他實體和世界部分。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
這些看起來可能不怎麼樣,但這確實是《銀河破裂者》在 2018 年初的樣子

好吧,即使它看起來幹得還不錯,但演算法有點過時了。它還不夠好。我們希望我們的生物快速而狂暴,而不是笨拙。我們移除了所有的光線軌跡並開始使用分離力和內聚力。這給了我們更好的移動,這是我們未來工作的第一步。在那段時間裡,我們通過數學和物理,測試我們所有的想法。在這個例子中,幾十個敵人正在追趕玩家,同時他們在牆壁之間迴旋。敵人穿過狹窄的通道,一旦到達空地,就會再次散開。整潔,一切似乎都執行良好,但這只是開始。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
你們永遠抓不住我

如果遊戲中只有一種敵方單位,任何遊戲都會很快變得無聊。即使在《吃豆人》中,每個鬼魂也以獨特的方式行事。(說真的!看看這篇文章)。Galatea 37 是多個物種的家園,每個物種都彼此不同。

有一條重要的規則,如果一個系統對一件事起作用,那麼它對其他事也同樣起作用。我們需要測試我們的數學方程如何處理不同大小和速度的生物。他們會互相粘在一起嗎?他們能避開所有世界物體嗎?當時有很多問題需要回答。而唯一的方法就是將每一個想法和解決方案付諸實踐。看吧!我們為您帶來終極的 Canoptrix、Arachnoid 和 Hammerroceros 衝刺!(它們一點也不慢,這裡只是慢放了。100% 正確。)

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
準確的把學生在幾何測試前的噩夢視覺化了

現在是第一次考驗戰鬥能力的時候了。在這一點上,我們有點厭倦了在灰色空間中執行的彩色立方體,因此我們用Zombie Driver中狗狗的模型替換了橙色立方體。在此片段中,您可以看到狗試圖攻擊玩家,但是途中有一些防禦塔。怪物和防禦塔進行的攻擊以您可以看到飛來飛去的紅色和綠色立方體來表示。這不僅是對尋路的測試,也是對攻擊優先順序的測試。我們可以命令敵人首先攻擊玩家、能量結構、防禦或其他建築物。玩家是這裡的重中之重,但如果有什麼阻礙,它也會被摧毀。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
《銀河破裂者》中眾多史詩戰鬥的第一場

到目前為止,我們向您展示的所有內容的規模都非常小。我們並不滿足。我們希望您在玩《銀河破裂者》時能感受到玩星河戰隊的感覺——一次有成千上萬的敵人的進攻。我們設定這個場景是為了檢查各種型別的生物在地圖上的各自位置生成時的行為。紅色立方體代表將它們推開的流場,這是解決碰撞問題的一種非常快速的方法。他們都有一個共同的目標——摧毀人類基地。一路上,這些組合不可避免地會相遇——讓我們看看會發生什麼。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
儘管起點不同,但這些生物在前往共同目標的途中融合在一起

儘管單位受到懸崖和深坑地形障礙的限制,但各群體仍設法融合在一起,不會阻礙彼此到達目標的道路。當他們遇到嚴重的瓶頸時,他們仍然搖擺不定,試圖將自己定位到最好的狀態。這就是最終使外星部落變得既可怕又美麗的原因——模擬一群活的有機體,而不是機器人,一個個排隊等著穿過通道。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
更新模型和動畫後,一切都開始有模有樣

即使一切正常,但還是少了一樣東西。如何達到《星際爭霸》那樣酷炫的單位運動水平?在那款遊戲中,一切都如此順暢和快速,沒有移動延遲。我們嘗試了很多東西。祈禱,看電視,看漫畫書。你猜怎麼著,這對我們沒有多大幫助(哭臉)但是有一天,我們的程式設計師在和他小兒子玩耍時找到了一個解決方案。他們把小球放在桶裡搖晃。每一次,球都填滿了桶中的空隙。是什麼神奇力量促成的呢?答案是——重力。通過將每個生物獨特的重力與非常簡單的軟體模擬相結合,我們終於得到了類似於星際爭霸的移動效果。新增了適當的外觀和動畫後,這突然看起來像個遊戲了!

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
生物拼命地試圖到達中間的機甲

我們之前提到過,讓生物以可信的方式行事對我們來說很重要。我們最不想讓玩家看到的就是一群狂暴的太空犬僅僅因為暫時找不到到達目標的方法,而站在地面上什麼也不做。這對我們來說還不夠狂暴。取而代之的是,這些生物在目標周圍聚集,填補空白,表現得像被蜂巢控制一樣。只有一個目標,並且必須通過任何必要的手段實現。說實話,這看起來像一個活生生的細胞!

基地的蟲害。小型 Quelvers(甲殼動物)和其他單位一樣,被這套系統控制。我們用於處理《銀河破裂者》中單位行為的系統既可以支援攻擊性生物,也可以支援中立生物。我們的計劃是在遊戲發生的星球 Galatea 37 中填充各種“環境”生物。他們的工作非常簡單——只是過著普通的一天,尋找食物和水,從一個地方搬到另一個地方。這一切背後的原因是讓世界更加身臨其境和自然。Quelver 就是這樣的一種生物——一種小小的清道夫,在大多數 Galatea 生物群落中掠過地面。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
幸運的是,Quelvers 害怕玩家和他們的行為,所以很容易擺脫他們

Quelvers 的動作由與其他單位相同的 AI 系統控制。為了不對 CPU 造成太大壓力,這些生物只出現在戰鬥之外。如果遊戲檢測到“進攻性”模式中的單位數量閾值已被超過,Quelvers 將立即停止生成。這並不是這些生物的唯一效能優化。遊戲會檢查 Quelvers 的位置,並僅在設定半徑之外生成它們,以避免它們聚集在一起。在這個遊戲中沒有蟲群噴泉。不過如果你真的想的話還是有可能的......

這些蟲子在 Galatea 37 的食物鏈中扮演著重要的角色,負責清理遺骸。

這些傢伙也使用與侵略性單位相同的分組機制,但原因略有不同。他們在屍體周圍成群結隊,而《銀河破裂者》中戰鬥波次後有非常多的屍體。一旦戰鬥結束並且侵略性生物數量再次低於閾值,Quelvers 將再次開始產卵並尋找可以啃食的屍體。經過一段時間後,我們溶解了屍體,但是蟲子的加入使它們看起來好像真的吃了屍體。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的
這些生物在追逐玩家時會盡力避開障礙物

最後,是時候推出殺手鐗了。在開發複雜系統和演算法一年後,在寫了數千行程式碼,喝了無數杯咖啡之後,我們搞定了數千個單位。話不多說,看圖片你就懂了。

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的

用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的



相關文章