从零点五开始用Unity做半个2D战棋小游戏(一)
好久不見。
這是第17篇與游戲開發有關的文章。
也是“從零點五開始系列”第二輯的開始。
| 寫在最前
這次想要做的一個小游戲,或者說一個小Demo,其實是一個簡單且傳統的戰棋戰斗場景。初步的設計是:在2D世界里創建一張由六邊形地塊組成的戰斗地圖,敵我雙方依據體力在地圖上輪流行動并向對方發動攻擊,先消滅掉所有敵人的一方將獲得勝利。
這一輯將比上一輯的內容更簡單,但完成后會是一個功能較完整且可以玩耍的Demo。
我使用的Unity版本是2018.2.7,但是其實并沒有用到2018的任何新功能。
預計將分為以下幾篇:
1、創建戰場
根據預定尺寸生成戰場地圖,并隨機一些障礙物。
2、添加對戰雙方
向戰場中添加作戰單位,作戰單位可被點選,并進行移動。
3、戰場邏輯
作戰雙方按照順序依次行動,可進行移動、攻擊。
4、添加戰場UI
添加可以隨時顯示戰況的Hud、為作戰單位添加血條等。
5、擴展作戰單位
豐富作戰單位的類型,添加職業,并加入若干不同類型的技能。
6、擴展戰場地圖
豐富戰場地圖,加入地形及道具等元素。
7、規范戰斗配置
可以通過規范化的數據結構配置戰場、職業、技能、道具等。
本次的主題是創建戰場。
| 目標
生成一個規定尺寸的戰場,戰場上的格子均為六邊形,并且暫定兩種格子類型:普通格子和障礙格子。
| 在開始之前我做了以下事情
1.創建了新的工程。
2.新建場景并保存在場景文件夾下。
3.刪除默認創建的平行光,調整場景光照設置,棄用了天空盒等。
4.將相機調整為正交相機。
因為是從零點五開始系列,認為讀者有一定的Unity引擎使用基礎,就不對這些操作進行介紹了。
| 創建戰場地圖
我沒有采用把數據和顯示捆綁在一起的做法,而是將數據和顯示分離。
我的思路是用一個戰斗創建器來創建戰斗,一場完整的戰斗信息至少應包含地圖及對戰雙方的信息。而Unity搭建的戰斗場景則可以理解為一場戰斗的顯示器。
| 數據部分(主要)
戰斗數據:地圖尺寸,包含所有格子的二維數組。
格子數據:格子類型,所在行列,所在空間坐標。
| 顯示部分(主要)
戰場:一個用于組織所有格子對象的節點對象。
格子對象:一個能顯示六邊形瓦片的2D渲染器,并根據格子類型改變顏色。
當需要將戰斗表現出來時,需要將以上數據裝入一個用于顯示的“戰場”,這個戰場就是在Unity世界里創建的。
| 在Unity中創建戰場
目前戰場的結構還非常簡單,只需要一個組織格子單位的節點。
| 創建格子
創建一個格子腳本,并掛在一個新創建的空對象上。
為這個二手手游賬號買賣添加一個子對象,稱之為瓦片,用來顯示一個六邊形。
因為這里我只想做一個2D的Demo,因此我們只需要一個SpriteRenderer組件即可。
使用預先準備的一張六邊形圖片作為地塊顯示,一個格子對象就做好了。
為了區分普通和障礙,暫定普通格子為白色,障礙格子為灰色。
戰場加載后節點的狀態。
| 部分代碼
鋪設普通格子
隨機放一些障礙格子
戰場根據格子信息,顯示格子
格子根據不同類型顯示不同顏色
初始隨機多張地圖,并切換查看。
| 寫在最后
至此,難度最低的第一篇已經完成。
感謝您能讀到這里。
愿不忘初心。
下回見。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的从零点五开始用Unity做半个2D战棋小游戏(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入门顶点动画纹理的实例化绘制
- 下一篇: 从零点五开始用Unity做半个2D战棋小