在這本書中有大量的演算法和技術。讀者很容易迷失其中,所以從全域性著眼去了解各個部分是如何組合在一起的十分重要。
為了有所幫助,我使用了乙個統一的結構來討論遊戲中使用的ai。這不是唯一可選的模型,也不是唯一貼合本書中技術的模型。但是為了使討論更清楚,我將展示每種技術如何適用於製作遊戲 ai 角色的通用結構。
下圖描述了這個通用模型。它將人工智慧任務分成三個部分:運動、決策和策略。前兩個部分包含基於字元的演算法,最後乙個部分針對某一團隊或某一方進行操作。圍繞著這三個ai元素的是一套完整的附加基礎設施。
並不是所有的遊戲應用程式都需要全部三個元件的ai:
一方面,棋盤遊戲,如象棋或冒險只需要戰略層面,遊戲中的 ai 玩家不需要自己做決定,也不需要擔心如何移動棋子或角色。
另一方面,在許多遊戲中根本沒有策略。平台遊戲中的 npc 角色,比如《超級馬里奧兄弟》(super mario bros),是純粹的反應型遊戲,他們自己做出簡單的決定並根據這些決定行事。ai邏輯並沒有協同這些敵人角色來讓他們將阻撓玩家的任務做到最好。
移動演算法可能比簡單的直接去某個點更複雜。乙個角色可能需要避開路上的障礙,或者甚至通過一系列的房間。《**細胞》(splinter cell)遊戲中某些級別的守衛會對玩家的出現發出警報。這可能需要導航到最近的壁掛式警報點,但可能很遠,可能涉及複雜的繞過障礙物或穿過走廊的導航。
決策包括乙個角色制定下一步該做什麼。通常,每個角色都有一系列他們可以選擇的不同行為:攻擊、站立、隱藏、探索、巡邏等等。決策系統需要找出在遊戲的每乙個時刻,哪種行為是最合適的,然後被選擇的行為就可以使用移動ai和動畫技術來執行。
最簡單地說,角色可能有非常簡單的選擇行為的規則。例如,在《塞爾達》遊戲的各個級別中,農場裡的動物會站著不動,除非是玩家靠得太近的,靠得太近它們會離開一段距離。
另乙個極端的例子是,《半條命2》中的敵人會做出複雜的決策,他們會嘗試多種不同的策略來接觸玩家:組合一些過渡動作,如投擲手榴彈和鎮壓火力,以實現他們的目標。
有些決策可能需要移動人工智慧來執行。近戰(近身)攻擊需要玩家靠近目標。在諸如《黑暗之魂》這樣的重型戰鬥遊戲中,決策會讓角色向他們的目標移動,也會決定執行哪種攻擊和動畫。在其他遊戲中,一旦作出決定,預定的動畫是沒有任何的移動(例如模擬人生中的任務吃東西)或直接修改遊戲的狀態沒有任何形式的視覺反饋(比如《文明vi》中當乙個國家ai選擇研究一項新技術,它只是發生在玩家沒有視覺反饋)。
你可以通過移動ai和決策ai走得很遠,而大多數基於動作的三維(3d)遊戲只使用這兩個元素。但是為了協調整個團隊,需要一些戰略性的人工智慧。
在這本書的上下文中,策略是指一組角色使用的整體方法。這一類的人工智慧演算法不只是控制乙個角色,而是影響整個角色集合的行為。群體中的每個角色通常會有自己的決策和運動演算法,但總體而言,他們的決策將受到群體策略的影響。
在最初的《半條命》中,敵人以團隊的形式包圍並消滅玩家。乙個人通常會衝過玩家,佔據側翼位置。這在最近的遊戲中也得到了遵循,比如《榮譽勳章》系列中不斷發展的ai引擎。隨著時間的推移,我們已經看到乙個敵人團隊所能執行的各種戰略行動越來越複雜。
然而,人工智慧演算法本身只是故事的一半。為了真正為遊戲構建 ai,我們需要一整套額外的基礎設施,移動指令需要在遊戲中通過動畫或物理模擬等基礎設施轉化為動作。
同樣的,人工智慧需要從遊戲中獲得資訊來做出明智的決定。這有時被稱為「感知」:計算出角色知道什麼資訊。實際上,它的範圍遠不止模擬每個角色的所見所聞,它還包括了連線遊戲世界和 ai 之間的所有 api,這些 api 通常是 ai 程式設計師工作的乙個重要部分,而且根據我的經驗,它是 ai 除錯工作的很大一部分。
最後,需要對整個 ai 系統進行管理,使其使用正確的處理器時間和記憶體。類似於遊戲不同模組通常存在某種型別的執行管理(比如渲染分層級),管理ai也需要一整套自己的技術和演算法。
這些元件中的每乙個都可能被認為超出了 ai 開發人員的職責範圍,有時候確實是這樣,特別是,動畫系統通常是圖形引擎的一部分,或者越來越多地有自己的專門程式設計師。但是大多數基礎設施對於 ai 的正常運作是必不可少的。在這本書中,我在一定程度上介紹了除動畫之外的每個基礎設施元件。
在這本書中,我並不經常使用術語「**」,儘管我所描述的模型是基於**的模型。
在這種情況下,基於**的 ai 是關於從遊戲資料中獲取資訊,決定根據這些資訊採取什麼行動,並執行這些行動的自主角色。
它可以被看作是自底向上的設計:你首先計算出每個角色的行為,然後實現支援它的人工智慧;而遊戲的整體行為是由個體角色行為的協同工作體現出來的。我們將使用的 ai 模型的前兩個元素,移動和決策,來構成了遊戲中乙個**的 ai。
相比之下,非基於**的 ai 則試圖從上到下計算出所有事物的執行方式,並構建乙個單一系統來模擬所有事物。例如《俠盜獵車手3》中城市的交通和行人模擬。總體交通流量和行**量是根據時間和城市區域來計算的,只有當玩家能夠看到它們時,才會變成單獨的汽車和人。
然而,這種區分是模糊的。我們將看到非常自上而下的細節技術,而大多數角色 ai 是自下而上的。**乙個好的 ai 開發人員會混合和匹配任何可靠的技術來完成工作,而不考慮方法。**這種務實的方法是我一直遵循的。所以在這本書中,我避免使用基於**的術語,而是更喜歡籠統地討論遊戲角色,無論他們是如何構造的。
在這本書的正文中,每一章都將回顧這個 ai 模型,指出每章主題與該 ai 模型的聯絡。這個模型對於理解「事物是如何連線的」、以及「哪些技術是其他技術的替代品」非常有用。
但分界線並不總是涇渭分明;這是乙個通用的模型,而不是乙個緊箍咒。在最後的遊戲**中,每個類別的全部人工智慧技術,以及大量的基礎設施,都將無縫地執行在一起。
許多技術也可能在多個類別中扮演著角色:例如,尋路既可以是一種移動,也可以是一種決策技術;類似地,一些分析遊戲環境中的威脅和機會的戰術演算法可以同時作為單個角色的決策者或決定整個團隊的策略。
遊戲AI 隨機移動
比起將物件沿著直線移動更進一步,就是隨機移動目標。說實話,隨機運動在某些情況下可以被認為是無腦運動。我們就試著用 來模擬一下蒼蠅的大腦 我們姑且認為蒼蠅飛行是無腦的 這裡我們會用到 rand 隨機函式,這個寫過 的人都知道吧 隨機飛行就是隨機改變蒼蠅在x軸和 y軸上的速度值。所以 如下 x velo...
遊戲AI 人工智慧
一說到電腦ai 人工智慧 就會有人認為它是高深莫測東西。其實並沒那麼複雜,電腦ai其實是一組if語句。各型別遊戲有各型別的ai,rpg 冒險類 遊戲的ai最簡單,只要用函式產生隨機數在對攻擊物件取餘即可,稍微複雜點的也只增加了道具 魔法攻擊,其ai性質都是一樣的。例如 attack unsigned...
棋類遊戲走步計算AI
如果棋類遊戲中一方有利,就是另一方不利,這時稱為零和博弈。這種型別的博弈,可以使用minimax演算法,下面簡單介紹一下 我們知道,如果不出差錯,一般我們輪流下棋時,都是堅持這樣的原則 如果是自己下,堅持走計算好的最好的棋步 到對手時,他也一定是這樣,根據零和博弈原理也就是對手走對我們最壞的棋步。如...