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

掃一掃,訪問微社區

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

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

17

主題

25

帖子

301

積分

Rank: 4

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

專欄作家

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

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

x
本帖最后由 elsong 于 2019-3-17 11:05 編輯

好久不見。

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

|  寫在最前
這次想要一個簡單且傳統的戰棋小游戲,大概的玩法是: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的決策系統,讓它的表現更具期待性,使戰斗變得更加有趣。

此外,我邀請了我的好友Aillieo,拜托他按照自己的方式也設計一個AI系統。

因此,我會在第三篇介紹他所設計的AI系統,并對這三篇做一個整體的總結。



|  非常簡單的AI系統
個人以為,有意思的AI系統可以簡單的定義為:

讓人覺得符合邏輯,卻又在一定程度上超出了預期。

如何實現一個非常簡單的AI系統呢?為了讓問題變得再簡單些,我將AI的行為拆解成固定的三個步驟:
1、確定攻擊目標;
2、向攻擊目標移動;
3、使用技能。

|  確定攻擊目標
將”合理“的目標設定為攻擊目標,是件并不太容易的事情。

這里我且不談那些優秀的游戲是怎么做的,因為我也不知道。只說說我目前所使用的方法:仇恨系統

AI使用仇恨列表確定攻擊目標

每當一個戰斗單位在戰場中被敵人攻擊時,他就會偷偷的在自己的小本本里記下攻擊者的名字,以及他們的罪行。

當輪到他行動時,他就會掏出自己攥了很久的小本本,按照之前它們揍自己的程度進行降序排列,然后按照這個名單,判斷自己反擊的可能性

這里,沒有反擊的可能性,指的是:如果目標已經被人包圍,自己卻又是一個近戰角色無法靠近,那他就會嘟囔著“哼饒你一條狗命”,然后繼續看下一個人。

直到確定這個家伙可以被自己攻擊到,他就會合上小本本,把他的名字刻上自己的心頭,然后準備開始下一個步驟:向他移動。

|  向目標單位移動
向目標移動就很簡單了,通過A-Star算法找到移動路徑后,行動即可。

確定目標后沿路徑移動

但是這里有一個小問題:應該選擇哪個格子作為移動的終點呢?

特別是當攻擊者是某些遠程攻擊單位,比如游戲中常見的魔法師或者弓箭手,每次都走到目標旁邊去攻擊,感覺上就有點像“送外賣”

其實解決方法也很簡單,在導航時仍然選擇目標所在位置做為導航終點,但在距離終點一定距離時,停止導航并返回導航路徑即可。這個停止距離,可以是遠程攻擊單位的射程,或者手動設定的某個值。

射程為2的小紅,導航停止在距離小藍兩個單位的格子上

這與“真正的愛情,能跨越一切障礙”是一個道理。

當然,如果這個人兒并不在天邊,而在觸手可及的地方,那他根本就不用移動,直接進入下面的環節吧。

|  對目標使用技能
光說,不練,假把式。

好容易走到了他(她)的身邊,總得有所表示吧?

試想一個場景:你很喜歡一個女孩兒,在表白的關鍵時刻,你有一百種表達方法,但你卻只能選擇一種,究竟哪種才是最有效的呢?

如果是真實的生活,答案很簡單:看運氣

但是游戲則不同,你可以用S/L大法(存、讀檔大法)來不斷重試,直到找出效果最好的那一種!

決策將要使用的技能也可以是一樣的。

這里我且不談那些優秀的游戲是怎么做的,因為我也不知道。只說說我目前所使用的方法:簡單的計算所有可用技能的釋放回報

計算技能得分并確定所使用的技能

計算技能釋放得分的公式異常復雜,由于這并不是一篇學術性論文,因此這里不做詳細的解釋和說明,只把公式列出即可:

技能釋放得分 = 技能造成的總傷害 ÷ 技能消耗的能量值

也就眾所周知的:


天啊,好麻煩。

但是,在得到了按照釋放得分降序排列的可用技能列表后,帶著何種的心情、用著怎樣的姿勢、使用哪個技能的問題,就變得十分容易了。

可能我們只需要注意下遠程范圍技能的釋放點選擇問題即可。

釋放影響半徑為2的遠程范圍技能

對于遠程范圍技能,我們當然可以使用一些方法,找到覆蓋最多目標的釋放點。

但為了省事兒,我這里是這么處理的:當目標超過技能釋放距離時,嘗試找到釋放技能時,可以覆蓋到目標單位的點,然后從這里隨便選一個即可。當然,如果目標本身就在技能釋放半徑內,就選它為釋放中心了。
紅色區域為覆蓋半徑為2的技能在釋放時,可以傷害到藍色格子的釋放點

|  能量值
當然,為了幫助AI計算出哪個技能的釋放得分更高,我為每個戰斗單位都增加了一個能量值的屬性(你也可以認為它是魔法值);為每個技能增加了釋放的能量消耗;同時還為游戲增加了每次行動時恢復10個單位能量的設定。但是由于這些邏輯都很簡單,這里就不贅述了。

最后,我們來回顧下整個行動流程吧:
1、打誰;
2、去哪打;
3、怎么打。
完整的AI行動流程


|  寫在最后
至此,建立超級簡單的AI系統篇就介紹到這了。如你所見,這里只是實現了非常簡單的AI行動邏輯,并沒有體現出各種類型AI的不同,我們下期將嘗試著解決這個問題。

但是目前還沒想好怎么做,而且最近又很忙,因此下回可能會拖得久一些吧。




愿不忘初心。

下回見。

感謝您能讀到這里,詳細的代碼可以移步Github(https://github.com/elsong823/HalfSLG)下載。
文章會在我的公眾號 偶爾學學Unity 中不定期更新,歡迎關注,謝謝。






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

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

回復

使用道具 舉報

7日久生情
2448/5000
排名
1387
昨日變化

0

主題

746

帖子

2448

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
135463
好友
0
蠻牛幣
85
威望
0
注冊時間
2016-1-23
在線時間
810 小時
最后登錄
2020-2-6
沙發
2019-3-17 16:38:12 只看該作者
從零點五開始用Unity做半個2D戰棋小游戲
回復 支持 反對

使用道具 舉報

7日久生情
2249/5000
排名
2353
昨日變化

8

主題

801

帖子

2249

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
40014
好友
16
蠻牛幣
3715
威望
0
注冊時間
2014-8-15
在線時間
666 小時
最后登錄
2020-2-3
QQ
板凳
2019-3-18 00:04:10 只看該作者
從零點五開始用Unity做半個2D戰棋小游戲
回復 支持 反對

使用道具 舉報

6蠻牛粉絲
1223/1500
排名
2066
昨日變化

0

主題

273

帖子

1223

積分

Rank: 6Rank: 6Rank: 6

UID
26073
好友
1
蠻牛幣
4871
威望
0
注冊時間
2014-5-21
在線時間
282 小時
最后登錄
2020-1-17
地板
2019-3-18 08:40:37 只看該作者
樓主用心了,辛苦了,贊一個
回復 支持 反對

使用道具 舉報

7日久生情
1710/5000
排名
10820
昨日變化

3

主題

1356

帖子

1710

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
310426
好友
0
蠻牛幣
2635
威望
0
注冊時間
2019-1-2
在線時間
255 小時
最后登錄
2020-2-17
5#
2019-3-18 08:42:04 只看該作者
這個可以的
回復

使用道具 舉報

4四處流浪
325/500
排名
18795
昨日變化

1

主題

141

帖子

325

積分

Rank: 4

UID
2079
好友
1
蠻牛幣
665
威望
0
注冊時間
2013-8-15
在線時間
151 小時
最后登錄
2020-1-16
QQ
6#
2019-3-18 09:04:49 只看該作者
樓主用心了,學習受益匪淺
回復 支持 反對

使用道具 舉報

7日久生情
2358/5000
排名
2248
昨日變化

0

主題

1284

帖子

2358

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
189581
好友
0
蠻牛幣
3912
威望
0
注冊時間
2016-12-5
在線時間
446 小時
最后登錄
2020-1-21
7#
2019-3-18 09:24:52 只看該作者
可以的 給力啊
回復

使用道具 舉報

7日久生情
2420/5000
排名
1960
昨日變化

3

主題

118

帖子

2420

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219633
好友
0
蠻牛幣
2036
威望
0
注冊時間
2017-4-27
在線時間
1609 小時
最后登錄
2020-1-21
8#
2019-3-18 09:50:28 只看該作者
樓主用心了,辛苦了,贊一個
回復 支持 反對

使用道具 舉報

5熟悉之中
821/1000
排名
8917
昨日變化

0

主題

439

帖子

821

積分

Rank: 5Rank: 5

UID
36289
好友
0
蠻牛幣
157
威望
0
注冊時間
2014-7-25
在線時間
250 小時
最后登錄
2020-2-13
9#
2019-3-18 10:32:17 只看該作者
從零點五開始用Unity做半個2D戰棋小游戲
回復 支持 反對

使用道具 舉報

6蠻牛粉絲
1284/1500
排名
16957
昨日變化

4

主題

775

帖子

1284

積分

Rank: 6Rank: 6Rank: 6

UID
199204
好友
2
蠻牛幣
2612
威望
0
注冊時間
2017-1-5
在線時間
465 小時
最后登錄
2020-1-17
10#
2019-3-18 13:33:51 只看該作者
謝謝分享
回復

使用道具 舉報

7日久生情
2677/5000
排名
4094
昨日變化

0

主題

1876

帖子

2677

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蠻牛幣
2406
威望
0
注冊時間
2017-11-16
在線時間
439 小時
最后登錄
2020-1-20
11#
2019-3-18 13:34:40 只看該作者
666666666666666666666666
回復 支持 反對

使用道具 舉報

6蠻牛粉絲
1058/1500
排名
5516
昨日變化

0

主題

660

帖子

1058

積分

Rank: 6Rank: 6Rank: 6

UID
300432
好友
1
蠻牛幣
1232
威望
0
注冊時間
2018-10-18
在線時間
137 小時
最后登錄
2019-12-13
12#
2019-3-18 18:30:57 只看該作者
666666666666666666
回復 支持 反對

使用道具 舉報

5熟悉之中
886/1000
排名
4112
昨日變化

1

主題

321

帖子

886

積分

Rank: 5Rank: 5

UID
245227
好友
0
蠻牛幣
1081
威望
0
注冊時間
2017-9-21
在線時間
203 小時
最后登錄
2019-12-24
13#
2019-3-20 08:53:05 只看該作者
我想問一下, 有體積的單位在六角網格中的尋路要怎樣做? 比如有個龍, 很大, 占了7個格子(普通單位半徑1 龍半徑2)
因為有阻擋的情況下要做檢測計算量很大的樣子
回復 支持 反對

使用道具 舉報

5熟悉之中
886/1000
排名
4112
昨日變化

1

主題

321

帖子

886

積分

Rank: 5Rank: 5

UID
245227
好友
0
蠻牛幣
1081
威望
0
注冊時間
2017-9-21
在線時間
203 小時
最后登錄
2019-12-24
14#
2019-3-25 09:17:23 只看該作者
你們這些回復只會喊66666嗎, 沒有人認真看帖的嗎
回復 支持 反對

使用道具 舉報

0

主題

1

帖子

1

積分

Rank: 1

UID
317576
好友
0
蠻牛幣
0
威望
0
注冊時間
2019-3-25
在線時間
0 小時
最后登錄
2019-3-25
15#
2019-3-25 18:39:43 只看該作者
樓主用心了,辛苦了,贊一個
回復 支持 反對

使用道具 舉報

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

本版積分規則

香港6合总彩透码主论坛
拍拍贷赚钱 足彩半全场怎么买 快乐10分app 新快3官网 今晚特码买什么 北单比分投注奖金怎么计算 22选5预测论坛 河南十一选五开奖结果 浙江体彩20选5开奖号码 辽宁11选5