遊戲AI的綜合設計

2021-06-22 05:05:42 字數 2795 閱讀 3849



遊戲ai的綜合設計

ai (artificial intelligence)作為遊戲的重要組成部分,對遊戲的可玩性起到越來越大的作用。玩家早已不滿足傻瓜似的敵人和npc,渴望見到能像人一樣思考的虛擬人物。本文首先介紹遊戲常見的人工智慧技術,然後綜合利用各種技術設計乙個較為通用的ai引擎。

有限狀態機(fsm):有限狀態機是遊戲中最常用的人工智慧技術,其他技術基本都需要有限狀態機的支援。有限狀態機把單位的行為抽象成若干種狀態,在一定的條件下狀態之間可以相互轉換。例如,敵人開始處於巡邏狀態,當玩家靠近時,轉換成追擊狀態,當玩家遠離後,又恢復巡邏。單位的ai可以用一張狀態圖表示。

模糊邏輯(fuzzy logic):模糊邏輯是布林邏輯的擴充套件。布林邏輯中「是」和「否」是絕對的,而模糊邏輯中會有「有點是」、「不怎麼是」、「非常是」的區別。例如上例,玩家靠近巡邏狀態的敵人,這種靠近就是一種模糊的概念。使用了模糊邏輯後,有時敵人認為距離3公尺就算靠近了,有時認為距離2公尺才算靠近。

模糊狀態機(fusm):結合模糊邏輯和有限狀態機,就產生了模糊狀態機。模糊狀態機中,單位不是絕對的處於某種狀態,而是同時處於幾種狀態,只是每種狀態的比重不同。

智慧型地形(smart terrain):智慧型地形是給地形賦予特殊的資訊,從而用於ai尋路、伏擊等戰術。cs中的路徑點(way point)就是一種智慧型地形。相似的還有智慧型物品等。

a*尋路演算法(a star path finding):a*演算法被證明是最高效的尋路演算法,在尋路中被廣泛應用。a*演算法是對迪傑斯特拉演算法的改進,詳細資料網上有很多。

指令碼系統(script system):指令碼系統應該是遊戲引擎的組成部分,但也可以算作ai的一種技術。例如dota使用的是warcraft的引擎,地圖編輯者使用地圖編輯器為dota中的各個英雄編寫不同的jass指令碼,英雄們才有了一定的ai。目前最流行的指令碼語言是lua指令碼,wow就是使用lua做指令碼語言。

遺傳演算法(genetic algorithm)神經網路(neural network):這二者屬於較為高階的ai技術,都具有機器學習,進化的性質。但是,實際遊戲中應用的並不多,因為遊戲中的單位通常不能接收足夠的學習,學習的結果也不好控制,容易出現意想不到的情況。

遊戲中的ai引擎就是要綜合利用上述技術,並且要與渲染、物理模擬等引擎部件配合。首先我們了解一下人類大腦的結構:

人腦

作用

腦幹

呼吸、血液迴圈等生命中樞

小腦平衡

運動區動作

感覺、視覺、聽覺、嗅覺區

各種感受

額葉

高層大腦功能

顳葉記憶

模擬人腦結構,設計我們的ai引擎結構:

ai

作用

技術

物理模擬

碰撞檢測、碰撞反應

物理引擎完成

導航尋路

a*演算法、路徑點

動畫渲染渲染

有限狀態機、渲染引擎完成

感知器感知

指令碼系統、智慧型地形、智慧型物品

決策器決策

指令碼系統、有限狀態機、模糊邏輯

記憶器學習

神經網路、遺傳演算法、指令碼系統

各部分可以用訊息系統連線起來,並且對外公開介面api,下面是整體結構圖:

下面解釋該系統的工作原理: l 

物理部分由物理引擎完成,包括碰撞檢測、碰撞反應,儲存著物體座標等物理資訊。某些碰撞資訊要通知感知系統,也就是該單位的觸覺。 l 

感知系統在不同單位中差別很大。例如最簡單的敵人可以沒有任何感覺。稍複雜的敵人可以擁有視覺,即可以發現其前方的玩家,這時玩家可以繞的敵人身後偷襲。更複雜的敵人可以擁有聽覺,即玩家在身後偷襲時如果打碎了物品也會被敵人發現。魔獸爭霸中的單位可以感知附近的敵人,發現敵人進入了一定區域就會自動去攻擊。感知系統可以直接決定單位行為,類似與條件反射,例如「受到傷害」的感覺會讓單位逃避傷害,哪怕這個單位沒有高階決策能力。 l 

決策系統是單位的高階ai,單位可以綜合感知系統提供的各種資訊和其他單位對其下達的命令做出判斷。命令可以是玩家的輸入,也可以是團隊指揮者(也是乙個ai單位)下達的。例如dota中乙個ai英雄通過綜合衡量自身的生命、攻擊力、對方生命後,決定和對方pk。決策系統可以使用有限狀態機、神經網路等技術。同時也可以讓單位擁有學習功能,但平衡的學習功能實現起來比較困難。 l 

決策系統直接知道單位的行為,是攻擊、移動,還是跳躍。單位行為可以由有限狀態機管理。另外,較為複雜的遊戲地圖裡,決策系統有時需要導航系統把「前往某處」分解成「先到哪,後到哪」,再控制單位的行為。

至此,整個ai引擎已經比較完善了,在各種型別的遊戲中也比較通用。可以把ai的整體框架放到遊戲物體基類(gameobject類)中,各派生類繼承並重寫關鍵方法,從而表現出不同的智慧型。

遊戲AI 2 遊戲AI模型

在這本書中有大量的演算法和技術。讀者很容易迷失其中,所以從全域性著眼去了解各個部分是如何組合在一起的十分重要。為了有所幫助,我使用了乙個統一的結構來討論遊戲中使用的ai。這不是唯一可選的模型,也不是唯一貼合本書中技術的模型。但是為了使討論更清楚,我將展示每種技術如何適用於製作遊戲 ai 角色的通用結...

遊戲AI 隨機移動

比起將物件沿著直線移動更進一步,就是隨機移動目標。說實話,隨機運動在某些情況下可以被認為是無腦運動。我們就試著用 來模擬一下蒼蠅的大腦 我們姑且認為蒼蠅飛行是無腦的 這裡我們會用到 rand 隨機函式,這個寫過 的人都知道吧 隨機飛行就是隨機改變蒼蠅在x軸和 y軸上的速度值。所以 如下 x velo...

遊戲AI 個體AI角色的操控行為 1

1.靠近 建立乙個類steeringforseek繼承steering,將目標物體拖入target,我們的ai就會自動向target靠近。重寫其中的force方法 在vehicle中會遍歷所有的steering的子類,我們實現的靠近類重寫的force就會被加入vehicle的力中來實現物體的移動 p...