淺析游戲AI的原理與實現(xiàn)
一、???? 什么是游戲AI
????嚴格意義上來講,與其他領(lǐng)域的AI相比,許多類型的游戲AI實際上都不能稱之為AI。大多數(shù)游戲里的AI實際上只是一些能夠給玩家?guī)硪欢ㄖ悄艹潭鹊摹板e覺”的智能體。所以,簡單來說,游戲AI就是游戲中那些非玩家控制的游戲角色,也就是NPC的行為邏輯。
二、???? 為什么需要游戲AI
????在游戲中,虛擬的游戲角色的行為深刻影響著玩家在游玩這個游戲時候的感受,而游戲AI決定了這些虛擬游戲角色背后的行為邏輯。這種行為邏輯真實與否,直接影響了玩家的游戲體驗。
????打個比方,艾爾登法環(huán)中的許多敵人都有一個“藥檢”系統(tǒng),敵人一旦檢測到玩家使用元素瓶,敵人就會發(fā)了瘋似的來打斷玩家。單從這一點來看,這不是一個優(yōu)秀合理的游戲AI。甚至因此有玩家調(diào)侃到,哪怕你在元素瓶的物品描述上加上這樣一句話——使用元素瓶這件事在交界地被視為是最惡劣的嘲諷方式,都能使這一事件合理。由此可見,游戲AI對于玩家的游戲體驗起到重要作用。
三、???? 游戲AI的主要實現(xiàn)方式
????1.?? 樸素AI
????游戲AI最簡單的實現(xiàn)方式,就是用if else這類的簡單分支語句對NPC的行為進行分類和判別。
????打個比方,有一個敵人在巡邏,我們可以用樸素AI為他添加一些規(guī)則:
如果視線內(nèi)沒有人就巡邏
如果視線內(nèi)有玩家就攻擊
如果生命值降為0就死亡
????看上去好像沒有什么問題,但是如果玩家接近這個NPC,之后又離開了這個NPC的視線呢?這個敵人就會在攻擊結(jié)束后和沒事人繼續(xù)回去巡邏,這顯然不符合常理。而且實際上游戲中的情況遠比這種情況要復(fù)雜,雖然單純使用這種簡單的分支語句,在理論上也可以通過各種嵌套實現(xiàn)很復(fù)雜的行為邏輯,但且不說這段代碼有多讓人頭疼,最主要的是其代碼的復(fù)用性太差,每個不同類型的敵人都要從頭構(gòu)建一個新的行為邏輯,所以這里我們要引入有限狀態(tài)機。
????2.?? 有限狀態(tài)機(Finite-state machine,FSM)
????有限狀態(tài)機是將游戲內(nèi)NPC的各類行為抽象為幾個狀態(tài),再通過事件將不同的狀態(tài)相互連接,組成一個狀態(tài)機。在某個特定事件發(fā)生時,狀態(tài)才將進行轉(zhuǎn)換。
還是以剛才巡邏的敵人舉例,我們可以將這個敵人分為巡邏、警戒、攻擊、死亡四個狀態(tài),再通過一些事件進行連接,如圖1所示

????在有限狀態(tài)機下,通過很簡潔的代碼就可以實現(xiàn)復(fù)雜的行為邏輯。并且最重要的是,代碼可以封裝復(fù)用了,不同類型的單位可能只需要修改幾個切換狀態(tài)的條件,大大降低了工作量。
????3.?? 分層有限狀態(tài)機(Hierarchy-FSM,HFSM)
????分層有限狀態(tài)機是有限狀態(tài)機的進階版。隨著NPC的行為邏輯越來越復(fù)雜,有限狀態(tài)機也有點不夠用了,于是就需要分層有限狀態(tài)機。

????在分層有限狀態(tài)機中,每個狀態(tài)都可以包含多個子狀態(tài),而子狀態(tài)僅可以與同狀態(tài)下的子狀態(tài)之間切換,不同狀態(tài)下的子狀態(tài)之間是不可以切換的。
????還是以剛才巡邏的士兵為例,我們給他的巡邏狀態(tài)分為巡邏和休息兩個狀態(tài),攻擊狀態(tài)分為攻擊和防御兩個狀態(tài),這樣這個警衛(wèi)的狀態(tài)圖如下(省略了圖1的部分內(nèi)容)

????4.?? 行為樹(Behavior Tree,BT)
????行為樹是樹狀的數(shù)據(jù)結(jié)構(gòu),每個節(jié)點都代表了一個行為,每個行為都可以有子行為。所有行為都有個先決條件,也就是產(chǎn)生這些行為的條件。每次從根部節(jié)點開始遍歷,檢查每一個先決條件,滿足先決條件的節(jié)點會繼續(xù)判斷執(zhí)行它的子節(jié)點,而如果一個節(jié)點的先決條件并不滿足,則會跳過它的子節(jié)點,判斷它的兄弟節(jié)點,直到整個樹遍歷結(jié)束,再從根部節(jié)點開始遍歷。
????與狀態(tài)機不同,行為樹的節(jié)點與節(jié)點之間的聯(lián)系較少,增加與刪除節(jié)點對其他節(jié)點都沒有什么影響,增加了它的靈活性與可擴展性。而且,可以通過在先決條件中添加隨機因素來很好的實現(xiàn)隨機性,更適用于一些動作游戲中boss的攻擊邏輯等。

????但是行為樹的設(shè)計思路更加接近機器的思維,而且因為其每次運行都要從根部節(jié)點開始,其決策判斷時間也要比狀態(tài)機更長。
????5.?? 目標導向的行為規(guī)劃(Goal-Oriented Action Planning,GOAP)
????目標導向的行為規(guī)劃,要先給AI一個(或多個)目標,再給AI提供多條可執(zhí)行的行為路徑、對世界因素的描述、每個路徑行為執(zhí)行的先決條件、以及執(zhí)行行為對世界產(chǎn)生的影響效果等等。然后AI要根據(jù)這些因素,找到一個最佳行為隊列,并按順序執(zhí)行。
????舉個例子,一個AI被關(guān)在一個帶鎖的籠子里,籠子里有一個小錘子和一個玻璃箱,玻璃箱里有鑰匙。給AI的目標是離開這個籠子,AI可以執(zhí)行的行為和先決條件如下:

????AI在遍歷所有行為后,可以得到兩條路徑:

????經(jīng)過計算兩種路徑的體力消耗,先用錘子錘開箱子再用鑰匙開鎖的消耗小于直接用錘子錘開鎖的行為消耗,AI確定前者為最優(yōu)解并執(zhí)行。這種決策方式更加接近人類的思考方式。
????6.?? 協(xié)同多智能體(Group AI&Meta AI)
????以上所列舉的這幾種方式,已經(jīng)基本可以滿足單一NPC的絕大部分需求了。但是,實際的游戲環(huán)境中大多并不是單一智能體,而是同時有多個智能智能單位,這些智能體之間的行為聯(lián)動也是游戲AI的一部分。比如在某些潛行類游戲中,一個NPC發(fā)現(xiàn)什么響動,通常會帶動他周圍的好幾個敵人同時警覺,并一起前往發(fā)出聲響的地方搜查,這就是Group AI在起作用。
????而對于NPC更多、場景更復(fù)雜的情況,我們就需要Meta AI,它的作用是對場上的所有AI進行指揮調(diào)度,就好像是坐在幕后的“導演”,用藍牙耳機告訴場上的NPC在什么時候該去哪干什么事,從而實現(xiàn)更加可控的玩家體驗。
????7.?? 機器學習(Machine Learning)
????說了這么多方法,其實都與真正意義上的人工智能關(guān)系不大,那么有沒有游戲AI真正用到了人工智能方法呢?答案是肯定的,這里我們以rct.ai開發(fā)的“混沌球”算法為例。
????首先讓我們從整體架構(gòu)的角度來看看基于混沌球的敘事方式與傳統(tǒng)敘事方式的不同:

?????? 混沌球與傳統(tǒng)的敘事方式的區(qū)別在于,他們將 “事件” 替換為一個又一個明確定義了入口和出口的黑盒,這可以簡單理解為,在每一個切片的混沌球里,開始和結(jié)局(一個或者多個)是確定的,但是玩家每一次如何從開始到達結(jié)局,則是混沌的,是路徑不明確的。這個路徑只有當玩家不斷的和虛擬世界里的虛擬人物 NPC 作出交互,這些 NPC 根據(jù)深度強化學習訓練后的模型作出動態(tài)且實時的反應(yīng)來推動劇情發(fā)展之后,才會被確定下來。這似乎有點像之前提到的目標導向的行為規(guī)劃,但是NPC的路徑選擇是根據(jù)強化學習訓練后得到的。
四、???? 游戲AI與其他行業(yè)AI的區(qū)別
????游戲AI與其他行業(yè)AI最主要的區(qū)別,就是游戲AI的設(shè)計目的是用于服務(wù)人類玩家,是為了給予玩家一個盡可能好的游戲體驗,這也是為什么前面一直都沒有提到大名鼎鼎的AlphaGo。從設(shè)計目的的角度來看,AlphaGo不能算得上是游戲AI,它的存在從來不是為了服務(wù)玩家,而是要打敗玩家。DeepMind公司的目的不是為了讓圍棋這個游戲更好玩(他們甚至讓圍棋變得更無聊),而是測試自家的AI有多么強大的計算能力和學習能力,圍棋只是一個工具而已。
????所以,游戲AI在與玩家對抗時,一定要滿足合理性與公平性。比如敵人不能發(fā)現(xiàn)自己視野以外的單位,不能讓玩家覺得AI作弊了(但是AI的確會作弊來獲取信息,而獲取這些信息不是為了擊敗玩家,而是為玩家提供更好的服務(wù))。文章開頭提到的艾爾登法環(huán)中一些讀指令的行為,就會讓玩家有一種出戲的感覺,降低游戲的沉浸感與真實性。
????而且,有些時候為了增加游戲的沉浸感和多樣性,抑或者僅僅是為了降低游戲的難度,游戲AI不僅不能太聰明,甚至還要裝傻。比如許多射擊游戲中敵人的第一槍永遠打不中玩家,或者在AI的決策中添加隨機性,讓AI也可能會犯錯,露出破綻等等。
五、???? 總結(jié)與展望
????游戲AI發(fā)展至今,已經(jīng)有了一套相對成熟的方法,而今后游戲AI的發(fā)展,更多的是朝著非定性AI的方向發(fā)展,使用如今前沿的AI技術(shù),諸如神經(jīng)網(wǎng)絡(luò)、遺傳算法、NLP等等技術(shù),讓游戲AI展現(xiàn)出更加真實的一面,更好地服務(wù)于玩家的游戲體驗。