您現在的位置是:網站首頁> 世界杯半全场是什么意思

游戲AI的生命力源自哪里?為你揭開MOBA AI的秘密!

  • 大紅鷹dhy官網
  • 2019-04-25
  • 340人已閱讀
簡介歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~本文由wataloo發表在專欄wataloo的試驗田1設計概要1.1設計原則和目的英雄AI的目的主要有:1.新手過渡局,

世界杯半全场是什么意思 www.ezveqs.com.cn 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~

本文由wataloo發表在專欄wataloo的試驗田

1 設計概要

1.1 設計原則和目的

英雄AI的目的主要有:

1.新手過渡局,讓玩家剛進入到游戲時,和較弱電腦對戰,培養成就感,避免尚未熟悉游戲導致的挫折流失。

2.人機對戰,給玩家練習新英雄或者挑戰高難度電腦的機會。

3.溫暖局,對連敗玩家,匹配機器人去補償一場勝利,舒緩連敗挫折。

4.掉線托管,用強度合理的AI來補位掉線玩家,減少其他在線玩家的掉線局有損體驗。

英雄AI的設計原則是:優秀的AI并不要求是盡量的和人表現一致,也不是多么的精準和無懈可擊,而是能夠和玩家進行很好的交互,提升游戲體驗。

1.2 設計思路

我們的AI實現分為四個階段,正好類似于玩家的成長。

第一階段是基本戰術AI,主要包括:混線,買裝備,逃避危險,回城,補兵。是一種單兵作戰AI。模仿新手玩家的剛剛開始學習操作。

第二階段是增加一些事件響應用來控制英雄的走位和換線,包括敵塔下撤退,救援己方塔,包括抱團。模仿玩家已經開始漸漸了解塔的屬性,初步開始與其他玩家合作。

第三階段是協同戰術AI,該AI周期性的判斷是否應該果斷出擊打出一波局部進攻。它會在比較短的時間內控制局部范圍內的單位一起行動,會有走位,配合使用技能等較細致的行為,是一種小團隊AI。模仿玩家已經開始熟悉所有英雄,微操提升,對Gank略有心得。

第四階段是戰略AI,整體協調全部玩家在地圖上的分布,野區,兵線。模仿玩家已經有較強的團隊意識,會分工和配合了。

2 名詞解釋

1. 單體戰術AI:每個英雄都會配備自己獨特的戰術AI,此AI將實現戰斗細節,比如英雄何時該釋放技能,對誰釋放;如何走位規避風險或者形成Gank優勢站位;怎么補兵;購買販賣何種道具;何時追擊何時逃跑等等。

2. 全局AI:全局AI是一種綜合考慮場上所有戰斗因素之后對單體發布指令的控制器。全局AI所關注的事情主要有:兵線英雄的分布,Gank發動時機,逃避危險,救援建筑。全局AI是通過給單位添加指令buff和修改單體戰術AI的參數來實現的。

3. AI參數:我們將盡可能的暴露出AI的各種行為參數,并通過AI參數來控制電腦的AI難度強度。高難度AI,意味著它優先使用較高收益的戰略。而低難度AI則可以選擇比較低收益的戰略。我們的不同難度AI是通過修改AI的一系列參數來實現的。

4. 行為樹:樹形結構的行為流程處理,每個Tick到來時,行為樹按照一定的規則進行搜索和執行相應節點,直到到達某個返回true的葉節點,之后結束當前Tick。

5. Gank 小組:Gank小組是一個動態的局部的概念,當我方英雄A周邊有敵對英雄時,英雄A就是屬于某個Gank小組的,Gank小組的其他成員必須和A距離很近。

6. Gank 行為:Gank行為是一種對集體行為的模仿,其本質仍然是單體AI,但Gank發動時機是通過全局AI來控制的。處于Gank狀態的機器人會表現出與單體行動很不一樣的行為,比如坦克可能寧死也不撤退,ADC優先釋放控制技能。

3 行為樹實現

3.1行為樹腦圖

行為樹腦圖是一個多叉樹,各個父節點的所有子節點節點按照從左到右、從上到下的順序逐個檢測,只要返回True了,之下的節點都不再執行?;疑⑹臀詰闃蔥械南染鎏跫?,灰色節點不滿足則直接返回False。腦圖中的

對應著行為樹中的Selector節點。

行為樹工具基本思想都一致,但使用起來還是有較大差別的。常見的是Unity3D的BehaviorDesigner插件,虛幻四自帶的行為樹組件,公司內部的Behaviac。我最喜歡的是BehaviorDesigner,學習時還是推薦Behaviac,傳送門://www.behaviac.com/language/zh/%E9%A6%96%E9%A1%B5/

原因比較簡單,只有它是中文。

這是一個尚未展開的行為樹,每個超鏈接都對應一個子樹,會逐個展開來講解。

3.1.1購買道具

英雄購買道具需要提前寫好英雄對應的階段道具設置。

比如:

出裝流程

每隔一段時間檢測一次金錢是否可以買賣下階段的道具。

3.1.2瀕死逃亡

3.1.3 Gank戰術行為

每個英雄都需要單獨編寫此子樹。首先搜尋最優攻擊目標,而后檢測是否能用技能組合一次秒之。

最優技能釋放目標搜索

滿足以下條件的單位應該優先被鎖定:

1.HP較低

2.AP或者MP較高

3.物理或魔法護甲較低

4.處在友方其他英雄攻擊范圍內

我們可以使用如下計算公式(本文里面的任何公式都不一定是最優解的,但都滿足定性的設計要求):

其中a,b為參數,AllyNearBy為敵方英雄600碼內我方英雄數量,每增加一個盟友,敵人的誘惑程度增加b。推薦參數值a=0.7, b=0.3

技能是否使用只對最優釋放目標進行考慮。

3.1.4推兵線

英雄磨血節點需要考慮收益,計算公式:

收益值要考慮率較多因素,包括敵我雙方血量,敵方英雄的同盟單位,收益值可能為負值。

3.1.5執行AI行動指令

AI行動指令一般都是通過行為樹之外的全局AI腳本來產生,并通知給AI行為樹。常見的使用方式是,用一個全局AI腳本來產生各種指令,將指令傳遞給行為樹,實現全局AI控制單位。

3.2 AI事件響應

3.2.1英雄躲避塔的攻擊

避免英雄沖塔行為。

3.2.2全局GankAI

周期計算Gank形勢。通知AI是否該Gank或者集體逃亡。

3.2.3救援塔

當塔受到攻擊時觸發,用來產生AI指令,控制AI行為。

3.2.4兵線分布調整

當游戲運行時間超過6分鐘時,AI要開始抱團,強推一路,之后每三分鐘都要進行一次抱團檢測。

兵線?;導撲?/strong>:

兵線局勢需要考察的因素:英雄數量,士兵數量,塔的數量,前塔的HP,推薦公式:

其中a,b,c為參數,Lane表示兵線1,2,3。對應10v10游戲推薦參數設置:a=8, b=2, c=6, d=0.2,e=20

兵線?;悼梢允歉褐?,?;翟礁咴蟣咴轎O?,值越低則兵線越安全。我們每10秒計算一次兵線?;?,根據兵線的狀況來決定是否援助和抱團。

抱團是一個較為穩定的行為,我們設定每次防守抱團之后都要鎖定切換兵線行為3分鐘,進攻抱團鎖定2分鐘。

從另外兩條兵線抽調英雄到最危險兵線。派遣數量服從規律:抽調后兵線上 我方英雄數目/敵方英雄數目>0.65(參數),盡可能多抽調英雄,但也確保不會讓被抽調的兵線變得很不安全。派遣數目可以是0,表示全線吃緊,每條兵線都無法抽調英雄去支援其他兵線。初期,每條兵線最少也要保留一個英雄。

3.3 Gank詳解

3.3.1 Gank行為基本設定

首先要明確幾個設計前提:

1.Gank行為優先級要高于單體行為優先級,或者說,Gank行為執行期間會屏蔽掉大多數單體AI行為。

2.Gank行為需要考慮到局部范圍內(比如說整個屏幕)所有單位(包括敵方),而后控制所有我方英雄一起行動。

3.Gank AI控制下的機器人可能會表現出和單體AI完全不一致的行為,比如肉可能直接沖到敵人人堆中,吸收仇恨,至死方休;ADC和APC最優先的策略可能不是輸出,而是控制;部分機器人輸出傷害優先級要高于逃避危險。

4.Gank行為并非常態。達成一定條件之后才會觸發。比如某個時刻敵我力量對比呈現一邊倒

Gank小隊的生成

Gank是局部小團隊行為。必須考察周邊敵我英雄和塔的個數,英雄和塔的潛在殺傷。Gank是個局部行為,只有距離很近的那些單位才會被認為是處于同一個Gank小組內。Gank小組是個動態變化的單位組。需要每隔一段時間重新生成一次。

生成方案:

尋找Gank中心英雄,Gank中心英雄只是根據位置搜索產生的,并不意味著它們會在Gank中處于核心地位。每隔一個周期(2秒,參數)先遍歷某陣營場上全部英雄,統計這些英雄身邊敵對英雄的數目。并按照遞減順序排列。身邊敵對英雄越多,該英雄越可能處于Gank中心位置。按順序遍歷己方英雄(只遍歷身邊有敵對英雄的),如果它們還未參與Gank,則以該英雄為中心,在一定半徑(2000,參數)內搜索敵我未參與Gank的英雄,將盟友英雄寫入Gank小隊,并標記它們已經參與Gank了,將敵方英雄寫入Gank目標小隊(目標小隊并不是敵方的實際Gank小隊,敵方的實際Gank小隊生成方式和我方一致)。如此,所有可能正處于交戰狀態的英雄就按照區域劃分到了不同的Gank小組。

Gank的發起和結束

Gank小隊是動態生成的,每一時刻Gank小隊都是存在的,但發起Gank行為是需要條件的。

每隔一段時間要檢測一下Gank小隊的實力對比.

1. 如果我放Gank小隊實力明顯強于目標敵方小隊,則發動Gank,并鎖定5(參數)秒。Gank期間英雄優先執行Gank AI,屏蔽掉單體行為。Gank結束鎖定后。重新生成Gank小組,重新判斷形勢,決定是否發起新的Gank。

2. 當我方Gank小隊實力明顯弱于敵方時,集體執行撤退到己方前沿塔。但并不進入Gank行為。

3. 均衡局面,如果有敵方單位可秒(可秒的含義是,gank小組的輸出期望是目標單位hp的1.6(參數)倍),則立刻發動Gank。否則調整我方站位,綜合防御最強的英雄位置保持不變,脆皮遠離敵小隊中心,但不能離開坦克超過(1000參數)。調整站位是單體AI行為,戰略AI通過參數來控制單體行為(發送指令buff,發送目標位置)。

3.3.2技能傷害量化

如果希望AI精準的釋放技能,量化技能傷害是至關重要的。并不是所有技能都是直接立即傷害的,AI要怎么理解自己的被動技能和buff技能?

我們做的處理是:

默認在一次Gank周期中AI可以普通攻擊三次,或者5秒。將被動技能,比如暴擊和加速之類的,直接量化為三次攻擊或5秒攻擊中的傷害收益。暈眩技能根據暈眩時間量化成額外傷害百分比。輔助技能僅僅起加強隊友作用的,傷害量化為0

當技能全部量化成具體數字之后,就能計算每個英雄在單次Gank中的傷害輸出期望值了。

英雄威脅值

我們用英雄威脅值來表征英雄在單次Gank中的傷害輸出期望值。

威脅值的計算:

首先遍歷場上所有英雄,根據英雄技能等級和CD狀態預估出來技能的三種傷害(物理,魔法,真實)數據。

對峙雙方如果威脅值總和差別很大(參數60%),則認為非均衡局面出現。優勢一方會立刻發起Gank,進入團戰模式。而劣勢一方會立刻進入集體撤退狀態。

威脅值相差不是很大時,英雄表現為單兵行動。此時威脅值的主要作用是敵對目標選擇。

3.3.3 GankTarget選擇

GankTarget的選擇方式——尋找最具吸引力的敵方單位,改進版的吸引力公式:

這個公式綜合考慮的因素有:敵人是否高AD或者高AP?物理護甲和魔法護甲如何?當前血量?我方集火的情況下,傷害總輸出能殺死他幾次?

最大吸引值得敵方英雄會成為Gank小組的共同目標

4 總結

在本文中,我們按照從零開始逐步展開,完整描述了MOBA英雄AI的設計流程。限于篇幅,我們僅僅描述了最核心的框架,諸多細節都未展開。在手游 MOBA《全民超神》項目中,按照這個框架,我們在短短一個月時間內就實現了英雄AI。

本方案原創了兩個核心設定:Gank和技能傷害量化。

Gank的設定讓AI能夠有效的躲避危險,也能很精準的捕捉戰機,完成很多讓人贊嘆的絕妙擊殺。

傷害量化,讓AI理解自己技能的特性。對AI行為收益優化幫助很大。

問答我正在學習AI,我可以實施哪些游戲來實踐它?相關閱讀類守望先鋒游戲AI設計?用人工智能打王者榮耀:匹茨堡大學&騰訊AI Lab為游戲AI引入MCTS方法當人工智能遇到游戲

此文已由作者授權騰訊云+社區發布,原文鏈接:https://cloud.tencent.com/developer/article/1146677?fromSource=waitui

歡迎大家前往騰訊云+社區或關注云加社區微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐干貨哦~

文章評論

Top