从零点五开始用Unity做半个2D战棋小游戏(四)
寫在最前
這次想要一個簡單且傳統的戰棋小游戲,大概的玩法是:在2D世界里創建一張由六邊形地塊組成的戰斗地圖,敵我雙方依據體力在地圖上輪流行動并向對方發動攻擊,先消滅掉所有敵人的一方將獲得勝利。
預計將分為以下幾篇(未完成前可能會調整...):
1、創建戰場(已完成)
根據預定尺寸生成戰場地圖,并隨機一些障礙物。
2、添加地圖功能 (已完成)
實現戰場格子點擊反饋,地圖導航及范圍選定。
3、添加對戰雙方(已完成)
向戰場中添加作戰單位,作戰單位輪流行動,可進行移動、攻擊。
4、加入玩家控制
玩家可控制一個戰斗單位,手動選擇移動目標及攻擊單位。
5、添加戰場UI
添加可以隨時顯示戰況的Hud、為作戰單位添加血條等。
6、擴展作戰單位
豐富作戰單位的類型,添加職業,并加入若干不同類型的技能。
7、擴展戰場地圖
豐富戰場地圖,加入地形及道具等元素。
8、規范戰斗配置
可以通過規范化的數據結構配置戰場、職業、技能、道具等。
本次的主題是:加入玩家控制。
| 目標
分配一個角色給玩家手動操作,每回合玩家有一次行動機會,行動的規則是:可從移動、攻擊、待命中選擇一次操作,當玩家選擇移動后,還可選擇一次攻擊或待命的操作;玩家也可以不進行移動直接選擇攻擊或待命,這也會結束當前行動回合。
實現后的效果如下圖:
這次要做的非常少,因為之前已經寫好了戰斗邏輯,只需要把手動操作加入即可。
| 準備工作
首先,為戰斗單位設置一個是否為手動操作的標記。
其次,為戰斗單位設定一個手動操作狀態,標記這個戰斗單位是否可以移動、攻擊。
最后,新增一種新的戰斗單位操作狀態和動作,分別是等待玩家操作狀態及等待手動操作的動作。
當輪到玩家操作時,戰斗的單位會顯示綠色邊框。
| 手動操作的邏輯
大概思路是:戰場維護一個戰斗單位的行動隊列,每當輪到一個單位行動時,如果這個單位是自動操作的,那么它會自己決定目標,移動并攻擊,上回我們將二手手游賬號買號平臺數據與渲染進行了分離,因此它只是產生了一次行動數據(Action)。
如果這個單位是手動操作的,那它會產生一個等待手動輸入的行動數據,同時返回等待玩家操作狀態。
當戰場發現自己收到了一個等待玩家操作的狀態,就明白其實剛才的家伙并沒有生成任何有意義的戰斗數據,因此它必須通知自己的渲染器(那個用來顯示的模塊,上回我們介紹過):嘿,幫我問問他到底想干嘛?
渲染器通過UI與玩家進行交互,獲得玩家要移動、攻擊或是待命等“有用”的戰斗信息后,再回頭通知戰場“這個家伙已經行動過了”,戰場再讓下一個單位行動。
簡易的行動流程圖
由于下一回我們才會加入戰場UI,這里我們先用Unity自帶的GUI代替。
用GUI顯示一個列表,接收玩家的操作
| 寫在最后
2018年瞬間就過去了,回想年初時豪情萬丈列下的“2018年必做之十大事”,如今...額...都不敢看清單上有什么...
過去的就讓他過去吧...2019年,請自己繼續加油吧。
初心易得,始終難求。
下回見。
總結
以上是生活随笔為你收集整理的从零点五开始用Unity做半个2D战棋小游戏(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零点五开始用Unity做半个2D战棋小
- 下一篇: 从零点五开始用Unity做半个2D战棋小