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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2024/9/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零点五开始用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的決策系統,讓它的表現更具期待性,使戰斗變得更加有趣。

此外,我邀請了我的好友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的不同,我們下期將嘗試著解決這個問題。

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

愿不忘初心。

下回見。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

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