用Unity做半個2D戰棋小遊戲(四):加入玩家控制

遊資網發表於2019-03-14
寫在最前

這次想要一個簡單且傳統的戰棋小遊戲,大概的玩法是:在2D世界裡建立一張由六邊形地塊組成的戰鬥地圖,敵我雙方依據體力在地圖上輪流行動並向對方發動攻擊,先消滅掉所有敵人的一方將獲得勝利。

預計將分為以下幾篇:

1、建立戰場

根據預定尺寸生成戰場地圖,並隨機一些障礙物。

2、新增戰場地圖功能

實現戰場格子點選反饋,地圖導航及範圍選定。

3、新增對戰雙方

向戰場中新增作戰單位,作戰單位按照一定規則輪流行動,可進行移動、攻擊等。

4、加入玩家控制

新增可以隨時顯示戰況的Hud、為作戰單位新增血條等。

5、新增常用的介面

建立介面管理器,加入一些常用的介面。

6、新增常用的戰場顯示

為戰鬥單位新增血條,加入傷害文字顯示。

7、擴充套件作戰單位

豐富作戰單位的型別,新增職業,並加入若干不同型別的技能。

8、擴充套件戰場地圖

豐富戰場地圖,加入地形及道具等元素。

9、規範戰鬥配置

可以通過規範化的資料結構配置戰場、職業、技能、道具等。

本次的主題是:加入玩家控制。

專案程式碼會上傳至我的Github:https://github.com/elsong823/HalfSLG中,有興趣的同學請自取。

目標

分配一個角色給玩家手動操作,每回合玩家有一次行動機會,行動的規則是:可從移動、攻擊、待命中選擇一次操作,當玩家選擇移動後,還可選擇一次攻擊或待命的操作;玩家也可以不進行移動直接選擇攻擊或待命,這也會結束當前行動回合。

實現後的效果如下圖:

用Unity做半個2D戰棋小遊戲(四):加入玩家控制


這次要做的非常少,因為之前已經寫好了戰鬥邏輯,只需要把手動操作加入即可。

準備工作

首先,為戰鬥單位設定一個是否為手動操作的標記。

用Unity做半個2D戰棋小遊戲(四):加入玩家控制


其次,為戰鬥單位設定一個手動操作狀態,標記這個戰鬥單位是否可以移動、攻擊。

用Unity做半個2D戰棋小遊戲(四):加入玩家控制


最後,新增一種新的戰鬥單位操作狀態和動作,分別是等待玩家操作狀態及等待手動操作的動作。

用Unity做半個2D戰棋小遊戲(四):加入玩家控制


用Unity做半個2D戰棋小遊戲(四):加入玩家控制


當輪到玩家操作時,戰鬥的單位會顯示綠色邊框。

手動操作的邏輯

大概思路是:戰場維護一個戰鬥單位的行動佇列,每當輪到一個單位行動時,如果這個單位是自動操作的,那麼它會自己決定目標,移動並攻擊,上回我們將資料與渲染進行了分離,因此它只是產生了一次行動資料(Action)。

如果這個單位是手動操作的,那它會產生一個等待手動輸入的行動資料,同時返回等待玩家操作狀態。

當戰場發現自己收到了一個等待玩家操作的狀態,就明白其實剛才的傢伙並沒有生成任何有意義的戰鬥資料,因此它必須通知自己的渲染器(那個用來顯示的模組,上回我們介紹過):嘿,幫我問問他到底想幹嘛?

渲染器通過UI與玩家進行互動,獲得玩家要移動、攻擊或是待命等“有用”的戰鬥資訊後,再回頭通知戰場“這個傢伙已經行動過了”,戰場再讓下一個單位行動。

用Unity做半個2D戰棋小遊戲(四):加入玩家控制

簡易的行動流程圖


由於下一回我們才會加入戰場UI,這裡我們先用Unity自帶的GUI代替。

用Unity做半個2D戰棋小遊戲(四):加入玩家控制

用GUI顯示一個列表,接收玩家的操作


寫在最後

2018年瞬間就過去了,回想年初時豪情萬丈列下的“2018年必做之十大事”,如今...額...都不敢看清單上有什麼...

用Unity做半個2D戰棋小遊戲(四):加入玩家控制


過去的就讓他過去吧...2019年,請自己繼續加油吧。

初心易得,始終難求。

下回見。


作者:/zt枸杞憂天
來源:騰訊遊戲學院
原地址:http://gad.qq.com/article/detail/288998


相關文章