从零点五开始用Unity做半个2D战棋小游戏(七)
這是第24篇與游戲開發有關的文章。
| 寫在最前
這次想要一個簡單且傳統的戰棋小游戲,大概的玩法是:在2D世界里創建一張由六邊形地塊組成的戰斗地圖,敵我雙方依據體力在地圖上輪流行動并向對方發動攻擊,先消滅掉所有敵人的一方將獲得勝利。
預計將分為以下幾篇(未完成前可能會調整...):
1、創建戰場(已完成)
根據預定尺寸生成戰場地圖,并隨機一些障礙物。
2、添加地圖功能 (已完成)
實現戰場格子點擊反饋,地圖導航及范圍選定。
3、添加對戰雙方(已完成)
向戰場中添加作戰單位,作戰單位輪流行動,可進行移動、攻擊。
4、加入玩家控制(已完成)
玩家可控制一個戰斗單位,手動選擇移動目標及攻擊單位。
5、添加常用的界面(已完成)
建立界面管理器,加入一些常用的界面。
6、添加常用的戰場顯示(已完成)
為戰斗單位添加血條,加入傷害文字特效。
7、擴展作戰單位
豐富戰斗元素,加入并實現手動釋放不同類型的技能。
8、加入AI系統
建立簡單的AI系統。
9、擴展戰場地圖
豐富戰場地圖,加入地形及道具等元素。
10、規范戰斗配置
可以通過規范化的數據結構配置戰場、職業、技能、道具等。
本次的主題是:豐富戰斗元素,加入若干不同類型的技能。
| 目標
加入一些常見、簡單的技能類型,如:
1、單體遠程
對遠程一個敵方單位進行攻擊。
遠程攻擊單體目標
2、單體遠程帶范圍效果
對遠程一個敵方單位進行攻擊,同時對其周圍一定距離內所有敵方單位造成相同傷害。
單體遠程帶范圍效果
3、以自身為中心的范圍技能
以自身為中心,對周圍一定距離內所有敵方單位造成傷害。
以自身為中心的范圍技能
4、遠程指定范圍的技能
遠程指定攻擊一定范圍內的所有敵方單位。
遠程指定范圍的技能
5、單體恢復
恢復自己或一個友方單位的HP值。
單體恢復
需要提前聲明的是,本文主要記錄的是在手動釋放技能時,操作展示上的一些關鍵事項;技能計算的邏輯請見代碼;AI釋放不同類型技能也將放在下回。
| 增加效果顯示
我為地塊、戰斗單位設置了不同的顯示狀態以便更直觀的獲取操作反饋。
戰斗單位、地塊的顯示狀態
無論是地塊還是戰斗單位,都是通過簡單的狀態機來實現不同顯示效果的切換。
| 地塊的效果顯示
由于地塊會包含多種狀態共存的情況,比如上面的二手手機靚號遠程范圍攻擊:某些地塊會被同時設置為技能釋放范圍和技能效果覆蓋范圍。
部分地塊既在技能釋放范圍內,又在技能效果范圍內
為了解決這種情況,地塊的顯示狀態判斷使用了位運算。
使用位運算來控制顯示狀態
| 戰斗單位的效果顯示
戰斗單位不涉及多種狀態同時存在的情況,處理起來就簡單多了。
戰斗單位的顯示狀態
| 技能信息
與之前的界面配置一樣,我仍然使用ScriptableObject作為技能信息的載體,因為這樣實現起來最快捷。
記錄技能信息的ScriptableObject
由于目前包含的技能類型較少,數值計算也十分簡單,因此只需要少量的屬性就足夠了,這里就不再贅述了。
| 手選技能的操作規則
其實,這些技能的計算邏輯并不復雜,麻煩一些的是不同類型技能在手動操作時的規則及顯示邏輯。
我在這里制定了簡單的操作規則:
1、對于單體近戰、單體遠程、單體恢復技能:
選擇技能后顯示技能釋放范圍,標出范圍內外的單位;點擊可選單位則釋放技能。
對單體目標技能的操作
2、對于單體遠程帶范圍效果的技能:
選擇技能后顯示技能釋放范圍,標出范圍內外的單位;點擊可選單位后展示技能效果范圍,標出范圍內的單位;再次點擊該單位后釋放技能。
對單體遠程帶范圍效果技能的操作
3、對于以自身為中心的范圍技能:
選擇技能后顯示技能效果范圍,標出范圍內外的單位;點擊任意單位后釋放技能。
對以自身為中心的范圍技能的操作
4、對于遠程指定范圍的技能:
選擇技能后顯示技能釋放范圍;點擊范圍內任意地塊,顯示技能效果范圍,標出范圍內外的單位;再次點擊相同地塊釋放技能。
對遠程指定范圍技能的操作
5、操作任意類型技能時,點擊鼠標右鍵為取消。
| 簡單的技能分析
為了實現上述操作邏輯,我在點擊使用技能后加入了一個簡單的技能分析步驟,它會遍歷場上所有戰斗單位,并根據釋放者及技能類型將他們劃分為可被選中的、隊伍不符的、距離不符的和狀態異常的四類,這樣后面的操作邏輯實現起來就簡單多了。
點擊使用技能后的流程
技能分析結果
| 增加技能操作界面
我微調了戰斗單位的操作面板,為攻擊按鈕增加了一個選擇技能的二級面板。添加了一個一級面板透明處理的小設置來區分層級;以及在不同屏幕位置點擊時的面板彈出位置的優化,以防止面板彈出到屏幕以外無法操作。由于這不是本次介紹的重點,就不在這贅述了。
技能選擇面板
| 寫在最后
至此,擴展作戰單位篇就介紹到這了。這里只是實現了手動釋放一些類型簡單的技能,AI目前仍然只會使用默認的近戰攻擊,后面將會嘗試建立一套簡單的AI系統,來實現由AI釋放各類的技能,讓戰斗變得更有趣一些。
但是目前還沒想好怎么做,而且最近又很忙,因此下回可能會拖得久一些吧。
愿不忘初心。
下回見。
總結
以上是生活随笔為你收集整理的从零点五开始用Unity做半个2D战棋小游戏(七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零点五开始用Unity做半个2D战棋小
- 下一篇: 从零点五开始用Unity做半个2D战棋小