香港6合总彩透码主论坛
 找回密碼
 注冊帳號

掃一掃,訪問微社區

枸杞憂天 從零點五開始用Unity做半個2D戰棋小游戲(九)

3
回復
1738
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
4四處流浪
301/500
排名
34890
昨日變化

17

主題

25

帖子

301

積分

Rank: 4

UID
73054
好友
3
蠻牛幣
338
威望
0
注冊時間
2015-2-4
在線時間
37 小時
最后登錄
2019-5-1

專欄作家

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

x
好久不見。

這是第26篇與游戲開發有關的文章。


|  寫在最前
這次想要做一個簡單且傳統的戰棋小游戲,大概的玩法是:2D世界里創建一張由六邊形地塊組成的戰斗地圖,敵我雙方在地圖上輪流行動,并向對方發動攻擊,先消滅掉所有敵人的一方將獲得勝利。

預計將分為以下幾篇(未完成前可能會調整...):

1、創建戰場(已完成)
根據預定尺寸生成戰場地圖,并隨機一些障礙物。

2、添加地圖功能 (已完成)
實現戰場格子點擊反饋,地圖導航及范圍選定。

3、添加對戰雙方(已完成)
向戰場中添加作戰單位,作戰單位輪流行動,可進行移動、攻擊。

4、加入玩家控制(已完成)
玩家可控制一個戰斗單位,手動選擇移動目標及攻擊單位。

5、添加常用的界面(已完成)
建立界面管理器,加入一些常用的界面。

6、添加常用的戰場顯示(已完成)
為戰斗單位添加血條,加入傷害文字特效。

7、擴展作戰單位(已完成)
豐富戰斗元素,加入并實現手動釋放不同類型的技能。

8、加入AI系統(上)(已完成)
建立超級簡單的AI系統。

9、加入AI系統(中)
調整AI系統的決策方式。

10、加入AI系統(下)
總結AI系統。

11、擴展戰場地圖
豐富戰場地圖,加入地形及道具等元素。

12、規范戰斗配置
可以通過規范化的數據結構配置戰場、職業、技能、道具等。

本次的主題是:調整AI系統的決策方式

項目使用的Unity版本為:Unity2018.3.0f2

代碼會上傳至我的Github:https://github.com/elsong823/HalfSLG 中,有興趣的同學請自取。

|  目標  
上一篇所實現的AI系統,并不能帶來什么特別的體驗。因為每個AI的行為邏輯都是相同的。換句話說,這些被AI控制的戰斗單位,沒有自己的“個性”。

本篇將會對AI系統進行調整,重構AI決策邏輯,嘗試使用數值配置來驅動AI的行為,以期使戰斗變得更加有趣。

另外,本篇將會有大量的數據表、圖,可能有些枯燥,希望您能耐心看下去,謝謝。

那就讓我們開始吧。

| 思考的出發點
我是這么開始的。

首先,我對戰場內出現的戰斗單位,進行了角色(職業)劃分,它們分別是:
1、坦克;
2、輸出;
3、治療。

好吧, 我猜你一定知道,這是最簡單的鐵三角組合,這里就不解釋這三種角色的戰場定位了。
劉關張應該也算是一種鐵三角組合吧 (圖源網絡)

之所以做這樣的設定,是為了可以從簡單入手,對AI的行為進行分類。

|  行為分類
現在,結合上述三種定位,試想一下我們自己在扮演這三種角色做決策時的樣子。

我們可以近似的將AI的行為分為以下幾類:
1、制造仇恨(嘲諷);
2、制造傷害(輸出);
3、恢復隊友(恢復)。

其實,上述三種行為,都可以理解為是主動采取的行為,也可以認為是一種理性的戰斗策略

但是,生活中的決策都是理性的么?

顯然不是。

否則就不會有雙十一、雙十二什么事兒了。
某喵節 (圖源網絡)


|  憤怒機制
沖動是魔鬼,但沖動也會讓角色更有血肉。

所以,我添加了一個憤怒機制,來模擬這種情緒上的沖動。

試想一下你被招惹急了會做什么?氣哭了?確實,有時候會這樣。但是更多的時候,你會想把對方胖揍一頓渲泄這種憤怒。

因此,憤怒機制在系統中起到的作用就是強化傷害輸出的決策。
憤怒與策略行為的關系


那么憤怒如何被積累呢?這里使用的設定是:當一個單位受到攻擊后,會增加憤怒值;同時,單位每回合行動后,會降低一些憤怒值。

|  差異性角色
綜上所述,當我們在創造AI時,可以通過調整上述三者策略的比例,來塑造出有差異性的角色。

比如:一個制造仇恨策略比例較高的坦克,和一個造成傷害策略比例較高的坦克,它們在一場戰斗中的表現可能是:前者更愿意保護隊友,而后者則更喜歡追著對方揍。

那么哪種更好呢?

我覺得都很好,這就好比生物多樣性,如果地球上只有人類,那我們的生活該多么的枯燥乏味,甚至無法生存。

所以我們要保護生態環境,愛護我們共同的家園。
世界自然基金會 (圖源網絡)

|  AI系統的設計
其實,這個AI系統的設計非常的簡單,我們拆開來看。

◇ 戰斗行為系統(BattleBehaviourSystem)
每一個參與戰斗的單位,都有一個戰斗行為系統。

戰斗單位通過這個行為系統,來決定下一步的行動,比如朝哪移動、向誰發動攻擊、或者恢復誰的生命值等。

但是戰斗行為系統本身并沒有什么計算能力,它只是組織了一個信息環境,真正處理信息、產生具有參考意義信息的家伙,是系統裝配的戰斗行為計算芯片

◇ 戰斗行為計算芯片(BattleBehaviourChip)
如果你看過《機器貓》,也許還記得在有一集里他拿出了一個“能力磁帶”,只要把這個磁帶插到身體里,你就會掌握一種能力,比如秒變棒球手、摔跤手、哲學家等等。
陪伴成長的藍胖子 (圖源網絡)

戰斗行為計算芯片跟這個很像,如果一個行為系統裝配了某種芯片;那么當這個單位需要決策下一步行動時,芯片就會結合系統所提供的信息環境,為其列出所有可行的行為,并且為它們打分。

當然,一個行為系統可能同時裝配多種不同種類的芯片。

◇ 行為對象(BehaviourItem)
行為對象就是芯片計算出的行為信息的載體,它記錄了這個行為針對的具體目標,以及行為的類型(傷害、嘲諷、治療)等。

◇ 行為調節器(Adjustor)
有時候我們需要微調行為對象中的得分。比如,我們得到了傷害芯片為我們計算出每個目標的得分,但是在做決策前,某個行為調節器忽然想提醒我們應該優先照顧下對方的治療,那么它就會適當調高對這個治療的行為對象的得分,同時調低對其他角色的行為對象的得分。

當所有調節器工作完畢后,系統將會根據這些待決定的行為對象,制定決策對象。

◇ 決策對象(DecisionItem)
制定決策是一個計算具體方案的過程,比如移動到哪個格子,是待命還是使用哪個技能;而決策對象記錄了這些計算的結果,戰斗單位最終根據這個結果,來完成一次行動。

我們可以通過下圖更直觀的了解行為系統的工作流程。
行為系統工作流

以上就是戰斗行為系統的簡單介紹,那接下來我們思考一個問題如何驗證系統的有效性;或者,當我們調整了用于驅動行為的數值如何直觀的看到反饋

|  對結果進行分析
事實上,我們可以在每次調整完數值后,安排一些AI加入戰場進行實際作戰。

通過觀察他們在戰斗中的表現;以及,分析每個單位在決策時輸出的Log,可以在一定程度上達到檢驗系統有效性的目的。
一個戰斗單位行動前各行為的得分


但是,這并不是一個好的方法。因為調整數值只是修改了產生決策的范圍;而AI在決策上的變化,是很難在一兩次的戰斗中,通過觀察過程捕捉到的。

下面,我們就嘗試通過對戰斗結果進行數據分析,捕捉數值調整后的反饋信息,來驗證系統的有效性。

首先介紹一下測試環境,創建兩只配置完全相同的隊伍(Team_1和Team_2)。每隊分別配備一名坦克,一名治療及一名輸出。

兩只隊伍的角色配置以及角色關鍵數值

角色所裝配的技能


為了盡量抵消行動次序出生位置可能對結果帶來的影響,我們采用每場交換優先行動權,以及全員、全地圖隨機初始位置的方式,進行500場自動戰斗。

自動戰斗的邏輯我們之前已經完成了,所以這個過程是很快的。
500場自動戰斗計算

500場自動戰斗后,雙方的獲勝情況

可以看出,在同樣的隊伍配置下,雙方的勝率是很接近的。

接下來,我們調整一些AI的參數,嘗試模擬一些特殊類型(個性)的戰斗角色,看看戰斗系統會給我們帶來怎樣的反饋。

◇ 靠譜的坦克
增加Team_1坦克的嘲諷策略比例,再次對戰500場后,與調整前的戰斗結果進行對比。

提高了嘲諷芯片的決策系數占比

Team_1坦克使用技能的對比

輸出傷害及承受傷害的對比

雙方獲勝情況對比

Team_1角色場均死亡次數對比
可以看出:
坦克使用傷害技能頻次降低,使用仇恨技能頻次增加,輸出絕對值及輸出占比減小

但這提高了隊伍的整體勝率

原因可推測為,坦克更好的保護了輸出及治療,減少了他們受到攻擊的機會及死亡次數,增加了他們輸出傷害和治療的時間,進而影響了整體勝率。

◇ 終結者
為Team_1的近戰Dps的傷害芯片增加殺手調節器,使其成為“終結者”,他(她)會優先考慮攻擊瀕死目標。再次對戰500場后,與調整前的戰斗結果進行對比。

輸出傷害的對比

場均擊殺數量的對比

雙方獲勝情況對比

可以看出:
由于屬性和所使用的技能都沒有變化,所以終結者的輸出傷害變動很小;但是他的擊殺數量明顯增加(搶人頭)。

盡管隊伍勝率增加了,但是隊友都很討厭他。

◇ 治療壓制
為Team_1的近戰Dps所擁有的傷害芯片增加了職業權重調節器,并設置為治療壓制模式。從此,他莫名其妙的對敵方的治療產生了難以言喻的奇妙情感,并一直重點照顧。

職業權重調節器的設置

Team_2接受治療對比

Team_2 治療承受傷害的來源及擊殺來源的對比

雙方獲勝情況對比

可以看出:
治療被對方輸出特殊照顧,直接減少了她的治療總量;而且由于自身不斷遭受攻擊,治療把技能更多的用在了自己身上,無暇顧及其他隊友,進而降低了整體勝率。

◇ 職業保鏢
Team_2的坦克會優先保護己方治療,只要看到她被揍,瞬間寵妻狂魔附體。

Team_2勝場存活率及剩余血量對比

雙方獲勝情況對比

Team_2接受治療情況對比

可以看出:
Team_2的治療得到更多保護,產生的治療量增加,勝場存活率提升,提高了整體戰斗力。
《保鏢》海報 (圖源網絡)

后來在一次線下聚會時,坦克發現這個“治療妹子”居然是個漢子...

◇ 職業殺手 vs 職業保鏢
Team_1的近戰Dps為治療壓制 + 終結者,Team_2的坦克為治療職業保鏢。

結果…

你猜。


《王牌保鏢》海報 (圖源網絡)

|  寫在最后
至此,調整AI系統的決策方式就介紹到這了。

如你所見,本篇所展示的例子,都是單因素實驗;而且角色類型、技能、數值結構都非常簡單。對比那些態度認真、具有復雜技能、數值等設計的游戲,可能不太具有說服力。

但本篇想要做的僅是對“用數值影響AI決策”的一種嘗試,而且這種影響是可以在后期的數據分析中得到反饋的,從這點上講,目的已經達到了。

下一篇將會對AI系統的設計做一個簡單的總結。

最后,需要指出的是,前面提到的《機器貓》,后來已經改名為《哆啦A夢》了。

愿不忘初心。

下回見。

非常感謝您能讀到這里,詳細的代碼可以移步Github(https://github.com/elsong823/HalfSLG)下載。

C:/Users/CLjj/AppData/Local/YNote/data/[email protected]/f7c6817b5ac547998b35cde424396eb3/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20190130000220.jpg




clipboard(17).png (23.24 KB, 下載次數: 75)

clipboard(17).png

clipboard(9).png (36.43 KB, 下載次數: 72)

clipboard(9).png
回復

使用道具 舉報

4四處流浪
395/500
排名
10596
昨日變化

0

主題

50

帖子

395

積分

Rank: 4

UID
248720
好友
0
蠻牛幣
511
威望
0
注冊時間
2017-10-13
在線時間
245 小時
最后登錄
2020-2-26
沙發
2019-4-16 15:06:47 只看該作者
up很厲害啊 期待demo完全體的時候
回復 支持 反對

使用道具 舉報

3偶爾光臨
209/300
排名
9872
昨日變化

0

主題

6

帖子

209

積分

Rank: 3Rank: 3Rank: 3

UID
250392
好友
0
蠻牛幣
241
威望
0
注冊時間
2017-10-23
在線時間
94 小時
最后登錄
2019-10-31
板凳
2019-4-16 17:33:57 只看該作者
支持支持
回復

使用道具 舉報

3偶爾光臨
208/300
排名
18795
昨日變化

4

主題

91

帖子

208

積分

Rank: 3Rank: 3Rank: 3

UID
227944
好友
0
蠻牛幣
613
威望
0
注冊時間
2017-6-21
在線時間
81 小時
最后登錄
2020-1-5
地板
2019-4-19 11:55:32 只看該作者
6666666666666666666666
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

香港6合总彩透码主论坛
理财收益最好的 期货配资·杨方配资平台 怎么买美国股票指数 股票配资平台正规 哪家证券公司支持配资 中国股票指数达到1680 配资炒股使用什么方法 国企理财平台排名 新浪股票行情 股票代码查询