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

掃一掃,訪問微社區

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

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

17

主題

25

帖子

301

積分

Rank: 4

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

專欄作家

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

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

x
好久不見。

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

|  寫在最前
這次想要做一個簡單且傳統的戰棋小游戲,大概的玩法是: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系統之初,我拜托了好友Aillieo在工程中用另一種方法實現AI。

果然,他所采用的方法跟我的相比,有不小的差異,這也驗證了魯迅先生的一句話:

盡管大家的腦袋都差不多大,但所思所想卻各不相同。

魯迅先生的名言 (圖源網絡)

所以,本篇的上半部分,將會主要介紹Aillieo所設計的AI系統。

需要提前聲明的是,由于時間原因,在工程中并沒有實現這個AI的細節邏輯。

但是,雖然只是完成了基本結構,但仍可以對設計思路有一個較為清晰的認識。

|  系統的開始
一個連接了所有AI決策系統(Brain)的數據交換中心,是這個系統的基礎。

這個數據交換中心負責向所有戰斗單位廣播戰斗行為信息
一個連接了所有AI大腦的數據交換中心

比如,當一個AI做出動作時,這個動作會通知到交換中心,并且廣播給其他所有AI:這個家伙行動了!

|  信息的輸入
當戰斗數據從數據中心,被發送到某一個AI的Brain后,Brain會將信息進行處理為直接數據間接數據

戰斗行為信息從數據中心傳入Brain

直接數據是第一手的戰場數據,包括戰場上各個單位的位置、狀態、生命值、攻擊力等。


間接數據是根據策略的不同而去保存和監聽的數據,如戰場上造成傷害最高的單位,任意單位某個屬性達到某個臨界值,某個單位和自己的敵對程度等。


比如,當Brain接到了上面的行動信息后,首先會更新這個行動者移動后的位置(直接數據);接下來還會發現:咦,這不就是剛才揍過我的家伙么(間接數據)。

|  戰斗狀態及切換
每一個戰斗單位同一時間只能存在一種狀態,戰斗狀態直接影響了行動時的行為。

當Brain接到的戰斗信息被分別處理為直接間接數據后,它將考慮是否需要切換戰斗狀態。

比如,當上面的Brain發現他的敵人已經進入了自己的“攻擊范圍”,就會將自己的狀態切換為“戰斗狀態”;當然,如果他本身就是戰斗狀態的話,那就不需要切換了。

|  行為樹與信息的輸出
其實,在每一個狀態的背后,都對應了一個行為樹,而真正做出決策、產生行為的家伙,是這個行為樹上的節點。

Brain決策了一個戰斗行為信息,并傳給數據中心進行廣播

比如,當輪到上面那個處在“攻擊”狀態的AI行動時,他行為樹中“仇恨優先”節點,會將仇恨值最高的單位選擇為目標單位,并向他發動攻擊。

行為樹是如今AI設計中較為常用的方法。由于它本身就是個十分龐大且復雜的話題,加之網上介紹它的資料又非常豐富,這里就不做過多的展開了。

|  AI系統的總結
我以為,此前的使用數值配置驅動AI決策的系統,在描述一個AI的多種類型的行為時,是很吃力的。

比如,嘗試讓一個AI做出非戰斗的行為判斷:拾取道具、解除機關、與場景互動等,很難用數值來對不同類型的行為進行換算。

之所以可以在戰斗里得到驗證,是因為這里只是把它用在了對戰斗行為的決策上,而且這個戰斗行為本身也是很簡單的。

而本篇介紹的狀態機 + 行為樹的系統,稍加擴展,便可以在除戰斗以外的其他地方發揮作用,十分通用。

那么是否就說明數值配置驅動就一定沒有意義呢?

我不這么認為。

我所理解的狀態機、行為樹,是嘗試從人類解決問題的角度出發,將人在現實中處理問題的思考、行為過程梳理出來,并把這種流程化的結果編織成機器可以執行的邏輯,來進行行為的決策。而上篇的數值配置驅動的驅動方式,則是在決策具體一個或一系列問題時,對內因、外因共同作用產生結果的一個模擬,因此我認為兩者是可以結合在一起使用的。

|  寫在最后
最近事情太多,擠來擠去后,留給自己寫東西的時間還是非常有限,導致這個總結拖的太久。久到提筆寫時,居然都忘了之前的系統是怎么做的,上一篇又是怎么寫的了...無奈只能通過翻看之前的文章進行回憶...

行文至此,還是要感嘆一下自己對AI相關的內容知之甚少。實事求是的講,在動手搭建系統之前,對網上的資料,特別是對已經很成熟的“狀態機”、“行為樹”設計,也只是停留在概念上知道(現在也差不多)。

當然,這是我秉性使然的結果;對于一些不了解、感興趣、卻已經有較為成熟體系或總結的知識,在學習時反而會故意回避;寧愿多花些時間,用自己的方式摸索,等到有了自己的一套思路后,再翻看“答案”,看看誰的更有意思(雖然每次都輸)。雖然這是一種效率極低的學習方式,但是這種“游戲”帶來的樂趣,我是十分享受的。

好了,AI系統篇就暫告一段落,下一篇將繼續豐富游戲內容:加入地形及道具等元素

愿不忘初心。

下回見。

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



參與人數 1鮮花 +5 收起 理由
ldragon + 5 贊一個!

查看全部評分總評分 : 鮮花 +5

回復

使用道具 舉報

3偶爾光臨
184/300
排名
64939
昨日變化

0

主題

33

帖子

184

積分

Rank: 3Rank: 3Rank: 3

UID
259926
好友
0
蠻牛幣
550
威望
0
注冊時間
2017-12-16
在線時間
150 小時
最后登錄
2020-1-21
沙發
2019-6-28 20:05:16 只看該作者
666666666666
回復

使用道具 舉報

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

本版積分規則

香港6合总彩透码主论坛
内蒙古快三49期 内蒙古快3遗漏数据 福建22选5开奖查询结果 时时彩骗局 广东11选5 彩票天天乐是黑平台吗 十三水游戏开发 天津十一选五走势图 湖北快三跨度走势图图表 镇江市福彩中心