最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

構建無風險環(huán)境以增強原型提示執(zhí)行行為樹

2021-12-07 21:21 作者:有木乘舟  | 我要投稿

10.1 Introduction

? 研究游戲技術是一個迭代過程。 做了一個又一個游戲,我們在盡可能的復用已有系統(tǒng),但這種迭代對經歷過驗證的可靠系統(tǒng)幾乎沒有實質性的優(yōu)化和改變。與此同時,游戲的創(chuàng)造性本質是渴望改變、原型設計和測試新想法,其中許多是在制作期間甚至項目接近尾聲時出現的,這個時候去改變已有系統(tǒng)是風險最高的。 我們可以做些什么來提供一個無風險的環(huán)境來處理那些可能改變游戲規(guī)則的想法,還是不做?

??Hinted-execution Behavior Trees (HeBTs) 試圖解決這個問題。 該技術是對傳統(tǒng)行為樹模型的擴展,允許開發(fā)者基于一些高層邏輯動態(tài)修改BT的優(yōu)先級; 新層以即插即用的方式工作,這意味著刪除它不會影響其他模塊的基本行為,這大大降低了風險。

??在本章中,我們將介紹該技術——這是一個經過驗證的解決方案,成功應用于 Driver: San Francisco 中的 AI——然后研究它的工作原理并展示 HeBTs 如何應用于實際的問題。

10.2 Explaining the Problem

? 電子游戲擁抱變化,原型設計則是必要的環(huán)節(jié),也充滿了樂趣,但構建這種體驗需要開發(fā)人員和設計人員共同努力。這是一個雙向的過程:設計師提出的想法被程序員轉化為技術,但同時,這項技術將原始想法提煉出來,并將其轉化為可行的東西。這種來回迭代的過程塑造了最終游戲的內容。

? 技術方面,程序員在高層面上實現具有可調參數的系統(tǒng),設計師使用這些系統(tǒng)來構建游戲。這個工作流程如圖 10.1 所示,在行業(yè)中非常常用。創(chuàng)意來自設計師,工程師實現想法,設計師根據實際表現提出修改意見,工程師接到反饋迭代優(yōu)化系統(tǒng)。

??這種工作流程的關鍵點在于,設計人員幾乎無法控制系統(tǒng)內部的工作流程。通常這種情況是可許的,程序員把控實現細節(jié)無需設計人員關心。但是,從概念設計到實際落地可能是一個漫長的過程,對系統(tǒng)的任何更改工作量都很大(需要提出需求讓程序員去實現)。理想情況下,希望設計師的想法能被快速驗證和測試,而不需要向程序提需求做新功能。

? 上述方案可以減輕概念設計和實際落地之間的時間差,但也不一定適用所有情況。如圖10.2所示的新的工作流程,需要設計師也具有技術能力,比如直接修改行為樹,這有一定風險且可能產生的問題多于收益。

??另一個必須考慮的因素是,電子游戲是非常復雜的工程系統(tǒng),新游戲往往無法直接使用舊游戲的工程代碼,需要做大量的修改優(yōu)化,這意味著我們的解決方案必須能適應下一個新的游戲的工程代碼。

??本章中介紹的解決方案 HeBTs [Ocio 10] 是對傳統(tǒng) BT 模型的擴展。 它解決了這些問題,并允許快速和安全的制作游戲原型。

??在以下部分中,我們將展示如何修改和操縱現有的 BT 實現,以允許額外的高級決策層動態(tài)更改我們行為的某些部分的優(yōu)先級。

10.3 Behavior Trees

? 過去10,行為樹越來越受歡迎,且已成為許多游戲的基本組成部分。在本節(jié)中,會介紹一下行為樹的基礎知識,因為理解本章下面的部分需要這些知識。更多關于BT的介紹可以參考 [Isla 05、Champandard 08、Champandard 13] 或 AiGameDev.com 上的各種材料 [AIGameDev 15]。

10.3.1 Simple BT

? 行為樹是數據驅動的結構,以樹或圖的形式表示。行為樹的節(jié)點為葉子或枝,葉節(jié)點代表一個動作或一個條件檢查,即與游戲世界直接通信的節(jié)點。另一方面,分支節(jié)點不執(zhí)行任何操作而是控制執(zhí)行流程。在這個類別中,我們找到用于控制流(選擇器、序列、并行等)或裝飾器的節(jié)點。

? 用一個簡單的例子展示下行為樹的工作流程:

??在我們的示例中,我們模擬了一個非常簡單的士兵行為,如果它生命值過低,則會找掩護;若可攻擊狀態(tài),則會保持警惕(或空閑)。

? 當節(jié)點更新時,它總是返回一個狀態(tài)值:“成功”、“失敗”或“正在運行”。 返回值由父節(jié)點處理,然后決定如何處理這些信息。因此,行為樹中的執(zhí)行流程來自其靜態(tài)結構(即,不同的分支將以不同的順序激活,這取決于我們使用的節(jié)點類型)。

? 示例樹最重要的節(jié)點是選擇器(圖中用問號表示)。選擇器允許我們在行為樹中表示條件; 將其轉換為我們可以在諸如 C++ 之類的編程語言中執(zhí)行的操作,選擇器是“if-then-else”構造的行為樹版本。該節(jié)點有責任決定 AI 在任何給定節(jié)點將要做什么。本例中使用的選擇器中的優(yōu)先級來自于選擇器子節(jié)點的定義順序,即最左邊的節(jié)點/分支為最高優(yōu)先級,最右邊的為最低優(yōu)先級,導致靜態(tài)優(yōu)先級。

? 選擇器嘗試通過測試每個子分支直到一個成功來選擇最好的子分支。 在示例中,我們將兩個分支表示為序列。

? 序列是一種特殊類型的節(jié)點,它將按順序運行其每個子節(jié)點,如果所有子節(jié)點都成功則成功否則失敗。 因此,序列將非常頻繁地測試一些先決條件作為它們的首要任務,如果先決條件通過,則可以并且將運行實際操作。

??在圖中,每個序列都有兩個孩子:第一個節(jié)點是條件節(jié)點,或者只是檢查世界中的事實的節(jié)點; 第二個節(jié)點是一個適當的動作,或者是對世界狀態(tài)進行修改的節(jié)點。

? 最后,我們向我們的樹添加了一個過濾器,在示例中它實際上是行為樹的根。只要 AI 還活著,過濾器就會確保行為一直運行。

??為簡單起見,我們將繼續(xù)使用上一節(jié)中的示例,但本章中介紹的概念可以應用于其他行為樹。

10.3.2 Tree Complexity

? 我們正在研究的樹非常簡單——它只有少數節(jié)點——對其進行更改將非常簡單。 問題是,在實際情況下,樹可能有幾十個或幾百個節(jié)點,并且不容易修改。在一些解決方案中,通常會有好的工具來讓我們更輕松的使用樹(如,通過擴展/折疊分支或改進UI),但這并不能消除結構的固有復雜性。了解一個更改可能會對復雜樹產生哪些影響和副作用并非易事。

? 回到圖 10.3 中的示例樹,在某個時刻,我們決定提高“攻擊”分支的優(yōu)先級,因為想讓士兵更具有攻擊性,甚至從不撤退。在這種情況下,將不得不修改樹,這回使得【take cover】分支幾乎無用。相反,如果我們決定只在某些情況下增加攻擊的優(yōu)先級會怎樣?

??僅僅通過使用基本模型,我們就可以通過幾種不同的方式來實現這一點,比如添加一個新的選擇器并復制樹的某些部分,或者向【take cover】分支添加一個額外的先決條件,這還不錯。

??但是,如果我們希望 NPC 只攻擊 5 秒然后撤退并且只對一些特殊標記的 NPC 這樣做呢? 事情可能會變得復雜。 在這種情況下,我們最終會得到一棵類似于圖 10.4 所示的樹。

??可能有更好的方法來重新排序樹以適應新情況,但圖中所示的方法足以證明我們的觀點:修改行為樹以適應新邏輯需要一些思考,并且總是存在風險。

? 在本章中,更關注那些在大型復雜行為樹中進行的工作,且由于截止日期或生成里程碑不鼓勵進行重大更改的案例,需要不斷迭代已有系統(tǒng)。

10.4 Extending the Model

? 行為樹是一項偉大的技術,但需要良好的技術能力和長時間的思考來維護它。上一節(jié)中研究的樹的邏輯變化示例表明,簡單樹中的微小變化可能會導致難以理解的結果變化。邏輯變化是可怕的,極力避免的,有些結果可能會讓制作人開心,但弊大于利。

? 本節(jié)中,提出HeBTs這種解決方案,這個方案的想法是允許更高級別的樹的額外層與我們的主樹同時運行,并讓新邏輯的動態(tài)修改主行為樹中的優(yōu)先級。

10.4.1 Hint Concept

? 行為樹和 hinted-execution counterpart 之間的主要區(qū)別在于,行為樹的執(zhí)行流程雖然由自己的結構定義,但HeBTs可以動態(tài)重新排序其分支以產生不同的結果。

? 該系統(tǒng)試圖模仿現實生活中的命令層次結構,其中較低級別的級別由較高級別的人員告知應該做什么,但最終如何做取決于個人。 在我們的系統(tǒng)中,個體 AI 是一個復雜的行為樹,它控制著 AI,因此它的行為是自主的,但我們希望設計師可以在更高級別的層上測試新想法。

? 非技術人員可能對 AI 的內部工作方式不感興趣,只想告訴它做事(即,他們只想命令 AI “殺死敵人”,而不是“找到一條通往 你的敵人,然后靠近,拔出你的武器,向你的目標開火,在你需要的時候重新裝填你的槍,等等”)。 這些建議在 HeBTs 模型中稱為提示。

??提示是 AI 可以從更高級別的來源接收的一條信息,并使用它來產生替代行為,作為優(yōu)先級重新排序的結果。 這意味著 NPC 在保持其對不同情況做出正確響應的能力的同時,將考慮到命令層次結構中更高的請求,以使其行為適應這些請求。

10.4.2 HeBT Selectors

? 行為樹中的大部分決策都發(fā)生在其選擇器中,選擇器會根據某些優(yōu)先級嘗試不同的可能性,直到找到匹配項。

? 在選擇器的最簡單實現中,優(yōu)先級通常來自將分支添加到選擇器節(jié)點的順序。 所以這意味著我們所有的優(yōu)先事項都是靜態(tài)的。HeBTs 允許開發(fā)人員動態(tài)更改這些優(yōu)先級,根據更高級別的邏輯片段傳遞給他們的信息,重新使用與其選擇器關聯的分支。 為了做到這一點,HeBTs引入了一種新型的選擇器節(jié)點。

? 作為復合節(jié)點的選擇器有一個子分支列表,每個子分支代表一個更高層可能希望節(jié)點選擇的動作。 在我們的新選擇器中,分支被分配了一個唯一標識符,該標識符在創(chuàng)建時分配。 這允許設計師工程師命名分支,從而創(chuàng)建有利于每個分支執(zhí)行的提示。

??提示可以是積極的、消極的或中性的; 如果提示是積極的,則樹被告知要做某事; 如果是消極的,則被告知不要做某事; 并且,如果是中性的,則選擇器根本沒有收到提示。 中性提示用于將優(yōu)先級重置為其默認值。

? 例如,假設我們有一個具有五個分支的選擇器,分別命名為“A”、“B”、“C”、“D”和“E”。 我們剛剛實現了一個 HeBTs 系統(tǒng),我們的高級邏輯告訴我們“D”和“E”是非??扇〉模癆”是我們真正應該盡量避免的。圖 10.5 顯示了新選擇器將如何使用此信息。

? 新的選擇器維護四個列表來控制他們的孩子和他們的優(yōu)先級。第一個列表只是跟蹤原始優(yōu)先級; 三個額外的列表存儲已被積極暗示(因此具有更高優(yōu)先級)的節(jié)點、尚未被暗示的節(jié)點(它們是中立的)和已被消極暗示的節(jié)點(它們已降低優(yōu)先級)。 這些額外的列表仍然使用原始順序進行排序,因此如果暗示了兩個或更多節(jié)點,AI 將根據其原始行為知道哪個動作更重要。

10.4.3 Hints and Conditions

??通過到目前為止的修改,已可以使樹能夠接收 hints ,并重新排序由它們的選擇器節(jié)點控制的分支。樹設計者有責任公開他們認為對更高級別公開很重要的任何邏輯(即選擇樹將接受的提示)。

??正如我們所說,行為樹中的執(zhí)行流程由非葉節(jié)點來控制。可以由許多不同類型的節(jié)點,但是簡化傳統(tǒng)的行為樹模型,我們可以說大多數樹都是選擇器和序列的集合,如圖 10.6 所示。

? 這些序列大多數都遵循一個基本模式——如圖 10.7 所示——其中一些條件節(jié)點被放置為第一個子節(jié)點,然后是實際操作。這樣,只有滿足這些先決條件時才會執(zhí)行操作。 如果其中一個條件失敗,該序列將退出,返回失敗,該失敗可能會被選擇器捕獲,然后將嘗試運行不同的分支。

? 在某些情況下,這對我們的提示不利,因為條件可能會使提示分支失敗并且不被執(zhí)行。 我們可以使用圖 10.3 中所示的示例來說明這一點。

? 假設我們已經公開了前兩個分支作為提示。 我們將使用“掩護”和“攻擊”這兩個名稱。 假設我們想通過向樹發(fā)送積極提示來提示 AI “掩護”。

? 按照我們定義行為樹的方式,“take cover” 分支已經具有最高優(yōu)先級,因此選擇器并不真正需要對其子項重新排序(實際上,它確實重新排序了它們,但是這一次,分支的順序不會改變)。 如果我們仔細觀察第一個分支,我們可以看到“take cover”被構建為一個檢查先決條件的序列(如圖 10.7 所示),稱為“l(fā)ow health”。

? 在 AI 滿狀態(tài)的情況下,先決條件將失敗,從而使序列保釋。 失敗最終會傳播到選擇器,該選擇器將運行不同的分支。因為我們在暗示 AI “take cover”,所以我們可能期望它考慮我們的建議,而不是公然無視它。

? 我們需要一種方法來忽略這些前提條件,即如果條件對于要執(zhí)行的分支的其余部分并不是真正必需的。 在我們的示例中,我們實際上并不需要在低血量時去找掩護:這只是一個設計決策,可能試圖使行為更可信。

? 為此,HeBTs 提供了一個提示條件節(jié)點。 這種類型的節(jié)點用于允許行為樹測試它是否正在接收某個提示以及它的類型是什么(正面、負面或中性)。 我們可以修改示例的行為樹來修改序列的先決條件,因此我們的分支將如圖 10.8 所示。

10.5 Multilevel Architecture

? 在上一節(jié)中,我們介紹了 hints 的概念以及如何通過它們動態(tài)修改行為,?這些提示是通過我們所謂的“更高層次的邏輯”發(fā)送到我們的樹上的。可以采用不同的方法來實現這些層級,如通過腳本層來使用系統(tǒng)生成新行為。

? 不過,過多的使用腳本會增加理解成本,因為需要一定的技術背景。 可視化解決方案會更合適,因為學習成本比編程要簡單得多。為什么不利用我們構建的工具來生成我們的基礎行為樹,并擴展它?

10.5.1 Behavior Controllers

? 行為樹是由動作序列組成的塊構建的,它們是負責修改環(huán)境或AI實例本身狀態(tài)的節(jié)點。根據系統(tǒng)的粒度,這些操作或多或少會有點復雜,從子行為(如“采取掩護”)到原子操作(如“尋找掩護點”)。對于對行為樹內部工作原理不感興趣的用戶(只關心結果),粒度越粗,系統(tǒng)對它們來說就越簡單。

? 修改大型行為樹可能很復雜,可能需要考慮很多變量。此外,樹中的微小變化可能會導致不好的行為,使 AI 無法按預期工作。因此,我們不希望從頭開始創(chuàng)建新行為; 相反,我們只希望它們具有靈活性和可塑性。因此,讓我們保留一個由工程師維護的基礎樹,并為團隊提供創(chuàng)建新的更高級別樹的方法。

? 更高級別的樹使用一組不同的構建塊。 具體來說,我們將用一些我們稱為hinters的新節(jié)點替換動作節(jié)點。顧名思義,這些節(jié)點可以將提示發(fā)送到行為樹的底層。新樹將在我們的基本行為之上工作,動態(tài)修改它并允許設計師輕松安全地對新想法進行原型設計,因為主要行為樹不會被永久修改,從而降低風險。

? 至此,我們的AI將由多層行為樹控制而不是一個樹,這組樹將由一個行為控制器擁有。這些控制器負責維護多層級行為樹,運行它們并生成結果。

? 行為控制器就像一個堆棧,我們可以在其中推送新樹。 堆棧的頂部代表最高級別的邏輯,而底部包含基礎行為樹。每次新增一個新樹時,控制器都會通知新創(chuàng)建的高級樹它的直接低級樹是什么,這將允許將提示發(fā)送到正確的行為樹。 這種多級架構如圖 10.9 所示。

??當創(chuàng)建了所有不同的樹并將其注冊到行為控制器時,就可以執(zhí)行最終行為。HeBTs從上到下運行,高級別優(yōu)先運行。這意味著,當一棵樹被執(zhí)行時,它已經收到了所有的提示,并且它們的分支將被正確排序。 這個過程如圖 10.10 所示。

? 在每次更新結束時,AI 將根據從環(huán)境中收集的信息和收到的提示,運行它認為具有更高優(yōu)先級的任何操作。

10.5.2 Exposing Hints to Higher Levels

? 高級樹使用基本行為樹構建,并確定對它們可用的提示。在創(chuàng)建新樹時,設計者可以為其選擇器的分支命名,這將自動暴露相應的提示。以類似的方式,如果在低級樹中的任何地方使用了條件提示,則該提示將自動公開。

? 高層級樹不使用動作,只使用hinters,其允許樹發(fā)送較低層級的樹向它公開的提示,以生成新的行為。?在內部,它們是非常簡單的節(jié)點:它們的邏輯只執(zhí)行一次,并且在發(fā)送提示后立即退出。

??需要注意的是,hinters可以發(fā)送不同類型的提示,允許我們發(fā)送積極的或消極的提示。 如有必要,他們還可以將提示設置回中性。

10.6 More Complex Example

??到目前為止,我們已經研究了 HeBTs 是什么以及它內部是如何工作的。 并用一個例子來說明,?但該系統(tǒng)的潛力還尚未完全挖掘。因此在本節(jié)中,將展示一個更接近真實游戲的示例。

10.6.1 Prototyping New Ideas

??有許多不同的方法可以修改行為以從運行相同邏輯的兩個 AI 獲得不同的響應。其中一些方法十分簡單,如個性特征的使用。 但是,在現有行為之上添加更復雜的邏輯開始變得復雜,特別是如果我們不想或無法更改原始行為樹。

??在真實的項目中,我們隨時都會發(fā)生變化,但是新的想法和變化可能會給項目帶來很大的風險,或者需要我們負擔不起的資源。 正如我們所看到的,HeBTs 允許我們輕松生成此邏輯,只需使用高層級行為樹(建立在基礎樹上),引導其正常執(zhí)行我們的新邏輯建議應該完成的操作。

10.6.2 Base Behavior

??處理一種新行為需要我們有一個正常工作的基礎行為,因為它將定義我們游戲中的 AI 對不同情況做出反應的方式。 在實際項目中,它也會經過徹底的測試和優(yōu)化。

??假設在我們的例子中,我們的設計團隊決定游戲需要一些士兵:

  • 在預定義的路線巡邏

  • 當玩家進入他們的視野時,將玩家檢測為敵人

  • 一旦識別出玩家就攻擊

  • 如果受到傷害,將嘗試找到掩護位置以繼續(xù)攻擊

? 這種行為將由復雜的行為樹表示,我們在圖 10.11 中展示了它的簡化版本。

? 讓我們來看看基本行為。 乍一看,我們可以看到由選擇器控制的三個主要分支。我們將分支命名為【PATROL】、【COVER】和【ATTACK】; 這會自動公開具有相同名稱的提示,這些提示可以由更高級別的樹使用。 行為樹的根是一個條件循環(huán),它將保持樹運行直到 AI 被殺死。

? 第一個分支定義了AI的戰(zhàn)前行為。例子中,士兵會在沒有敵人的情況下在該地區(qū)巡邏。正如我們在上一節(jié)中看到的,這種情況可能會阻止樹在收到“PATROL”提示時按預期運行; 為了解決這個問題,我們添加了一個提示條件并將兩個條件節(jié)點放在一個選擇器下,這將允許我們在任一條件為真時進入分支。同時,使用一個并行節(jié)點來運行節(jié)點并將其作為斷言(不斷檢測條件以確保始終得到滿足),這樣,一旦AI與敵人交戰(zhàn),分支結構就可以立即退出。

? 第二個分支保證當AI狀態(tài)不好的時候會找掩護。與巡邏分支類似,我們添加了一個提示條件以確保樹將正確使用提示。

? 最后是戰(zhàn)斗分支,跟【COVER】分支類似,通過斷言assertion來確保AI只有在沒有受到攻擊時才會觸發(fā)戰(zhàn)斗。

10.6.3 Prototype Idea

? 理想情況下,系統(tǒng)正常運行后,工程師大部分工作將用在調試和迭代改進行為。有時設計師需要不斷測試新想法以不停改進游戲體驗,此時就需要對已有行為做改動。這時HeBTs將會發(fā)揮作用。

? 為了展示新系統(tǒng)的功能,將會用一個高層級樹來實現一個“偽裝”系統(tǒng)。功能設計是:

  • 玩家可以穿上他們殺死的敵人的衣服,如果他們這樣做,其他 AI 就不會注意到

  • AI 不應將“偽裝”的玩家識別為敵人,但如果被玩家攻擊,AI需要做出反應。

? 基本上,這些更改需要修改游戲玩法和 AI 代碼,而這項新功能無法進入最終游戲。因為游戲使用了?HeBTs,我們可以將新想法的原型設計委托給設計團隊,或者至少讓他們在最少的技術監(jiān)督下嘗試新想法(如果我們有適合這項工作的工具)。

??我們必須牢記,如果我們想要一個幾乎不需要擴展任何編程工作的系統(tǒng),我們必須從正確設計我們的基本行為開始。 此外,構建一套完整的樹節(jié)點和條件可以促進進一步的工作。

10.6.4 Creating a High-Level Tree

? 作為設計師,希望新系統(tǒng)可以讓AI忽略“偽裝”的玩家,所以,底層樹更傾向于【巡邏】。高層級樹的第一次遍歷與圖 10.12 中所示的非常相似。

? 簡而言之,這就是我們的高層級樹應該有的樣子,不過仍需定義條件來檢測玩家是否在偽裝,但樹里沒有這種類型的條件。

? 系統(tǒng)需要一種方式來讓AI維護一些關于世界的知識,常見的方法是使用黑板系統(tǒng)。?假設我們確實有這樣一個系統(tǒng),我們可以在其中編寫信息并從那里獲取有關世界狀態(tài)的詳細信息。此時,狀態(tài)會被轉換成“敵人偽裝了嗎?”,該狀態(tài)會在黑板系統(tǒng)中檢測相關信息。但是,如果我們需要從黑板上讀取這些信息,我們必須先將它設置在某個地方。

? 簡單起見,將使用【broadcast】操作把數據寫入黑板系統(tǒng),這樣(通過將此信息寫入到黑板)可以讓游戲世界的其他AI在一個AI死亡后立即獲取到該信息。由于我們在高層級樹上的第一遍已經在檢查 AI 是否還活著,讓我們擴展樹以正確修改黑板。 我們在圖 10.13 中展示了這一點。

? 要做的第一件事是添加一個額外的序列作為樹的新根,在運行【while alive】分支時始終有一個黑板更新跟隨它。此外還添加了額外裝飾器作用舊序列的父級,目的是忽略序列中失敗時的情況(事實上,每幀都是失敗的,除非玩家在【偽裝】),我們并不希望分支失敗,這樣會破壞根序列。

? 以上,當AI活著時,行為樹會持續(xù)檢查黑板來決定是否提示基礎行為樹去巡邏,除非AI死亡否則黑板將始終更新著。當一個AI死亡時,其余AI將會更新其黑板,并向其基礎行為樹發(fā)送【PATROL】提示,并按照設計忽略玩家。

? 這是個好的開始,但行為樹還不完整,此時AI還不會對偽裝中的玩家造成的傷害做出反應。解決辦法是當AI受到攻擊的時候同步清理黑板數據。最終的高層級行為樹如圖 10.14 所示。

? 在最后一棵樹中,我們添加了一個額外的選擇器,用于捕捉敵人是否被攻擊,清除偽裝標志。 選擇器的第二個分支與我們之前的迭代相同,最后,第三個分支只是確保,如果沒有任何事情發(fā)生,“PATROL”提示被清除。

10.6.5 Analyzing the Results

??這種類型原型設計的關鍵是新邏輯是完全可選的。 讓系統(tǒng)知道它并觀察AI在額外特征下的行為,或者可以刪除高層級樹,這將保持原始行為不變。

? 基礎行為只需少量的數據變動,除非使用高層級樹否則這些更改沒啥用。特別是,我們一直在用兩種修改方式:分支命名是一種無害的更改,根本不影響行為;提示條件確實會修改樹的原始結構,但由于它們是簡單的標志(提示)檢查,如果不存在高層級樹,則永遠不會啟用提示,因此帶來的風險非常小。 提示條件也是可選的,在某些情況下,我們可能根本不想使用它們。 簡單地預先命名分支將暴露動態(tài)優(yōu)先級控制。

10.7 Other Applications

??在本章中,我們重點介紹了 HeBTs 為快速安全原型設計帶來的好處。 這些樹也可用于在其他情況下提供幫助。 在本節(jié)中,我們將展示一些可以從使用 HeBTs 中受益的額外場景。

10.7.1 Adaptation

??有很多種方法讓游戲適應不同類型的玩家。其中,我們發(fā)現“難度級別”這個選擇功能(或其他適應玩家的難度改變),可以讓我們未不同的人群提供更好的量身定制體驗。

? HeBTs使我們可以為每個玩家提供不同的游戲體驗,允許動態(tài)修改內容:為每個類別定義不同的高層級樹,并在運行時決定哪個最適合玩家;基礎行為樹將根據收到的提示重新計算其優(yōu)先級,使玩家更好的享受游戲。

? 這就是 Ubisoft's Driver: San Francisco 使用的方法。 在 Driver 中,逃跑的司機能夠調整他們的路線選擇算法——由行為樹控制——通過實施一系列不同的高層級樹來指導路線生成過程 [Ocio 12]。 這些高層級樹被稱為“預設”,它們做了一些事情,例如讓路線查找器更喜歡直線路線(這樣休閑玩家可以更容易地抓住逃跑路線)到曲折路線或穿過土路或小巷的路線。

10.7.2 Group Behaviors

??我們的hinted-execution模型還可用于基于命令層次結構創(chuàng)建復雜的組行為。 提示會沿著鏈條向下流動,允許一些 AI 更好地控制其他人應該做什么。

??在基于提示的系統(tǒng)中,可以在已有鏈接上創(chuàng)建新連接,作為構建在多個基本行為上的高層級樹,而不僅僅是一個;在這種情況下,每個基礎行為樹都會公開特定類別的AI可以接受的指令,高層級樹將能夠向其基礎行為的AI廣播提示。

??這方面的一個例子是一支擁有戰(zhàn)士、弓箭手和醫(yī)師的小型軍隊。 圖 10.15 顯示了它們行為的簡化版本。

? 我們可以使用不同的將軍,定義不同的高級樹來創(chuàng)建一支服從我們想要發(fā)送的命令的智能軍隊。 例如,我們可以構建一個高級人工智能,它想先用弓箭手攻擊,阻止戰(zhàn)士和醫(yī)療兵,然后繼續(xù)進行近戰(zhàn)類型的攻擊,包括派遣醫(yī)療兵和戰(zhàn)士一起嘗試治療受傷的單位, 絕不允許部隊撤退。 控制這種行為的高級樹如圖 10.16 所示。

? 單位組(作為高級實體)也將由 HeBTs 控制,因此它們也可能會收到提示,從而產生復雜的指揮鏈,可以幫助我們創(chuàng)建更可靠的組行為。

10.8 Conclusion

??行為樹?是一種經過驗證的技術,已在許多成功的商業(yè)游戲中使用。但是,與任何其他技術一樣,任何更改都是有風險的,尤其是如果這些更改是在生產的最后階段進行的。HeBTs 試圖通過提供一種對更大、更復雜的行為樹進行動態(tài)、可恢復修改的方法來降低這些風險。 這些修改也由另一個行為樹(我們稱之為高層級行為樹)控制,因此我們仍然可以利用該技術的強大功能和可視化編輯功能。

?正如我們在本章中所展示的,HeBTs 可以幫助解決許多不同的問題,例如快速原型設計、動態(tài)行為適應或群體行為。 在任何情況下,風險都保持在較低水平,因為我們永遠不會失去我們經過測試的基本行為。

??這項技術并不難在現有行為樹系統(tǒng)之上實現,并且還被用于 AAA 游戲 Driver: San Francisco。 HeBTs 是游戲 AI 成功的關鍵,允許開發(fā)人員根據玩家的行為調整AI的行為。


References

[AIGameDev 15] AIGameDev.com. http://www.aigamedev.com/.

[Champandard 08] Champandard, A. J. 2008. Getting started with decision making and control systems. AI Game Programming Wisdom, Vol. 4, pp. 257–263. Boston, MA: Course Technology.

[Champandard 13] Champandard, A. J. and Dunstan P. 2013. The behavior tree starter kit. In Game AI Pro: Collected Wisdom of Game AI Professionals. Boca Raton, FL: A K Peters/CRC Press.

[Isla 05] Isla, D. 2005. Handling complexity in the Halo 2 AI. In Proceedings of the Game Developers Conference (GDC), San Francisco, CA.

[Ocio 10] Ocio, S. 2010. A dynamic decision-making model for game AI adapted to players’ gaming styles. PhD thesis. University of Oviedo, Asturias, Spain.

[Ocio 12] Ocio, S. 2012. Adapting AI behaviors to players in driver San Francisco: Hintedexecution behavior trees. In Proceedings of the Eighth AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment (AIIDE-12), Stanford University, Stanford, CA.


文章來源:http://www.gameaipro.com/??

如侵犯版權,請聯系譯者刪除。??

讀者若需要轉載,請注明出處。? ?

若有錯誤,歡迎指正。?



構建無風險環(huán)境以增強原型提示執(zhí)行行為樹的評論 (共 條)

分享到微博請遵守國家法律
资兴市| 阿拉尔市| 金沙县| 化州市| 阳东县| 邓州市| 新泰市| 慈溪市| 迁安市| 郯城县| 金坛市| 太仆寺旗| 星座| 改则县| 金川县| 天门市| 南京市| 武义县| 中阳县| 吴旗县| 韶山市| 黑河市| 泗洪县| 遵化市| 德钦县| 麻城市| 卢湾区| 兰考县| 湘西| 肇庆市| 嘉黎县| 铜鼓县| 博客| 大城县| 邵东县| 陆河县| 视频| 婺源县| 大荔县| 山阳县| 浦城县|