日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零点五开始用Unity做半个2D战棋小游戏(九)

發布時間:2024/9/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零点五开始用Unity做半个2D战棋小游戏(九) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在最前

?

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

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

1、創建戰場(已完成)

根據預定尺寸生成戰場地圖,并隨機一些障礙物。

2、添加地圖功能 (已完成)

實現戰場格子點擊反饋,地圖導航及范圍選定。

3、添加對戰雙方(已完成)

向戰場中添加作戰單位,作戰單位輪流行動,可進行移動、攻擊。

4、加入玩家控制(已完成)

玩家可控制一個戰斗單位,手動選擇移動目標及攻擊單位。

5、添加常用的界面(已完成)

建立界面管理器,加入一些常用的界面。

6、添加常用的戰場顯示(已完成)

為戰斗單位添加血條,加入傷害文字特效。

7、擴展作戰單位(已完成)

豐富戰斗元素,加入并實現手動釋放不同類型的技能。

8、加入AI系統(上)(已完成)

建立超級簡單的AI系統。

9、加入AI系統(中)

調整AI系統的決策方式。

10、加入AI系統(下)

總結AI系統。

11、擴展戰場地圖

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

12、規范戰斗配置

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

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

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

| 目標

上一篇所實現的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夢》了。

愿不忘初心。

下回見。

總結

以上是生活随笔為你收集整理的从零点五开始用Unity做半个2D战棋小游戏(九)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。