塔防游戲相信大家并不陌生,幾個主要元素如下:
1、敵方士兵
2、我方防御塔
3、我方主城
emmmmmmm好像就沒了。
人越狠,話越不多。不多說,接下來我們一步步把這幾個功能做完。
素材準(zhǔn)備:
網(wǎng)上隨便找一些資源就行,不一定要和我一樣。這里再次強調(diào):
網(wǎng)上獲取的資源一定不能用作商業(yè)用途?。。。。?!
就本工程而言,資源有一下幾種:
敵人2個,分別擁有移動,攻擊,待機,死亡四種動畫
防御塔3個,擁有待機,攻擊兩種動畫
人形防御塔可還行
主城1個,主地形1組(內(nèi)含各種雜草亂石)
敵人地形(敵人能用來走的路)1種,防御塔地形(防御塔能放置的地方)1種,箭矢1個
場景搭建:
先從簡單的功能做起:讓敵人從生成點走到主城,看見主城就攻擊。
搭建一個簡單場景:
為了檢測敵人尋路,最好是能轉(zhuǎn)彎的道路
敵人和主城有一個都有血量的屬性,都會被攻擊,這里為它們做能顯示在頭上的血條。
以主城為例,在主城的子節(jié)點層創(chuàng)建一個Sprite做黃血條,設(shè)為黃色,取名“BloodStrip”,調(diào)整好大?。?/p>
然后在BloodStrip的子節(jié)點層創(chuàng)建一個空物體,取名“Hp”,在Hp的子節(jié)點層再創(chuàng)建一個Sprite做紅血條,名字“Red”,設(shè)為紅色,大小和黃血條一樣,把黃血色覆蓋:
接下來就移動紅血條位置,讓它左邊邊緣與父物體Hp的Y軸重合:
然后再將Hp往右移動,讓Y軸與黃血條左邊緣重合(紅血條剛好覆蓋黃血條):
這樣我們只需要設(shè)置H的X軸大小,就可以控制紅血條長度了
***這里請初學(xué)者注意,如果你選取的紅血條圖片資源不是純色的、是有其他花紋的,則不能用這個方法。原因很簡單,這種方法會把花紋拉長或壓扁。大家可以下來想一下:這種情況下應(yīng)該怎樣來設(shè)置?
后面在代碼中只需要將當(dāng)前血量與總血量的比值賦給Hp的X軸,就可以將血量信息顯示在界面上了。敵人血條做法一樣。
做好后讓BloodStrip處于禁用狀態(tài),受傷后才顯示(這是游戲UI顯示的一個約定俗成的規(guī)則)。
代碼編寫:
為主城與敵人創(chuàng)建一個基類腳本Character:
創(chuàng)建主調(diào)腳本:用于游戲初始化和記錄游戲死亡,掛在一個場景物體上:
創(chuàng)建主城腳本,繼承自Character腳本:
敵人的腳本也繼承自Charater,除了受傷和死亡之外還能攻擊與移動:
重點在移動方法上。因為敵人的移動帶有尋路功能,這里沒有采取Unity自帶的NavMeshAgent,而是用腳本來實現(xiàn),主要思路仿照盲人的行進方式,利用射線充當(dāng)導(dǎo)盲棍,發(fā)現(xiàn)前方道路中斷再從兩邊找新的行進路線:
拐杖就是射線
要利用好這個思路,場景中道路的搭建也有一定要求,道路都要掛上MeshCollider組件,方便射線檢測。
所有道路的Z軸指向路線前進方向
道路的物體層設(shè)置為“Way”,主城也掛上碰撞器,物體層設(shè)為“City”。
在敵人模型身上創(chuàng)建一個空物體為眼睛,取名為“Eye”,主要作用是從此為射線起始點,位置合適即可,注意,因為所有敵人都用的相同腳本,所以所有敵人的眼睛高度距離地面相同:
正面看這些模型真特么驚悚
當(dāng)然每個敵人也請掛上碰撞器和剛體以及Animator組件:
創(chuàng)建一個敵人狀態(tài)機:
重寫初始化方法:
編寫移動方法,并在Update中調(diào)用:
暫時把初始化方法放在Start中調(diào)用(后面我們會在創(chuàng)建的時候初始化),然后設(shè)置好血量、視野、速度、傷害,主城也設(shè)置好血量:
先來看下尋路運行效果:
藍線檢測前方道路,紅圈檢測周圍道路
尋路沒有問題了,將攻擊動畫設(shè)為循環(huán)播放,然后將攻擊方法放入攻擊動畫事件中,敵人看到主城就會自動攻擊了:
敵人主要功能就已經(jīng)完成。現(xiàn)在我們來做敵人生成器。
塔防游戲的敵人生成方式一般都是比較有規(guī)律的,比如先生成一組a敵人,跟著生成一組b敵人,每組敵人的生成間隔也恒定(當(dāng)然,讀者也可以自己嘗試更豐富的出兵方法,比如讓“某些特定敵人的血量減到某個閾值”作為觸發(fā)條件等等):
為了生成方便,我們來做一個定時器,可以重復(fù)并規(guī)律地調(diào)用一個生成敵人方法:
把所有敵人放入一個路徑中,創(chuàng)建一個空物體做敵人生成器,放在敵人生成點,創(chuàng)建腳本掛上去:
做到這一步就可以像演示視頻中那樣點擊按鈕出兵了。