讓你的AI更健壯 | Game AI Pro

But, It Worked on My Machine! How to Build Robust AI for Your Game?
Sergio Ocio Barriales
7.1 Introduction
??每一個AI工程師人在職業(yè)生涯的某個時間點都經(jīng)歷過這個階段:你是如此年輕,充滿活力,渴望向每個人證明,你可以完成一番偉大的事業(yè),你還可以用最快的速度完成這番偉業(yè)!你完成你的功能,在地圖上測試它,現(xiàn)在它就在游戲中了。工作完成了,是嗎?
? 有效的測試能確保我們的人工智能滿足設(shè)計要求,并對不可預(yù)見的情況做出適當(dāng)?shù)姆磻?yīng)和處理。經(jīng)驗可以幫助你識別常見的陷阱和錯誤,經(jīng)驗豐富的人工智能開發(fā)人員可以識別這些問題,并用測試數(shù)據(jù)集和類別來捕捉問題,從而使他們的系統(tǒng)更加健壯。在本章中,我們將展示其中的一些策略,分析不同的場景,并提供一些技巧來幫助人工智能工程師利用一些內(nèi)部知識來進行人工智能測試。
7.2 Presenting Our Example
? 調(diào)試可能是個非常抽象的話題,因此為了讓使本章更易讀,我們將提供一個示例,并用它來說明在創(chuàng)建AI角色期間可能用到的不同測試。
? 假設(shè)這里有一個狙擊手,帶著一把配備了瞄準(zhǔn)鏡和激光瞄準(zhǔn)器的狙擊步槍,這大大提高了狙擊手的射擊精度。同時,狙擊手還隨身攜帶一把手槍,應(yīng)付近距離戰(zhàn)斗。這個角色可以在很多動作游戲中找到,而且他們通常表現(xiàn)出類似的行為。
??如圖7.1所示,我們的狙擊手將有三個主要狀態(tài):戰(zhàn)前狀態(tài)、戰(zhàn)斗狀態(tài)和搜索狀態(tài)。

? 如果狙擊手發(fā)現(xiàn)敵人,他們就可以投入戰(zhàn)斗。一旦到了那里,他們就可以去搜索目標(biāo)是否丟失,如果敵人被重新偵察到,就有一定幾率重新返回戰(zhàn)斗狀態(tài)。狙擊手離開這個狀態(tài)后不能回到戰(zhàn)前狀態(tài)。
7.2.1 Precombat
? 在戰(zhàn)前狀態(tài),我們的狙擊手會在n個點之間巡邏,每一個點都會停下來。在那里他們用步槍掃蕩這個地區(qū)。在這種狀態(tài)下,狙擊手完全不知道敵人的存在。
7.2.2 Combat
??在戰(zhàn)斗狀態(tài)中,根據(jù)與敵人的射程距離,狙擊手有兩種選擇。在遠(yuǎn)距離,狙擊手會用步槍瞄準(zhǔn)并擊落敵人。在近距離,狙擊手將使用手槍射擊,并采取常規(guī)的射擊游戲人工智能策略。?
7.2.3 Search
??如果狙擊手在戰(zhàn)斗中失去敵人的身影,狙擊手將進入搜索狀態(tài)。在搜索狀態(tài)下,狙擊手首先確認(rèn)敵人不在他們最后知道的位置。在搜索過程中,如果發(fā)現(xiàn)了敵人的蹤跡,狙擊手可以用的步槍掃蕩區(qū)域,或步行檢查附近的區(qū)域。
7.3 Basic Functionality Tests
? 在我們實現(xiàn)了狙擊手的初代版本后,首先要驗證的是該原型是否能夠按照設(shè)計文檔描述的正常工作。請注意,在真實場景中,??我們不會在開始測試之前實現(xiàn)整個敵人的AI,而是遵循一個迭代過程。本章中描述的測試,特別是基本功能測試,應(yīng)該在我們開發(fā)完整功能時應(yīng)用到較小的部分。
? 當(dāng)我們確定該原型能正常工作時,下一個步驟就是想盡各種辦法去干擾他正常工作。這是測試人工智能角色最困難的部分,因為每一個簡單的改變都可能對其他系統(tǒng)產(chǎn)生無法預(yù)料的影響。
? ?在下面的部分中,我們將重點介紹構(gòu)成人工智能代理的不同部分,如感知、反應(yīng)和導(dǎo)航,并將展示與每個案例相關(guān)的一些潛在測試。我們希望該實驗?zāi)転樽x者提供足夠的信息,使他們能在自己的AI角色上識別出類似的問題,特別是一些需要額外注意的領(lǐng)域,同時希望這些經(jīng)驗幫助他們更好的完成自己的工作。
? 所以讓我們開始談?wù)掳桑?/p>
7.4 Perception Stress Tests
??當(dāng)我們談到感知時,我們指的是使人工智能意識到周圍環(huán)境的所有系統(tǒng),特別是那些允許它檢測其他實體的系統(tǒng),比如玩家。傳統(tǒng)上,這包括人工智能角色的視覺和聽覺,但它可能涉及其他感官,這取決于我們正在研究的游戲和/或人工智能的類型(例如,狗的嗅覺跟蹤)。
? 讓我們關(guān)注一下視覺系統(tǒng)。為此,我們的狙擊手可能會在他們的頭部周圍使用一些圓錐體或盒子,幫助他們確定可以看到哪些敵人。作為我們基本功能測試的一部分,玩家或敵人應(yīng)該是可以被檢測到的,但為了保險,還是會用邊緣案例測試一下。
??狙擊手有兩種感知模式,這取決于它使用的武器:狙擊步槍和側(cè)手槍,所以我們必須分別測試它們。
7.4.1 Rifle Perception Testing
? 我們的狙擊步槍有一個激光瞄準(zhǔn)器,這在游戲中非常常見。激光通常用來表示狙擊手所在的區(qū)域和他正在觀察的方向。
??假設(shè)激光的長度為60米,此時一個狙擊手正在通過他的瞄準(zhǔn)器觀察一片區(qū)域,我們決定在狙擊手前方59米的地方出現(xiàn)。但是,什么都沒有發(fā)生,為什么?
??這個問題最常見的答案是,我們的視力范圍與激光設(shè)定的期望值不符。我們應(yīng)該增加狙擊手的射程嗎?問題如圖7.2所示。

??擴大視錐的危險在于,如果我們想保持相同的視場(FOV),我們不僅要擴大視錐的長度,還要擴大視錐的寬度。當(dāng)前,這取決于具體的視覺系統(tǒng)實現(xiàn),但還是先假設(shè)我們使用視錐是為了簡單起見。
??這個視距問題引出了更多的問題。例如,如果狙擊手透過步槍瞄準(zhǔn)器看東西,他(她)可以看到視錐外的東西嗎?
??經(jīng)過進一步的測試和與設(shè)計的討論,我們可以決定修改狙擊手的視野,并有一個較短的圓錐體和一個包圍激光的盒子,如圖7.3所示,也許這樣就可以解決問題了。
??我們可以做一些額外的測試,以確保所有可能的目標(biāo)距離按預(yù)期工作,我們還應(yīng)該檢查狙擊手不會檢測到不在其視覺模型定義的區(qū)域內(nèi)的敵人。
7.4.2 Pistol Perception Testing
? 狙擊手在使用手槍時可以處于常規(guī)警戒模式,因此我們重新測試常規(guī)感知。一切看起來都很好,但是突然我們注意到狙擊手發(fā)現(xiàn)了很遠(yuǎn)的東西。為什么?好吧,答案通常是我們錯誤的把為狙擊步槍設(shè)計的新視覺模型應(yīng)用到了手槍上。因此只要做一些改變,就能修復(fù)這個BUG。
7.5 Reaction Stress Tests
?一個好的人工智能角色應(yīng)該能夠以合理的方式對多種不同的刺激做出反應(yīng)。不做出反應(yīng)或做出錯誤的反應(yīng)很容易破壞玩家的沉浸感。反應(yīng)測試主要尋找真實性問題,也就是說,那些看起來不好或者破壞了人工智能特征可信度的反應(yīng)。
? 在這里,我們專注于試圖打破人工智能的反應(yīng)。讓我們更詳細(xì)地看一些反應(yīng)類型。??
7.5.1 Spotting the Enemy
? 人工智能應(yīng)該能夠探測到任何狀態(tài)下的敵人,我們通過應(yīng)用上一節(jié)給出的測試來檢驗這一點。我們現(xiàn)在需要反復(fù)試驗的是,當(dāng)偵測行為發(fā)生時,狙擊手會不會播放適當(dāng)?shù)姆磻?yīng)行為(如呼喊 和/或 動畫)。
? 我們要測試的第一件事是我們的動畫在近距離是否合理。當(dāng)人工智能看到在正前方 40米處看到敵人,或者敵人剛剛撞上人工智能時,播放的動畫應(yīng)該是不同的。在后一種情況下,應(yīng)該讓人工智能表現(xiàn)出更夸張的行為。
? 另一個潛在問題是,當(dāng)狙擊手裝備了狙擊步槍時,在遭遇到需要使用手槍來近距離戰(zhàn)斗時,會表現(xiàn)出反應(yīng)變慢的問題。在反應(yīng)完成后才切換武器,會讓AI看起來像機器人,而且速度會慢一些,所以最好可以在特殊情況下,額外增加一些動畫,?將武器交換烘焙到AI反應(yīng)中,讓整體效果看起來更自然一些。
7.5.2 Shooting at the AI
? 我們還應(yīng)該測試人工智能在被擊中時的反應(yīng)。我們需要檢查人工智能是否總是會對此做出反應(yīng),盡管在整場戰(zhàn)斗中,這種反應(yīng)不易察覺。
? 我們還應(yīng)該檢查不同的動畫看起來是否同樣可信,這取決于使用什么武器打擊人工智能,它被擊中的程度,身體的哪個部位受到影響,等等。根據(jù)游戲的不同,這些反應(yīng)的系統(tǒng)可能或多或少是復(fù)雜的。
7.5.3 Reacting to Nondamage Events
??如果我們不直接向人工智能射擊,而是開始做一些事情,例如向附近的地面射擊、吹口哨或扔石頭,我們的狙擊手需要對所有這些不同的刺激做出適當(dāng)?shù)姆磻?yīng)。根據(jù)事件類型和攻擊性(例如,響亮的槍聲和關(guān)閉的燈光開關(guān)),狙擊手應(yīng)該以不同的方式做出反應(yīng)。
? 我們測試的目的是確保反應(yīng)符合設(shè)計,并且有意義。我們可以嘗試的測試有:
AI能連續(xù)對兩個事件做出反應(yīng)嗎?
如果這些事件屬于同一類型呢?我們是不是一次又一次地做出同樣的反應(yīng)?在這種情況下,我們可能需要添加一些反應(yīng)代碼,來逐步加強AI的反應(yīng),并有可能過渡到不同的狀態(tài)。
當(dāng)人工智能還在對前一個事件做出反應(yīng)時,它能處理第二個事件嗎?
人工智能會在對第二個刺激做出反應(yīng)之前完成當(dāng)前的反應(yīng)嗎?這個看起來壞了嗎?
如果第二個事件的優(yōu)先級較低(例如,投擲石塊與子彈撞擊),則可能會忽略第二個事件。
相反,如果第二個事件具有更高的優(yōu)先級,則是否立即處理此新事件?
人工智能在對第一個事件做出反應(yīng)的同時能夠?qū)Φ诙€事件做出反應(yīng),這現(xiàn)實嗎?
人工智能是否根據(jù)與事件的距離做出適當(dāng)?shù)姆磻?yīng)?例如,如果狙擊手聽到身后有槍聲,可能會比聽到50米外的槍聲時顯得更激動。
7.6 Targeting Stress Tests
??現(xiàn)在我們已經(jīng)仔細(xì)檢查了我們的人工智能是否能夠檢測到敵人并對他們所做的一切做出反應(yīng),現(xiàn)在是時候確保它能夠正確地處理被多個目標(biāo)或來自不同的、意外方向的攻擊。
? 根據(jù)游戲和實現(xiàn),AIs可以使用敵人的實際位置來選擇他們的行為,或者他們可以保留最后一個已知位置(LKP,last known position)(Champandard 2009)。LKP通過個人人工智能感知系統(tǒng)或與一組人工智能共享的感知進行更新。為了更好地說明這些測試,我們將在AI中使用LKP,但我們不會詳細(xì)介紹LKP是如何工作的,并會在示例中簡化一部分細(xì)節(jié)。
? 通過我們的測試,我們想驗證兩件事:首先,我們需要知道當(dāng)玩家被檢測到并根據(jù)需要更新時,LKP會被合適地設(shè)置。第二,我們需要知道LKP是否在正確的時間傳播到其他AIs。
7.6.1 LKP-Updating Tests
??當(dāng)狙擊手發(fā)現(xiàn)敵人時,它會做出反應(yīng),然后投入戰(zhàn)斗,只要視線保持不變,設(shè)置一個LKP并更新它。在一個大事件發(fā)生后(例如敵人被人工智能發(fā)現(xiàn))測試LKP被創(chuàng)建或更新到一個新位置的最佳方法是將敵人傳送到人工智能周圍的隨機位置,并在空中發(fā)射一支高射炮(或者根據(jù)游戲的設(shè)計,使用任何其他導(dǎo)致向戰(zhàn)斗過渡的事件):當(dāng)LKP設(shè)置好后,我們將敵人移動到另一個位置,再次觸發(fā)事件,并繼續(xù)執(zhí)行此操作幾秒鐘,確保LKP相應(yīng)地更新。
? 為了在正常的游戲場景中測試以上內(nèi)容,我們可以設(shè)置一個不死的敵人,創(chuàng)建一個LKP,并讓其繞著人工智能移動。在這個過程中,人工智能有可能會丟失目標(biāo)(我們),這就意味著出現(xiàn)問題了。在現(xiàn)實生活中,如果有人在我們周圍兜圈子,我們一定會注意到他,所以我們的人工智能也應(yīng)該一樣!這種丟失目標(biāo)現(xiàn)象可能是由于LKP更新與視覺系統(tǒng)的耦合過于緊密所致。
? 為了解決這個問題,我們可以增加一些時間緩沖,這樣當(dāng)敵人被判定為丟失之前,會有幾秒鐘的失明現(xiàn)象。我們也可以這樣做,即使視覺丟失,人工智能還是能看到敵人(當(dāng)然在這之前一定要先看到敵人),并且還是能重新將視線投向敵人,這意味著敵人無法隱藏自己的坐標(biāo)位置。我們可能需要兩個系統(tǒng)的組合才能獲得最佳結(jié)果。
??我們還應(yīng)該確保我們的游戲使用的任何檢測HUD都能按預(yù)期工作。當(dāng)玩家在被發(fā)現(xiàn)的過程中,被完全發(fā)現(xiàn)時,或是人工智能丟失玩家的目標(biāo)時,這個系統(tǒng)就會對玩家產(chǎn)生作用。人工智能目標(biāo)代碼的更改也需要與HUD進行交叉測試。
7.6.2 LKP Propagation Tests
??隱身技術(shù)在主流動作游戲中變得越來越重要,因此與感知、反應(yīng)和玩家位置相關(guān)的一切都應(yīng)該得到徹底的測試。
? LKP傳播是一種典型的系統(tǒng),單個人工智能個體通過該系統(tǒng),來與某個區(qū)域中的其他人工智能聯(lián)系,或標(biāo)記出具有威脅的區(qū)域位置。我們需要多次檢查傳播是否真的發(fā)生了,但我們也必須確保LKP不會在反應(yīng)的過程中傳播。
??延遲的目的是給敵人一個機會,在他們的位置在被探測到后,并在受到傷害之前,消除潛在的問題(例如,摧毀探測器),如圖7.4所示:

7.7 Unreachability Stress Tests
? 一旦LKP被正確設(shè)置和更新,我們就需要更進一步的,去測試當(dāng)人工智能發(fā)現(xiàn)敵人處在一個無法到達(dá)位置時,人工智能會表現(xiàn)出何種行為。我們還需要檢測,當(dāng)敵人出現(xiàn)在人工智能看不到的地方時,人工智能的行為。在這些情況下,人工智能至少能表現(xiàn)出一種適當(dāng)?shù)目尚诺男袨椤?/p>
? 如果人工智能可以看到一個無法接近的敵人,我們希望人工智能可以移動到一個合適的位置,這位置可以讓敵人保持在視線之內(nèi),并且盡可能可以被攻擊到。
? 考慮到這一點,我們的第一組測試應(yīng)該能夠回答這些問題:
如果無法到達(dá)LKP,人工智能是不是會被卡???
如果敵人從一個無法到達(dá)的位置攻擊,人工智能是否會進入戰(zhàn)斗狀態(tài)?
如果LKP可見,但無法抵達(dá),人工智能是否會維持戰(zhàn)斗狀態(tài)?
? 如果看不到無法到達(dá)的位置,人工智能也應(yīng)該表現(xiàn)正常。并且,如果敵人想利用這種情況來攻擊人工智能的話,我們希望人工智能可以呆在原地,然后準(zhǔn)備防御敵人的攻擊。在確保人工智能沒有陷入這種情況之后,我們可以執(zhí)行一些額外的測試,比如:
人工智能是直接穿透墻壁瞄準(zhǔn)LKP嗎?我們應(yīng)該避免這種情況,像戰(zhàn)術(shù)環(huán)境感知系統(tǒng)(Walsh 2015,Tactical Environment Awareness System)這樣的系統(tǒng)可以幫助我們決定人工智能應(yīng)該瞄準(zhǔn)的位置。
人工智能的目標(biāo)是合理的嗎?
如果敵人從未被重置,并且LKP保持不可接近和不可見,人工智能是否會陷入無止境的戰(zhàn)斗狀態(tài)中?這是一個需要游戲設(shè)計師來回答的問題,但我們可能想在LKP中暫停,好讓人工智能從這種情況中恢復(fù)過來。
如果有一個位置,人工智能可以移動以獲得對敵人的視距(LOS),人工智能是否會移動過去?
7.8 Navigation Stress Tests
? 射擊動作游戲中的人工智能角色通常一輩子都在做以下兩件事之一:播放動畫和點對點導(dǎo)航。糟糕的導(dǎo)航會讓玩家失去沉浸感,所以花一些額外的時間來調(diào)試它,確保它工作正常,會有回報。
? 回到狙擊手的例子。在我們的設(shè)計里,在戰(zhàn)前狀態(tài),狙擊手在A點和B點之間巡邏, 并在與這個有利位置相關(guān)的一組點之間進行掃描。所以讓我們跟著狙擊手去看看它能做什么。
? 狙擊手在A點,完成掃描,開始向B點移動,手里拿著步槍。根據(jù)游戲和動畫預(yù)算的不同,角色雙手持武器行走的動畫可能是為小型武器準(zhǔn)備的,這種情況下狙擊手的動作看起來會有些滑稽。解決這個問題的一個辦法是讓狙擊手在移動到一個新的點之前收起步槍,要么手持手槍移動,要么手無寸鐵。我們的工作是利用手頭的工具和資源找到最漂亮的結(jié)果。
??另一個需要測試的是戰(zhàn)斗中的導(dǎo)航。我們這里有一些可能出現(xiàn)錯誤或不希望出現(xiàn)的情況:
人工智能能用現(xiàn)在裝備的武器正常地跑動和尋找掩護嗎?
人工智能可以停止行動,假如敵人擋在路上或者移動?
我們什么時候,該如何去檢測這種情況?
人工智能會選擇一個新的目的地然后不停的移動嗎?它只是停在原地保持姿勢嗎?在決定移動到一個新點之前,它會播放某種反應(yīng)動畫嗎?
如果人工智能靠近敵人,人工智能會盯著敵人嗎?
它應(yīng)該掃射敵人嗎?它應(yīng)該瞄準(zhǔn)敵人嗎?
人工智能的移動速度是否合適?
人工智能會穿越(a traversal)障礙物嗎?(例如梯子,或能夠跨越縫隙or障礙物)
如果有兩扇門可以進入一個房間,并且已經(jīng)有另一個AI使用其中一個門,那么被測AI是否選擇了另一個門?
人工智能能打開他路徑上的門嗎?
如果人工智能超出導(dǎo)航網(wǎng)格的邊界,它會怎么做?
如果游戲有不同層次的細(xì)節(jié),人工智能導(dǎo)航是否在正確的低LOD上?
? 當(dāng)人工智能導(dǎo)航時,我們也應(yīng)該嘗試做反應(yīng)測試,看看我們是否能破壞他的正常工作流程。關(guān)注過渡點可能是最好的方法。例如:
如果人工智能進入掩體,而我們暴露了掩體,它會有什么反應(yīng)?進入掩體的行為是否被破壞?
如果人工智能在穿越障礙物的時候被攻擊,那么穿越動畫會結(jié)束嗎?人工智能會掉出導(dǎo)航網(wǎng)格嗎??
7.9 Weapon-Handling Stress Tests
??當(dāng)我們的人工智能可以使用多種武器并在任何時候在它們之間切換時,就像我們的狙擊手在步槍和手槍之間切換一樣,我們需要確保武器交換這一過程正確進行。特別是,我們希望避免人工智能處在手無寸鐵的狀態(tài)。
? 回到狙擊手的例子。我們對前一節(jié)的內(nèi)容做了一些修改,在戰(zhàn)前狀態(tài)中,允許他在導(dǎo)航的時候不使用武器。所以現(xiàn)在我們有三種可能的場景:狙擊手拿著步槍,狙擊手使用手槍,狙擊手沒有武器。
? 最簡單的測試就是檢查基本的功能,也就是說,確保在人工智能沒有被打斷的情況下,武器轉(zhuǎn)換能按預(yù)期工作。然而,最有意思的是需要試著去破壞武器轉(zhuǎn)換這一過程。對于我們的特定示例,我們要測試以下內(nèi)容:
在戰(zhàn)前狀態(tài)中,狙擊手準(zhǔn)備從A點移動到B點,因此執(zhí)行收槍的動作。但如果敵人在動畫中途突然攻擊,人工智能能正確播放受擊動畫嗎?槍會掉嗎?他能把槍收好嗎?我們直接讓動畫結(jié)束?
如果狙擊手沒有武器而被擊中,它會在反應(yīng)動畫結(jié)束后裝備武器嗎?哪一個?另外,如前所述,我們可以在裝備武器這一過程配置反應(yīng)動畫,使其人工智能看起來反應(yīng)迅速。?
如果狙擊手剛剛到達(dá)B點并開始抓起步槍,如果它這時候被擊中會怎么辦?
如果狙擊手發(fā)現(xiàn)近距離內(nèi)有敵人,并開始收起來福槍,以便拔出手槍,而這時候敵人射擊人工智能,會發(fā)生什么?
如果敵人在戰(zhàn)斗中逃跑后狙擊手開始考慮放棄目標(biāo),并試圖進入搜索狀態(tài),把手槍收起來,裝備步槍。如果人工智能在這個過程中被擊中,它會怎么做?
其他有趣的測試與武器重新裝填有關(guān)。在這種情況下,我們要回答的主要問題是,如果人工智能在換子彈過程中被擊中:
動畫全都播放完了嗎?動畫被打斷了嗎?
武器重新裝填完畢了嗎?
7.10 Exotic Elements Stress Tests
??我們用來構(gòu)建角色的一些不同系統(tǒng)可以在不同的原型之間共享,也可以在不同類型的角色之間重用,只需稍作修改或調(diào)整。不過有些部分只能適用于特定的角色,如狙擊步槍。這些額外的元素使我們的角色看起來特色鮮明、各不相同,因此我們需要花費額外的工作在這些地方,并確保其正常工作,看起來漂亮。
??由于這些組件的獨特性,測試會有些難度,但我們主要的目的,就是測試并確保這些特性不會被破壞。例如,對于狙擊步槍的激光,我們可能需要測試以下各項:
激光射出來的位置對嗎?
激光會在武器移動時跟隨嗎?激光是獨立于武器運動的嗎?
如果是,偏差是否明顯?
是否有理由允許激光獨立運動?
激光在任何情況下都工作良好嗎?例如,當(dāng)狙擊手收起武器時,我們應(yīng)該用激光做什么?應(yīng)該關(guān)掉嗎?如果狙擊手受到了一次劇烈的打擊導(dǎo)致移動幅度過大,這個移動幅度對激光來說是可以接受的嗎?
7.11 Group and Timing Stress Tests
??在這一點上,當(dāng)我們的人工智能作為一個單獨的單元運行時,它應(yīng)該是健壯的、有趣的和可信的。但是,如果我們開始將我們的角色與相同和/或不同類型的其他角色一起使用,會發(fā)生什么情況?
??我們可以執(zhí)行的測試有:
如果一組人工智能接收到一個事件,它們是否對該事件的反應(yīng)完全同步?我們可能想在反應(yīng)中加入一些小的、隨機的延遲來做一些平滑。
不同類型的人工智能能很好地協(xié)同工作嗎?有沒有什么類型的行為會破壞組內(nèi)其他人的行為?例如,狙擊手可以從更遠(yuǎn)的距離發(fā)現(xiàn)敵人,當(dāng)敵人仍在LKP時,可能會在其他人工智能執(zhí)行反應(yīng)行為之前,就迫使整個小組進入搜索狀態(tài)。如果我們認(rèn)為這些交互對游戲有負(fù)面影響,我們可能希望能夠更好的控制它們。例如,在上面這個能夠快速檢測LKP的狙擊手例子中,如果組內(nèi)有非狙擊手角色(且能到達(dá)敵人的位置),我們可以設(shè)置障礙,防止狙擊手檢測敵人LKP。
7.12 Conclusion
??建立良好的人工智能需要付出額外的努力。確保我們的角色遵循游戲的設(shè)計是第一步,但長時間的工作調(diào)整和測試應(yīng)該遵循我們最初的設(shè)計方案。
??善于發(fā)現(xiàn)問題,或者知道如何改進并將特性提升到下一個層次,這是每個人工智能開發(fā)人員都應(yīng)該具備的一項重要技能,也是我們隨著時間和實踐、討論和建議而不斷改進的一項技能。
??讀者可能已經(jīng)注意到本章中介紹的所有測試都是一步步推進的。我們首先測試在不受干擾的情況下是否正常工作,然后人為的生成一些問題,并以不同的方式拋向人工智能,以檢查系統(tǒng)如何處理這些中斷:人工智能在被中斷時如何反應(yīng)?比如說,人工智能在交換武器的時候被擊中。
? 如果我們要求它同時做兩件不同的事情會怎么樣?例如,當(dāng)人工智能正在對一個事件做出反應(yīng)時,接收到第二個事件。
??除此之外,我們一直在關(guān)注非計劃內(nèi)的結(jié)果(比如狙擊手在我們修改了他們的視箱后在擴展范圍內(nèi)探測玩家),并始終確保每一個系統(tǒng),即使它與我們的變化沒有直接聯(lián)系,仍然按預(yù)期運行。
??我們希望讀者已經(jīng)完全理解了測試人工智能角色可能遇到的問題,并且希望本章中介紹的技術(shù)和示例,能成為讀者們解決工作中遇到的測試難題的一個起點。
References
Champandard, A. J. Visualizing the player’s Last Known Position in Splinter Cell Conviction.?????http://aigamedev.com/insider/discussion/last-known-position/(accessed May?15, 2016).?
Walsh, M. 2015. Modelling perception and awareness in Tom Clancy’s Splinter Cell?????Blacklist. In Game AI Pro 2: Collected Wisdom of Game AI Professionals, ed. S. Rabin.??????????Boca Raton, FL: A K Peters/CRC Press, p. 313.
文章來源:http://www.gameaipro.com/?
如侵犯版權(quán),請聯(lián)系譯者刪除。??
讀者若需要轉(zhuǎn)載,請注明出處。??
若有錯誤,歡迎指正。