用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的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 條光線軌跡,以避開其他實體和世界部分。
這些看起來可能不怎麼樣,但這確實是《銀河破裂者》在 2018 年初的樣子
好吧,即使它看起來幹得還不錯,但演算法有點過時了。它還不夠好。我們希望我們的生物快速而狂暴,而不是笨拙。我們移除了所有的光線軌跡並開始使用分離力和內聚力。這給了我們更好的移動,這是我們未來工作的第一步。在那段時間裡,我們通過數學和物理,測試我們所有的想法。在這個例子中,幾十個敵人正在追趕玩家,同時他們在牆壁之間迴旋。敵人穿過狹窄的通道,一旦到達空地,就會再次散開。整潔,一切似乎都執行良好,但這只是開始。
你們永遠抓不住我
如果遊戲中只有一種敵方單位,任何遊戲都會很快變得無聊。即使在《吃豆人》中,每個鬼魂也以獨特的方式行事。(說真的!看看這篇文章)。Galatea 37 是多個物種的家園,每個物種都彼此不同。
有一條重要的規則,如果一個系統對一件事起作用,那麼它對其他事也同樣起作用。我們需要測試我們的數學方程如何處理不同大小和速度的生物。他們會互相粘在一起嗎?他們能避開所有世界物體嗎?當時有很多問題需要回答。而唯一的方法就是將每一個想法和解決方案付諸實踐。看吧!我們為您帶來終極的 Canoptrix、Arachnoid 和 Hammerroceros 衝刺!(它們一點也不慢,這裡只是慢放了。100% 正確。)
準確的把學生在幾何測試前的噩夢視覺化了
現在是第一次考驗戰鬥能力的時候了。在這一點上,我們有點厭倦了在灰色空間中執行的彩色立方體,因此我們用Zombie Driver中狗狗的模型替換了橙色立方體。在此片段中,您可以看到狗試圖攻擊玩家,但是途中有一些防禦塔。怪物和防禦塔進行的攻擊以您可以看到飛來飛去的紅色和綠色立方體來表示。這不僅是對尋路的測試,也是對攻擊優先順序的測試。我們可以命令敵人首先攻擊玩家、能量結構、防禦或其他建築物。玩家是這裡的重中之重,但如果有什麼阻礙,它也會被摧毀。
《銀河破裂者》中眾多史詩戰鬥的第一場
到目前為止,我們向您展示的所有內容的規模都非常小。我們並不滿足。我們希望您在玩《銀河破裂者》時能感受到玩星河戰隊的感覺——一次有成千上萬的敵人的進攻。我們設定這個場景是為了檢查各種型別的生物在地圖上的各自位置生成時的行為。紅色立方體代表將它們推開的流場,這是解決碰撞問題的一種非常快速的方法。他們都有一個共同的目標——摧毀人類基地。一路上,這些組合不可避免地會相遇——讓我們看看會發生什麼。
儘管起點不同,但這些生物在前往共同目標的途中融合在一起
儘管單位受到懸崖和深坑地形障礙的限制,但各群體仍設法融合在一起,不會阻礙彼此到達目標的道路。當他們遇到嚴重的瓶頸時,他們仍然搖擺不定,試圖將自己定位到最好的狀態。這就是最終使外星部落變得既可怕又美麗的原因——模擬一群活的有機體,而不是機器人,一個個排隊等著穿過通道。
更新模型和動畫後,一切都開始有模有樣
即使一切正常,但還是少了一樣東西。如何達到《星際爭霸》那樣酷炫的單位運動水平?在那款遊戲中,一切都如此順暢和快速,沒有移動延遲。我們嘗試了很多東西。祈禱,看電視,看漫畫書。你猜怎麼著,這對我們沒有多大幫助(哭臉)但是有一天,我們的程式設計師在和他小兒子玩耍時找到了一個解決方案。他們把小球放在桶裡搖晃。每一次,球都填滿了桶中的空隙。是什麼神奇力量促成的呢?答案是——重力。通過將每個生物獨特的重力與非常簡單的軟體模擬相結合,我們終於得到了類似於星際爭霸的移動效果。新增了適當的外觀和動畫後,這突然看起來像個遊戲了!
生物拼命地試圖到達中間的機甲
我們之前提到過,讓生物以可信的方式行事對我們來說很重要。我們最不想讓玩家看到的就是一群狂暴的太空犬僅僅因為暫時找不到到達目標的方法,而站在地面上什麼也不做。這對我們來說還不夠狂暴。取而代之的是,這些生物在目標周圍聚集,填補空白,表現得像被蜂巢控制一樣。只有一個目標,並且必須通過任何必要的手段實現。說實話,這看起來像一個活生生的細胞!
基地的蟲害。小型 Quelvers(甲殼動物)和其他單位一樣,被這套系統控制。我們用於處理《銀河破裂者》中單位行為的系統既可以支援攻擊性生物,也可以支援中立生物。我們的計劃是在遊戲發生的星球 Galatea 37 中填充各種“環境”生物。他們的工作非常簡單——只是過著普通的一天,尋找食物和水,從一個地方搬到另一個地方。這一切背後的原因是讓世界更加身臨其境和自然。Quelver 就是這樣的一種生物——一種小小的清道夫,在大多數 Galatea 生物群落中掠過地面。
幸運的是,Quelvers 害怕玩家和他們的行為,所以很容易擺脫他們
Quelvers 的動作由與其他單位相同的 AI 系統控制。為了不對 CPU 造成太大壓力,這些生物只出現在戰鬥之外。如果遊戲檢測到“進攻性”模式中的單位數量閾值已被超過,Quelvers 將立即停止生成。這並不是這些生物的唯一效能優化。遊戲會檢查 Quelvers 的位置,並僅在設定半徑之外生成它們,以避免它們聚集在一起。在這個遊戲中沒有蟲群噴泉。不過如果你真的想的話還是有可能的......
這些蟲子在 Galatea 37 的食物鏈中扮演著重要的角色,負責清理遺骸。
這些傢伙也使用與侵略性單位相同的分組機制,但原因略有不同。他們在屍體周圍成群結隊,而《銀河破裂者》中戰鬥波次後有非常多的屍體。一旦戰鬥結束並且侵略性生物數量再次低於閾值,Quelvers 將再次開始產卵並尋找可以啃食的屍體。經過一段時間後,我們溶解了屍體,但是蟲子的加入使它們看起來好像真的吃了屍體。
這些生物在追逐玩家時會盡力避開障礙物
最後,是時候推出殺手鐗了。在開發複雜系統和演算法一年後,在寫了數千行程式碼,喝了無數杯咖啡之後,我們搞定了數千個單位。話不多說,看圖片你就懂了。
相關文章
- 漫畫:軟體是這樣做出來的
- 萬物皆可隨機化!淺談《銀河破裂者》中程式化地圖生成隨機地圖
- Flutter你竟是這樣的佈局Flutter
- 《快學 Go 語言》第 11 課 —— 千軍萬馬跑協程Go
- 三體之後銀河紀元傳說
- 沒有開源,生活竟是這樣的......
- [轉帖] 銀河麒麟系統安全機制-KYSEC
- 【新遊推薦】組建奧術戰團,迎戰千軍萬馬!
- 揭祕:原來騰訊、網易、阿里竟是這樣招程式設計師的阿里程式設計師
- 銀河麒麟系統部署keepalived.故障處理
- 全球首款AI的作業系統來了!像用Windows一樣簡單AI作業系統Windows
- 原來YouTube推薦系統的內幕是這樣……
- 這樣一來以後就更好的移植miui系統UI
- CSS樣式中顏色與顏色值的應用CSS
- JavaScript 中的原型原來是這樣的JavaScript原型
- 發售一週售出50萬份 《深巖銀河:倖存者》的火爆有何啟發?
- 短視訊系統,android Switch修改顏色修改樣式滑塊顏色Android
- 學習這篇總結後,你也能做出天天快報一樣的推薦系統
- 國產化之Arm64 CPU+銀河麒麟系統安裝.NetCoreNetCore
- 國產化之虛擬ARM64-CPU安裝銀河麒麟作業系統作業系統
- 銀河麒麟系統安裝mongodb副本集故障處理MongoDB
- 銀河麒麟系統如何建立rc-local.service服務?
- 原來聊天機器人是這麼做出來的機器人
- Yann LeCun:未來的AI晶片應該這樣做Yann LeCunAI晶片
- javascript棄坑之路之原來是這樣的thisJavaScript
- ERP系統哪能這樣用(轉)
- vmware安裝銀河麒麟V10系統宿主機斷電異常關機銀河麒麟開機報錯
- 清華魏少軍:大部分AI晶片創業者將成為這場變革中的先烈AI晶片創業
- 未來的WEB瀏覽體驗是這樣的...Web
- 市場聞之色變的DMA究竟是什麼
- AI儲存的需求是什麼?未來趨勢是怎樣的?AI
- 行業軟體開發商怎樣來搶 BI 這塊蛋糕?行業
- 智慧水利河湖AI智慧影片分析識別系統AI
- "綠色"並不代表安全,一個隱藏在綠色軟體中的木馬分析
- 原來結構體函式還能這樣用結構體函式
- 銀河麒麟系統安裝ORACLE資料庫問題處理Oracle資料庫
- 國產linux系統(銀河麒麟,統信uos)使用 PageOffice 國產版實現前端框架內建對話方塊在Word中填空填表Linux前端框架
- [遊戲]深巖銀河倖存者 --修改實現無敵遊戲