陳陽
(南京大學(xué)金陵學(xué)院信息科學(xué)與工程學(xué)院 江蘇省南京市 210089)
游戲雖然益處多但是游戲的開發(fā)卻并不是那么容易,工作繁瑣,門檻高等一系列問題阻礙著游戲的發(fā)展,而Unity3D 的出現(xiàn)大大改變了這一現(xiàn)狀,大到大型3D 游戲,小到手機(jī)2D 小游戲都可以使用Unity 來開發(fā),Unity 有著跨平臺性,一次編碼可在多個(gè)平臺同時(shí)上線,操作簡單,以及省時(shí)省力成為了許多開發(fā)商的最優(yōu)選擇。
游戲界面分為三類,開始界面,游戲中界面,和結(jié)束界面。界面的設(shè)計(jì)相對簡單,重點(diǎn)放在游戲的內(nèi)容,游戲界面流程圖如圖1所示。
1.2.1 開始界面的設(shè)計(jì)
游戲開始界面是一張比較炫酷的坦克大戰(zhàn)海報(bào),上面分布著兩個(gè)按鈕,一個(gè)是開始按鈕,另一個(gè)是游戲規(guī)則介紹按鈕,開始按鈕點(diǎn)擊后進(jìn)入游戲界面,規(guī)則按鈕點(diǎn)擊后進(jìn)入規(guī)則介紹界面。游戲介紹界面分布著三個(gè)按鈕,和圖文講解,界面清晰內(nèi)容一目了然,左右箭頭則是四頁規(guī)則翻頁使用,右下角是一個(gè)返回按鈕,點(diǎn)擊可以返回游戲開始界面。Play 下的OnClick 及代碼如圖2所示。
1.2.2 游戲中界面的設(shè)計(jì)
游戲中的界面設(shè)計(jì)主要說的是坦克身上的畫布以及上面的內(nèi)容。
首先在坦克上添加一個(gè)畫布(Canvas),然后在畫布中添加三個(gè)silder 分別是HealthSlider,AimSlider,F(xiàn)lash,分別是生命的顯示,蓄力攻擊箭頭的顯示和閃現(xiàn)技能的顯示,每一個(gè)slider 都有FillArea 和Fill,分別為填充的區(qū)域和填充的內(nèi)容,生命的填充區(qū)域是一個(gè)圓環(huán),填充內(nèi)容是綠色,攻擊箭頭的填充區(qū)域是長方形,填充內(nèi)容就是箭頭本身,閃現(xiàn)技能填充區(qū)域?yàn)檎叫危畛鋬?nèi)容為閃現(xiàn)技能本身。
Slider 中的value 是一個(gè)滑動(dòng)條,改變其量可以改變填充物的填充程度,這就是實(shí)現(xiàn)生命顯示、箭頭顯示和技能CD 顯示的關(guān)鍵所在。當(dāng)Value 為0 時(shí)填充物為空,當(dāng)Value 為1 時(shí)填充物為滿。
fill 中的image 下的image type 是控制填充物填充的方式,生命和技能填充的方式相同都是按照360 旋轉(zhuǎn)填充所以將fill method 選擇為Redial360,而攻擊蓄力的顯示則不同是同一方向的出現(xiàn)和消失,所以選擇的是sliced。
1.2.3 游戲結(jié)束界面的設(shè)計(jì)結(jié)束界面制作的比較簡單,使用的只是text 的顯示和點(diǎn)擊。
當(dāng)玩家一方的坦克被擊中扣血死亡時(shí),屏幕中央顯示出圖2-2-7的文字,并且Restart 是可以點(diǎn)擊的,點(diǎn)擊之后返回到開始界面,winner 后面的文字內(nèi)容根據(jù)坦克的死亡而改變,Player1 死亡則顯示W(wǎng)inner:Player2,Player2 死亡則顯示W(wǎng)inner:Player1。將這些文字賦在相機(jī)上的原因也很簡單,因?yàn)槲覀冎谱鞯南鄼C(jī)是可以根據(jù)兩坦克的距離改變視距,如果將文字放在其他地方則無法做到坦克死亡時(shí)文字顯示在視野的正中央,從而影響我們的觀察。

圖1:游戲界面流程圖

圖2:Play 下的OnClick 及代碼

圖3:游戲場地鳥瞰圖
游戲場地鳥瞰圖如圖3所示,游戲場地內(nèi)的物體用3dsMax 制作后拖進(jìn)Unity3d 內(nèi)進(jìn)行布局,制作場地的過程也是十分漫長,需要我們用3dsMax 一點(diǎn)點(diǎn)將場景中的物體制作出來并且做到符合實(shí)際,這樣做出的游戲更加真實(shí)。當(dāng)然這些物體制作出來時(shí)是沒有顏色的,就需要我們制作材質(zhì)球?yàn)檫@些預(yù)制體上色。
場地內(nèi)包含燈光,用于照亮整個(gè)場地,還有仙人掌、巖石、樹、建筑、地板等物體,這些物體都是3dsMax 制作的,并用材質(zhì)球賦了顏色,且均添加了剛體組件,使得坦克可以和這些障礙發(fā)生碰撞。場地還賦予了生成血包以及護(hù)盾的腳本,并將血包和護(hù)盾作為預(yù)制體賦值到腳本中。生成血包和護(hù)盾時(shí),給予一定的力,使得他們在原地旋轉(zhuǎn)起來便于觀察也使得物體賦予了生命。
每一個(gè)游戲都有自己獨(dú)特的視野角度,而我的這款坦克大戰(zhàn)視野也比較獨(dú)特,因?yàn)閳龅卮笮〉木壒剩绻麑⒄麄€(gè)場地都放置在視野之中,場地中的物體會顯示非常小,不利于觀看和游戲,這就需要我們來控制相機(jī)的視距來做到當(dāng)兩位玩家操控坦克時(shí),我們的視野也隨之而改變。將玩家的坦克預(yù)制體賦予腳本之上,用于監(jiān)控坦克之間的距離來計(jì)算視距大小。當(dāng)兩坦克距離越遠(yuǎn),相機(jī)視距離得也越遠(yuǎn),坦克距離越近,相機(jī)視距離得也越近。當(dāng)兩坦克距離大于或者小于一定值時(shí),相機(jī)視距便會固定不動(dòng)。我還將游戲的背景音樂放置在相機(jī)之上,當(dāng)游戲運(yùn)行時(shí)背景音樂自動(dòng)響起。
2.3.1 主角移動(dòng)設(shè)計(jì)
這便是本款游戲的兩位主角,玩家1 和玩家2,兩個(gè)坦克的控制方式,攻擊方式,以及血量的減少增加方式均是相同的,所以二者使用的是相同的腳本,用代碼將坦克進(jìn)行編號來區(qū)分二者。這樣減少了代碼的數(shù)量也減輕了機(jī)器運(yùn)行的壓力。坦克行駛和代碼如圖4所示。
2.3.2 主角攻擊設(shè)計(jì)
主角的攻擊方式分為兩種,一種是普通攻擊,一種是蓄力攻擊普通攻擊和蓄力攻擊的區(qū)別在于兩者的攻擊距離不同,兩種攻擊都是一種拋物線的方式來擊出,坦克炮口處有一個(gè)空物體45 度斜向上,每次按下攻擊按鈕時(shí)子彈在這個(gè)空物體處生成并跟隨物體45度向上傾斜,然后賦予子彈一個(gè)向前的力讓子彈飛出,子彈受到重力的作用會形成一個(gè)拋物線的軌跡。
2.3.3 主角的生命設(shè)計(jì)
坦克生命控制的腳本中,TankExplosion 是坦克被銷毀時(shí)產(chǎn)生的爆炸特效,TankBreakAudio 是坦克被銷毀時(shí)爆炸的音效。HpSilder是血量圓環(huán)Fill 是圓環(huán)的圖片。CureP 是治療時(shí)產(chǎn)生的特效預(yù)制體,moxinghudun 是護(hù)盾的預(yù)制體。
坦克的生命顯示為一個(gè)圓環(huán)在坦克正下方,當(dāng)坦克受到傷害后血量低于一定值時(shí)血條顏色會發(fā)生相應(yīng)改變,血量高于75%是呈現(xiàn)綠色,表示坦克健康,當(dāng)血量在75%-25%之間時(shí)顏色變成黃色,表示坦克血量較低,當(dāng)血量低于25%時(shí)顏色變?yōu)榧t色,表示坦克處于危險(xiǎn)中。如圖5所示。
當(dāng)坦克觸碰到場地中產(chǎn)生的血包時(shí)會恢復(fù)一定量的生命值,并產(chǎn)生恢復(fù)生命特效。也會根據(jù)血量的值改變相應(yīng)的顏色。而當(dāng)玩家觸碰到護(hù)盾時(shí)則會為玩家產(chǎn)生一個(gè)可以保護(hù)坦克三次不受傷害的護(hù)盾,并且每次受到攻擊,會減少一個(gè)護(hù)盾。護(hù)盾和血包都是隨時(shí)、隨地出現(xiàn)在場地中,并且一段時(shí)間未被坦克觸碰會自動(dòng)銷毀。如圖6、圖7所示。
2.3.4 主角技能設(shè)計(jì)
當(dāng)游戲開始的時(shí)候,主角的主動(dòng)技能閃現(xiàn)開始CD,并在坦克一側(cè)顯示閃現(xiàn)技能的CD 效果,當(dāng)閃現(xiàn)技能圖標(biāo)完全顯示的時(shí)候表明技能已經(jīng)CD 完成可以使用,使用閃現(xiàn)技能之后,坦克會往前位移一段距離并且可以穿越障礙,并在使用技能的位置生成一個(gè)閃光特效,然后重置CD 和技能圖標(biāo)。因?yàn)殚W現(xiàn)技能的冷卻時(shí)間比較長,所以釋放的時(shí)機(jī)顯得比較重要,閃現(xiàn)技能可以用來穿越障礙,比如被敵人追到死角的時(shí)候可以用閃現(xiàn)穿越障礙逃生。如圖8所示。
2.3.5 主角死亡設(shè)計(jì)
當(dāng)坦克受到傷害,并且血量降低到0 以下時(shí),坦克死亡,并在原地生成一個(gè)爆炸特效和音效,并在此時(shí)取消相機(jī)的控制和坦克的控制,進(jìn)入結(jié)束頁面,結(jié)束頁面顯示著勝利的玩家以及一個(gè)重新開始的按鈕,點(diǎn)擊重新開始按鈕后,進(jìn)入新一輪的競技中。

圖4:坦克行駛和代碼

圖5:血量改變

圖6:恢復(fù)特效

圖7:護(hù)盾

圖8:技能展示
因?yàn)槎嗄陮τ螒虻臒釔郏陨碛质怯?jì)算機(jī)專業(yè),讓我對這次的課題充滿了想法,選擇了許多人童年的回憶“坦克大戰(zhàn)”。這次設(shè)計(jì)我使用的是Unity 軟件和C#語言,通過學(xué)校教學(xué)與自我拓展摸索,在整個(gè)過程中鍛煉了我自學(xué)的能力,也學(xué)到了新知識和新技術(shù)。讓我一定程度的了解游戲開發(fā)的過程,和游戲開發(fā)的不容易,同時(shí)也明白了堅(jiān)持的重要性。不管是一名學(xué)生還是一位社會人士,自學(xué)都是非常重要的一種技能,這次的游戲設(shè)計(jì)讓我學(xué)習(xí)到了許多unity的知識我相信在將來的工作中也會是一種有效的技能。