《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?

對面有點慘編譯發表於2020-06-02
《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?

一、簡介

《四海兄弟3》,又名《黑手黨3》是一款越南戰爭時代背景的第三人稱動作冒險遊戲。主角Lincoln Clay是一名孤兒和退伍軍人,他正在致力於從義大利暴民手中奪回新波爾多市(基於1968年新奧爾良的虛構城市)。但是這篇文章並不是關於Lincoln的,而是這座城市中與他戰鬥的各種敵人。

開放世界提供了許多內容,包含了隨處可見的玩家互動與遭遇戰。而Lincoln是個狡猾的人,他可以安全地與歹徒進行交涉,也可能更直接地直接參與交火,甚至與警察展開亡命追逐。這些事件在新波爾多的各個地點系統化的發生,而這讓設計師們獲得了足夠的設計自由。

整個系統化功能由眾多部件構成,這些部件讓玩家感覺到了黑幫的致命性或警察無所畏懼的正義。這篇文章將介紹組成《四海兄弟3》AI的最重要的系統,例如:感知、位置選擇、掩護。當專案採用行為樹作為主要決策結構時,正是這些支援系統提供了讓行為樹做出明智決策的基本資訊。

二、敵人設計

當玩家進入《四海兄弟3》的世界時,他們會發現自己身處於細節豐富且具有時代準確性的城市。播放器中可以聽到60年代的美妙音樂,女士們穿著禮服或修身的褲子,腳著低跟鞋,挎著矩形小包走在街上;男士們穿著西服或者穿著襯衫配上領帶……所有這些都是為了給玩家帶來1968年新奧爾良風格的沉浸式體驗而設計。在這樣的“現實”環境中,敵人也必須令人信服,他們要有和正常人一樣的樣貌、舉止。

真實的敵人意味著真實的感知、能力和特徵。他們的生命是脆弱的,當人類敵人的頭部被射中時,他應當立即死亡。

我們從一開始就知道,建立此類敵人需要大量的迭代,這需要靈活的、資料驅動的系統。資料驅動的方法通過諸如遊戲中配置重新載入之類的技術,在迭代中極大減少了遊戲工程的編譯時間。

我們決定將敵人的設計分解成多個模組,讓資料易於傳遞並提升整個系統的可維護性。每個NPC都有一個原型,可以提供相關NPC的外觀和行為資料,但更重要的是原型包含了NPC可以使用的策略。策略包含了決策樹和評分功能,例如位置選擇、目標選擇、掩護行為等等。

2.1原型

原型是對NPC型別的一種表述,包含諸如可使用的決策列表、感官、聲音配置、武器、對玩家行為的範圍、動畫等等資料。每種原型可以具有多種變體並支援繼承配置資料。繼承的內容是原型變體的基本配置,這種基本配置將在每種變體中覆蓋某些(或全部)成員。

遊戲中的“保鏢”就是這種原型的一個例子。在基本配置中,他們可以投擲燃燒彈,但在另一種形式下,他們則只投擲手榴彈。

2.2策略

策略定義了NPC在戰鬥中的行為方式。策略本身分為以下幾個基本部分:

  • 位置選擇-敵人應當站立或尋找掩體的位置
  • 目標選擇-攻擊的物件
  • 運動風格-如何移動到所選位置
  • 掩護動作-位於掩體中時所進行的操作
  • 開放空間行為-處於空曠地帶時會怎麼做
  • 重新載入行為-何時重新載入


這些模組中的每一個都具有單獨的資料檔案,這些資料檔案在獨立的資料夾中,策略功能會引用這些檔案。由此,諸如目標選擇這樣的資料檔案可以用於多種策略。而運動風格、掩護動作、開放空間行為和重新載入行為被定義為決策樹。稍後我們會詳細說明位置選擇和目標選擇在系統的評分功能中的意義。

三、AI系統

本節中描述了AI功能中輸入端的系統(例如感知、原型定義、位置選擇和決策樹)和輸出端的系統(例如射擊)的關係。系統連線的總體概述如圖所示。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
通過行為樹將整個AI系統連線在一起

3.1感知

沒有理智的NPC是難以想象的。平民、警察和歹徒在決定行動時,都必須能夠看到、聽到玩家的輸入。我們期望看到的是平民恐懼逃離、警察試圖消除對公共安全構成威脅的東西,而黑幫則會保護自己的領地。

NPC所有的視力和聽力都由資料驅動,他們構成了另一個配置資料模組,儲存在被引用的原型中的單獨資料夾中。設計師可以改變所有這些內容,從NPC可以看到的最遠距離到腳步聲傳播的範圍等等……我們公開了很多變數以供編輯。

3.1.1視線

《四海兄弟3》中的“視線”系統用於檢測並觸發一些可視的AI事件。遊戲中的每個NPC頭部都具有視覺感測器,可以檢測一定範圍內的任何視線事件,像玩家不斷髮出可被敵人察覺到的“玩家”事件。同時該系統不僅僅用於檢測玩家的行為,例如,它通過一場戰鬥的兩個參與者發出的“近戰”事件來檢測正在進行的近戰戰鬥;又如NPC檢測到屍體、平民看到玩家手中的武器會做出相應反應等等。

類似於其他一些第三人稱動作遊戲,《四海兄弟3》的視覺引擎的核心是採用錐形檢測和射線檢測玩家身上的多個固定點位,就像《湯姆克蘭西細胞分裂黑名單》中一樣。

我們所採用的這五個監測點位,可以是資料驅動的,也可以對應到特定的骨骼點。一般情況下,它們會對應到頭部、肘部和膝蓋。但對於特殊情況,設計人員會為一些動畫手動定義這些點。例如,當玩家位於掩體時,使用預先定義的監測點位置來代替預設的動畫骨骼位置會更好,這在戰鬥中提供了更精確的檢測。下圖中展示的是設計師定義的處於掩體狀態時啟用的檢測點。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
監測點更接近胸部和碰撞盒,這對於玩家來說更有利

當敵人檢測到玩家時,他們不會立即攻擊。AI以該事件為啟動訊號,逐漸意識到自己的視野範圍記憶體在某種東西,這一過程需要一定時間,而識別速度受到許多因素的影響,對於《四海兄弟3》來說我們採用了以下引數:

  • 發生事件的位置與NPC間的距離
  • NPC所看的方向與事件發生地點的角度
  • 目標與NPC間的照明程度
  • 目標的速度
  • 可見點數評分


每種引數所造成的影響在配置檔案中呈現為分段函式,而完全識別所需要的時間由下述公式決定:

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?

3.1.2聽覺

敵人有時需要對他們看不到的事情做出反應,為此,任何對AI來說至關重要的聲音都將記錄在聽覺引擎中並傳播給對應範圍的NPC。在《四海兄弟3》中,AI的聽覺引擎完全獨立於音訊引擎。任何NPC在系統中都將被註冊為一個聽覺檢測器,當遊戲發出任何與AI有關的聲音時,我們會通知事件範圍內的所有檢測器。不同聲音的傳播距離是不同的,對於某些事件,例如射擊,我們會立即做出反應,並將對應的NPC轉換為戰鬥模式;而對於另一些聲音,例如腳步聲,我們僅僅在短時間內收到一定數量的事件時做出反應。

3.1.3意識

識別過程結束後,NPC可能處於下圖所示的5個狀態中的任意一個。這些狀態與敵人的行為有關,大多數情況下NPC會經過這些所有的狀態,但也有一些例外情況。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
AI使用狀態機在不同的識別狀態中進行轉換

這些狀態中的每一個都可以擁有不同的視覺或聽覺功能引數。例如,一個未被啟用的敵人相對於戰鬥中的敵人來說更難發現玩家。

3.2隱祕行動

玩家在隱祕行動上具有多種不同的選擇。

通常情況下,當玩家蹲下並緩慢移動時,他會進入潛行狀態並更難被敵人察覺。在蹲伏動畫中,玩家的視覺監測點會下移,並且在緩慢移動時不會發出任何腳步聲。最重要的是,在玩家處於掩體背後時,AI對其的識別速度會更加緩慢。

在開發《四海兄弟3》的初期,只要玩家蹲下來,AI的識別速度就會變慢,但在後來的迭代中這條規則被刪除了,因為它的“感覺”完全不對:蹲在街道中間的人比站立的人更難被發現,這顯然是不符合直覺的。另一方面,視覺監測點位的變化對於玩家的潛行已經足夠了。

同時,為了給玩家提供更多躲避敵人的機會,遊戲提供了多個分散敵人注意力的方法:

  • 吹口哨:吹口哨是一種強大的能力,可以分散敵人的注意力並將其中一個敵人引誘出去。這個功能最關鍵的部分是敵人目標,我們通過玩家的螢幕範圍來確定目標,利用評分功能來選擇位於螢幕中心且靠近玩家的NPC。另一方面,被引誘的敵人所在小組內的其他敵人需要做出合適的反應。
  • 巫毒娃娃:在置於地面時,這種消耗品會發出聲音事件,敵人會對此事件作出反應並不斷地接近聲音來源。當敵人處於巫毒娃娃附近時,它會爆炸。
  • 僱傭兵小隊:這是一個由4個友方NPC組成的小隊,幫助玩家戰鬥。他們無法進入潛行狀態,同事也不會破壞玩家的潛行行為。當這些友善NPC和敵人戰鬥時,玩家仍然可以進行潛行。此時敵人會發現僱傭兵小隊,但不會發現玩家。小隊成員利用自己的感官發現敵人,並分享彼此的資訊。由於他們需要很好地協助玩家,因此他們可以自動識別玩家通過掃描系統掃描到的所有敵人。小隊的成員協調則通過位置選擇系統來實現,當一個成員找到一個好位置時,系統將會通知其他成員該隊員的當前位置及目標位置,這樣他們彼此間將擁有合適的距離且不會堆在一起。


3.3掩體系統

《四海兄弟3》是一款依賴掩體的射擊遊戲,因此良好的AI選擇掩體的邏輯至關重要。遊戲中幾乎所有的掩體位置都是在編輯器中圍繞靜態障礙物自動生成的,設計師可以手動調整單個掩體的位置,以解決自動生成有誤或者出於遊戲目的需要調整掩體位置的情況。單個掩體的規格為1米寬,AI會根據一些規則選擇它們,相關引數如下:

  • 基本屬性:位置、旋轉、寬度
  • 偏好位置:AI會從這個位置探頭並射擊(左側、右側、上方)
  • 高度函式:我們採用一個分段的線性函式來描述掩體的輪廓,它擁有4個關鍵點,均支援64位資料儲存。一個座標軸代表距離掩體邊緣位置的距離,另一個座標軸代表其高度;這四個點足以描繪一些不平坦的掩體,如汽車引擎蓋或者車頂。
  • 掩護方向:每個掩體按照圓形被均分為32個方向,我們從掩體發射長為半米的射線進行檢測,如果一個方向上存在障礙物,則對應方向上的值儲存為1。
  • 相鄰掩體ID:如果一個掩體附近存在了其他掩體,那麼也將該方向設定一個非0值。


下圖顯示了圍繞靜態障礙物生成的掩體位置,包括了可以提供的保護範圍及相鄰掩體的連線關係,為了圖片的簡潔,我們省略了相鄰掩體的位置資訊。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
在障礙物附近生成的掩體

當動態物件暫時處於靜態時(如汽車、板條箱或垃圾箱),它們周圍也會生成有效的AI掩體位置。而一旦它們進行移動或者被破壞,對應的掩體位置就會消失,這時AI將不會選擇它們作為掩體。由於動態物件有可能移動到遊戲中的任何位置,因此我們需要一個系統來保證無論在任何位置,動態物件相關的掩體位置都是有效的。

當靜態或動態物件周圍的掩體位置被其他動態物件佔用時,我們需要禁用其被佔用的部分。如果剔除後剩餘的部分太小沒辦法作為獨立的掩體位置,則將其附加到相鄰的掩體位置中(如果存在)。

而當動態物件停止移動時,與其相關的掩體位置將被新增到AI的選擇範圍內。單單獲取動態物件的位置是不夠的,我們還必須判斷地面的高度。例如,當汽車停在人行道旁時,其相關的掩體位置將對應汽車的高度,但由於汽車在人行道旁,所以部分掩體位置將位於人行道上,這兩者之間會存在高度差。如果我們沒有檢測地面的高度,當AI使用該位置的掩體時,他們的頭有可能從車頂上露出來。

新的動態掩體被新增到遊戲世界中時,系統會將其與附近的靜態掩體位置連線,這些位置會成為相鄰的掩體區域。AI和玩家角色可以在不暴露自己的情況下利用這些掩體連線規則在其中間移動。如下方圖片所示,一輛汽車停在了一個靜態障礙物旁,靜態掩體位置為了適應這一變動會進行縮小,而另一靜態掩體位置會被直接禁用,其相鄰的位置會進行拉伸以填充剩餘的空間。此時汽車周圍的動態掩體位置將被啟用,所有掩體位置聯結在了一起,玩家和NPC可以在兩個障礙物間無縫移動。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
被汽車引擎蓋遮擋住的掩體位置被禁用,周圍的掩體位置進行拉伸

在進行掩體位置調整時,我們採用一系列的形狀轉換來構成連線區域。通過建立一個新的區域使相鄰的兩個障礙物之間形成連線區域,讓角色自由地在其中移動。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
在兩個相鄰掩體間插入無障礙區域

3.4位置選擇

讓AI角色尋找最佳站位是一個較難解決的問題。當戰鬥突然發生時,看起來最明智的選擇是在原地展開反擊或是馬上躲到最近的障礙物後。接著,我們需要再更廣泛的範圍內尋找某些更好的位置。在這方面,位置評估功能是一項常用的技術,它可以從資料列表中選擇出最可能的位置。

位置評估功能通過一種演算法計算每個可能位置的得分,最終AI選擇的位置要麼是得分最高的,要麼是從得分最高的位置中隨機選擇一個。這種技術在現代動作遊戲中非常常見。

我們使用這種評分技術進行位置選擇、目標選擇和搜尋位置選擇。輸入的資料是候選項的位置或目標,以及需要進行評分的內容列表。每種評分功能都會獲取一些遊戲內容,並將它們轉化成對應的分數。例如,到當前位置的距離、玩家的彈道、是否需要免疫玩家傷害等等。輸出資料則是所有候選項中的最高分,其中得分通過下列公式進行計算:

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?

我們使用這種方式是因為我們期望總分是可以為0的,這在某些方面為我們提供了便利。當然,加權平均、均值平均、全部求和等都是我們認為可以加入評分功能的選項。

3.4.1搜尋範圍

在廣闊的遊戲世界中,AI需要知道哪裡是最先要進行搜尋的,即便整個搜尋過程可能是分段進行的,但搜尋整張地圖依然需要花費令人不可能接受的時長。通常情況下,我們規定了3種搜尋範圍限制:敵人周圍一定範圍、玩家周圍一定範圍和AI自身一定範圍。搜尋範圍限制的選擇由當前策略決定,採取“支援”戰術的AI將在自身周圍進行搜尋,採取“突擊”戰術的敵人將在目標周圍進行搜尋……如下圖所示:

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
AI通過對有效位置的評分選擇出最佳的搜尋位置,從而正面進攻或包抄敵人

《四海兄弟3》使用Havok物理引擎,在導航網格構建時圍繞靜態和動態障礙物生成掩體位置,並在戰鬥中自動生成候選位置。實現這些功能有很多方式,對我們來說,在導航網格上生成位置同時通過相近路徑來限制搜尋範圍是最方便的。

3.4.2評分功能

在《四海兄弟3》中,評分功能所用的函式是一種基於輸入值的分段線性函式,其所需輸入值的複雜程度根據不同的評分內容而不同,像評估位置這一類的就屬於簡單一些的,而計算到達某個NPC的路徑或進行一系列射線檢測就是比較複雜的。另一方面,即便通常來說需要搜尋的空間都是有限的,但任然可能會有數百個候選位置。例如在DLC“Sign of the times”之中,我們的一個AI原型需要檢測玩家周圍的120個位置;而在遊戲中非常常見的保鏢原型,會檢測自身15米範圍內的所有掩體位置和120個開放空間位置;而另一些複雜情況可能會產生超過300個候選位置。

我們當然希望減少那些效能消耗較高的檢測,因此在某些位置的評估過程中,我們會在計算的中途的某個時刻比較分數,並選出目前為止的高分,然後僅僅對高分位置進行高消耗性檢測(如射線檢測和路徑搜尋)。我們在AI的策略配置中定義這些閾值和被允許進入下一檢測階段的候選位置數。在上文中提到的保鏢例子中,實際上我們僅選取50個候選位置進行射線檢測,而只有20個候選位置會進行完整的路徑搜尋。

然而,這種將部分低分在前期過濾的演算法可能會導致一些最終分數非常高的候選位置因前期計算的分值較低而被捨棄。除非我們對所有候選位置都使用全部的檢測手段,否則我們無法從根本上避免這種問題。實際上,我們通過優化評分功能中不同檢測手段的參與順序和每一階段後保留下來的候選位置數量最大程度的減少了這類問題的發生。

在遊戲的開發過程中,我們還有另一套機制,該機制不會將分數低的候選位置過濾掉,而只是將其標記為“待刪除”,並留在整個檢測流程中。最終結果是所有候選位置都將經過全部的檢測評分階段,以此得到最佳位置的列表。如果最佳位置列表中的位置有“待刪除”標籤,日誌中會留下記錄,隨後設計師或工程師會查明這種情況發生的原因。

3.4.3處理遊戲中的動態變化

在實時遊戲中,世界的狀態一直在變化,而遊戲中的角色應該立即對這種變化做出反饋,而不是具有延遲。當NPC選擇了一個可以向玩家射擊時的位置,它需要先移動至該位置,但在這過程中,玩家可能已經去了別的地方。

最簡單的解決辦法是在NPC向目標位置進行移動的過程中繼續對候選位置的評分檢測,並給已經選擇的位置一些分數加成,當然,這是一個高消耗性的解決方案,因此我們基本不會使用它。另一種解決方案是僅僅對已經選定的位置進行評分檢測,如果其分數下降太多,就放棄該位置。最重要的是我們需要對此使用一組不同的評分功能:下方表格中展示了我們在最開始搜尋位置時使用的一組評分函式和在所選位置不斷進行更新時使用的函式。可以看出,一旦NPC選擇了一個位置並開始向其移動,那麼路徑和距離就變得無關緊要了。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
完全搜尋和所選位置更新時的評分功能差異

通過這種方式,我們可以確保當前選擇的位置仍然有效的同時,儘可能少的搜尋其他位置。一些NPC每12秒才會進行一次候選位置的檢測,但每秒會更新5次當前選擇位置的得分。

這種系統在實現上比較簡單,但確定一個有效的評分演算法並不斷地對其進行優化是非常困難的。我們在《四海兄弟3》的開發過程中發現了一些小技巧:

  • 必須要重視除錯工具,可以說最有效的發現問題的方式就是在遊戲中進行除錯。通過它,我們在每個候選位置處都繪製了一個球體,並在處理結果的時候使用顏色編碼實現快速而準確的定位。紅色的球體表示該位置不可訪問,灰色則表示尚未進入最終選擇,綠色表示該位置是最佳位置之一。其中,綠色球體的亮度代表了最終值,最亮的是最佳位置。同時,我們直接在遊戲中繪製出文字,用於顯示評分功能的輸入值和輸出值,以及遊戲攝像機5m範圍內所有位置的最終分數。
  • 使用簡單易懂的評分函式相應曲線,我們之所以使用分段線性函式不僅因為它們的可視性強,更是因為編寫實現簡單。另一種選擇是使用一組不同的數學函式模型,同時為設計師提供一些工具。
  • 簡單就是美,首先從簡單的評分函式開始,然後根據實際需求或者一些極端情況對函式進行優化。我們經常通過檢視評分函式列表刪除一些不必要的內容,只留下最低限度但又不會導致錯誤的。遊戲開發會經歷很多迭代,隨著遊戲的不斷改變,您可能需要去更改一些已經經過調優的系統,但記住,不要害怕刪除東西。


當已選擇位置的評分在NPC移動過程中突然大幅下降時(通常為50%)它會被丟棄,此時NPC會停止,同時行為樹也將切換為開放空間中的預設行為。值得注意的是,如果此時NPC無法切換為預設行為模式,就很可能會做出錯誤的決策,從而破壞沉浸感。例如,NPC可能在沒有任何威脅時突然進入掩體尋求保護。我們還嘗試了另一種選項:NPC仍然移動至低評分位置,但同時會快速找到新的有效位置,但這種行為模式看起來很不穩定。顯然,開放空間中的預設行為——停下來並開始射擊,讓AI顯得更加直覺。

3.5目標選擇

我們知道了AI是如何選擇移動的位置的了,現在我們還需要知道他們如何決定向誰射擊,或者誰應該成為他們的主要目標。如上文所述,位置的選擇是通過評分演算法來確定的,目標選擇使用相同的系統來計算每個潛在目標的得分並由此選擇最佳目標。它們的區別在於使用的評分函式不同。

AI將獲得所有潛在目標列表,其中包含其他NPC、玩家和虛擬目標(NPC對於玩家可能來襲的方向)。在指令碼化場景中,我們可以將門窗設定為潛在虛擬目標,以向敵人暗示玩家的期望位置。這些資訊將與評分功能列表一起輸入選擇系統中,最終,系統將輸出評分最高的目標。這整個過程會比位置選擇要快得多,因為需要評估的候選目標相對較少,並且需要進行的檢測專案也更少一些。

3.6射擊與瞄準

建立一個使用射線檢測並在幾秒鐘內殺死玩家的AI是一項非常容易的工作,AI只需要對準玩家頭部並射擊就可以了;真正困難的是讓AI以直覺且正確的方式,且具有一定隨機性的命中。

行為樹本身並不能決定何時擊中或者打偏,它只決定何時開始射擊以及該向誰射擊,實際的射擊邏輯是在程式碼中完成的。這是因為行為樹的更新頻率太低了,而遊戲程式碼每幀都會進行更新。行為樹為射擊程式碼提供了目標和其他需要驗證的功能功能的列表,當遊戲射擊程式碼執行之前,行為樹會驗證一些功能選項,如果其中任意一個值返回false,則NPC無法在此幀中進行射擊。最常用的功能選項是:

射擊方式:這個功能定義了NPC可以以多快的速度進行射擊。具體包含了NPC在第一次射擊之前需要瞄準多長時間,以及後續射擊之間的延遲是多少。例如,狙擊手完全可以在半秒之內向玩家射擊,這是其匹配的動畫的最快速度。但射擊方式決定了他在開始瞄準後2秒才能進行射擊,而這讓玩家有了一些躲閃的機會。
盟友保護:如果有其他友方NPC或者類似的任何盟友在自己的彈道上,則不能進行射擊。
玩家保護:在某些遊戲情況下,我們不希望NPC朝玩家射擊。例如,在最終BOSS的決戰場景中某個特殊情景階段。

四、綜合決策

上訴所有這些AI系統都能很好完成相應的工作,但彼此間是各自獨立的。因此我們需要有一個綜合系統將它們全部整合在一起,並最終形成一個“人類”NPC。這就是決策發揮作用的地方,在我們的遊戲中,決策是由行為樹實現的。

行為樹可以從位置和目標選擇中得出有效資訊。讓我們假設一個場景:一個NPC在汽車內,他需要在車邊尋找掩護從而更好地保護玩家。行為樹會開始一個序列,將NPC從汽車中移出,移動至新的位置同時進入掩體。

NPC在掩體內的行為也可以通過行為樹來確定,但我們使用了決策樹大大簡化了行為樹:不同的策略不需要新的行為樹或分支。行為樹執行決策樹,並將結果用於其中;由於其將做什麼與如何做分開了,因此也簡化了除錯和設計的難度。新增一個新的策略或更改原有的策略不會影響到行為樹本身,下圖中顯示了機槍手原型模板在其“攻擊”策略中所使用的決策樹。

《四海兄弟3》開放世界中的敵人是如何與玩家“鬥智鬥勇”的?
決策樹使用了視覺化的內部編輯器進行編輯

現在,假設我們的NPC已經進入了掩體,並藏在了它背後。如果此時NPC的戰術是“準備”,那麼此時他就不會給玩家施加壓力。在這個過程中,NPC會執行的兩個動作是保持隱蔽和探出頭來尋找。我們執行決策樹,如果結果是繼續隱藏,那麼行為樹就會在此迴圈播放隱蔽動畫;接著我們再執行一次決策樹,這次的結果可能就是尋找玩家了,因為已經有一段時間沒有這樣做了。

對於開放空間來說,我們也使用了類似的方法。我們使用決策樹來選擇NPC應該去做的事情,然後讓行為樹執行必要的動作序列。它們的區別僅僅在於,在開放空間中,我們會採取一系列的操作,敵人也可以移動到掩體的另一側來躲避玩家的子彈。

五、結論

無論我們使用哪種系統進行AI決策,輸入至系統的相關資訊越多,它所能做出的決策就越好,這就是支撐系統如此重要的原因。優秀的做法是讓各個系統彼此獨立,並嚴格讓它們扮演自己的角色。遵循這些原則讓我們受益匪淺,特別是在遊戲快要釋出這種時間非常寶貴的時刻——我們可以輕易的除錯或變動系統。

在開發《四海兄弟3》的過程中,“麻煩”的資料驅動系統證明了它們的價值,設計師擁有了更大的創作自由,可以在不依靠工程師技術支援的情況下試驗敵人的各種戰鬥行為。

另一方面,增加資料的繼承性也同樣中央。最終的遊戲中有18種AI基本原型和它們的120種變化形態。這會定義很多變數,如果繼承性不好就完全無法維護了。實際上,我們的大多數變化只需要覆蓋其中的幾個值。最後,遊戲中的有幾個系統是程式碼直接寫死的,但我非常希望在今後的專案中它們也能成為通過資料驅動的系統。

參考文獻
Michele Colledanchise, Petter Ögren. 2018. Behavior Trees in Robotics and Al: An Introduction. Boca Raton, FL: CRC Press
Jason Gregory. 2014. Game Engine Architecture. Boca Raton, FL: CRC Press
Mike Lewis, Dave Mark. 2015. Building a Better Centaur: AI at Massive Scale. GDC 2015.
Mike Lewis. 2017. Guide to Effective Auto-Generated Spatial Queries. 《Game AI Pro3: Collected Wisdom of Game AI Professionals》, ed. S. Rabin, 309-325. Boca Raton, FL: A K Peters/CRC Press
Mike Lewis. 2018. Winding Road Ahead: Designing Utility AI with Curvature. GDC 2018.
Sergio Ocio Barriales, Kate Johnson. 2018. Triage on the Front Line: Improving 'Mafia III' AI in a Live Product. GDC 2018.
Chris Simpson. 2014. Behavior trees for AI: How they work. Gamasutra.
Robin J. S. Sloan. 2015. Virtual Character Design for Games and Interactive Media. Boca Raton, FL: A K Peters/CRC Press
Remco Straatman, William van der Sterren, and Arjen Beij. 2005. Killzone’s AI: Dynamic Procedural Combat Tactics. GDC 2005.
Martin Walsh. 2015. Modeling Perception and Awareness in Tom Clancy’s Splinter Cell Blacklist. 《Game AI Pro2: Collected Wisdom of Game AI Professionals》, ed. S. Rabin, 313-326. Boca Raton, FL: A K Peters/CRC Press


原文地址:
https://www.gamasutra.com/blogs/JiriHolba/20200518/363119/Openworld_Enemy_AI_in_Mafia_III.php


譯者專欄:
https://zhuanlan.zhihu.com/p/144048967

相關文章