于永勝,李效偉,許駿勝,張海程,莊緒姣
?。ㄉ綎|女子學(xué)院 信息技術(shù)學(xué)院,山東 濟(jì)南 250300)
摘要:主要介紹使用Unity3D制作躲避類(lèi)手機(jī)游戲的方法。實(shí)現(xiàn)通過(guò)手機(jī)的重力感應(yīng)控制角色躲避飛來(lái)的箭,實(shí)現(xiàn)箭的數(shù)量隨機(jī)和準(zhǔn)確度隨機(jī),實(shí)現(xiàn)攝像機(jī)自然地轉(zhuǎn)動(dòng)視角,使玩家有更舒適的視覺(jué)體驗(yàn)。實(shí)現(xiàn)箭的射出和擊中時(shí)的音效及擊中玩家后的粒子特效,使游戲的打擊感生動(dòng)。以上功能的實(shí)現(xiàn)使游戲帶給玩家更加豐富的游戲體驗(yàn)。
關(guān)鍵詞:Unity3D;JavaScript;躲避類(lèi);3D手機(jī)游戲
0引言
手機(jī)游戲已經(jīng)進(jìn)入人們的娛樂(lè)生活中,成為娛樂(lè)消遣的不可或缺的方法。三維游戲逼真的三維效果和良好的人機(jī)交互可以帶給用戶(hù)愉悅的游戲體驗(yàn)。不論是從游戲框架方面還是開(kāi)發(fā)周期方面來(lái)分析,三維游戲的制作都很難脫離游戲引擎。Unity3D是由丹麥Unity公司開(kāi)發(fā)的游戲開(kāi)發(fā)工具,Unity3D游戲引擎本身強(qiáng)大的物理特性、跨平臺(tái)發(fā)布、地形編輯、著色器、腳本、網(wǎng)絡(luò)、物理、版本控制等特性[1],以及通過(guò)Unity3D進(jìn)行作品開(kāi)發(fā)的快速高效性[2],使其受到開(kāi)發(fā)人員的歡迎。
在眾多移動(dòng)平臺(tái)游戲中,躲避類(lèi)手機(jī)游戲現(xiàn)在越來(lái)越受歡迎。躲避類(lèi)手機(jī)游戲已經(jīng)有很多經(jīng)典作品了,比如《神廟逃亡》、《小黃人快跑》等,這些游戲都是第三人稱(chēng)躲避類(lèi)而且節(jié)奏很強(qiáng)的游戲。本文游戲的操作設(shè)計(jì)比較人性化,玩家僅通過(guò)重力感應(yīng)就可以操控角色,箭的設(shè)置比較用心,箭每次飛來(lái)的數(shù)量隨機(jī),準(zhǔn)確度也隨機(jī),而且會(huì)交替到達(dá);充分模仿了人的視覺(jué)習(xí)慣,玩家獲取的視角會(huì)隨箭而變化。游戲中玩家流血效果的制作運(yùn)用了粒子系統(tǒng)[3];地形的制作用到了Unity3D本身的地形編輯工具[46];游戲運(yùn)用了碰撞檢測(cè)技術(shù)[7]。
1游戲設(shè)計(jì)
游戲設(shè)計(jì)包括游戲內(nèi)容設(shè)計(jì)和游戲功能設(shè)計(jì)。游戲內(nèi)容設(shè)計(jì)包括游戲的操作方法和游戲的細(xì)節(jié)設(shè)計(jì);游戲功能設(shè)計(jì)是對(duì)組成游戲的要素的具體設(shè)計(jì)。
1.1游戲內(nèi)容設(shè)計(jì)
游戲的操作主要通過(guò)重力感應(yīng)實(shí)現(xiàn),玩家進(jìn)入游戲后,會(huì)看到一支支箭從前方射過(guò)來(lái),每次來(lái)的箭的數(shù)量隨機(jī),準(zhǔn)確度也隨機(jī),玩家需要通過(guò)傾斜屏幕來(lái)躲避飛來(lái)的箭。
1.2游戲結(jié)構(gòu)設(shè)計(jì)
游戲的結(jié)構(gòu)包括3D森林場(chǎng)景、重力感應(yīng)控制、箭的設(shè)置、玩家動(dòng)態(tài)視角和游戲的音效與粒子特效。游戲整體設(shè)計(jì)如圖1所示。
2游戲?qū)崿F(xiàn)
游戲的實(shí)現(xiàn)包含游戲場(chǎng)景的制作、重力感應(yīng)控制、箭的設(shè)置、玩家動(dòng)態(tài)視角及音效與粒子特效。游戲場(chǎng)景的制作包括地形制作、植物的添加以及天空盒的添加;重力感應(yīng)控制用于控制角色移動(dòng);箭的設(shè)置包含箭的數(shù)量和準(zhǔn)確性的設(shè)計(jì)隨機(jī)性;玩家動(dòng)態(tài)視角是實(shí)現(xiàn)玩家在躲避箭時(shí)攝像機(jī)視角的自然變化;音效與粒子特效包含箭射出和玩家被擊中時(shí)的音效和此時(shí)的粒子效果。
2.1游戲場(chǎng)景的制作
游戲場(chǎng)景的制作包含地形和植被的制作以及天空盒的添加。地形和植被的制作包括制作高低起伏的地形和森林;天空盒的添加指給游戲場(chǎng)景加一個(gè)天空背景。
(1)地形和植被的制作
森林地形的制作包括地表材質(zhì)的添加以及制作高低起伏的地形。首先要通過(guò)創(chuàng)建terrain來(lái)創(chuàng)建一塊平地。地表材質(zhì)貼圖需要通過(guò) “Add Terrain Texture”面板添加。高低起伏的地形的制作需要先做出有一定高度的山丘,然后磨平這些山丘比較尖銳的角就可以了。
添加樹(shù)和草的方法很相近。添加樹(shù)時(shí),需要先在“add tree”面板中添加樹(shù)的模型,點(diǎn)擊add按鈕后,就可以用筆刷工具在場(chǎng)景中種樹(shù)了。添加草時(shí)只要添加做好的草的png格式的圖像就能在場(chǎng)景中用筆刷工具種草了。
?。?)天空盒的添加
天空盒的添加包括向場(chǎng)景中添加和向攝像機(jī)添加,這里采用的是向場(chǎng)景中添加。首先要導(dǎo)入天空盒資源包,然后向skybox Material拖入不同的天空盒文件就能添加不同的天空盒。
2.2重力感應(yīng)控制
重力感應(yīng)是玩家操縱游戲角色的方法。通過(guò)調(diào)用Input.acceleration.x控制角色的水平移動(dòng),調(diào)用Input.acceleration.z控制角色的上下移動(dòng)。
重力感應(yīng)實(shí)際是調(diào)用了手機(jī)的加速度感應(yīng)器,包含x、y和z軸三個(gè)方向上的加速度數(shù)值,當(dāng)手機(jī)晃動(dòng)時(shí),每個(gè)軸上的加速度數(shù)值都會(huì)發(fā)生相應(yīng)的變化。當(dāng)手機(jī)左邊高度低于右邊高度時(shí),Input.acceleration.x小于0,角色向左移動(dòng);反之同理;當(dāng)手機(jī)的屏幕有朝上的分量,Input.acceleration.z小于0,角色向上移動(dòng);反之同理。
2.3箭的設(shè)置
箭的設(shè)置包括每次飛來(lái)的箭數(shù)量隨機(jī)和每一支箭的準(zhǔn)確度隨機(jī)。
?。?)數(shù)量隨機(jī)
場(chǎng)景中需要設(shè)置多支箭,只要把每一只箭的速度設(shè)置成隨機(jī),當(dāng)箭飛到玩家身后一段距離后,將箭的位置重置到玩家前方,而且將箭的速度也一起重置,這樣,每一支箭被重置到玩家前方,這一支箭的速度就會(huì)發(fā)生變化,玩家每一次遇到的箭的數(shù)量也會(huì)變?yōu)殡S機(jī)。在每次將箭重置到玩家前方時(shí),還將箭在射向玩家方向上的坐標(biāo)設(shè)置成一定范圍的隨機(jī)值,這樣就使玩家每次遇到的箭的數(shù)量更加不確定,使本游戲的趣味性更強(qiáng),變化性更豐富。
?。?)準(zhǔn)確度隨機(jī)
當(dāng)將箭的位置重置為玩家前方時(shí),通過(guò)箭的高度和水平位置的調(diào)整可以使箭的準(zhǔn)確度不確定。將箭的高度和水平坐標(biāo)重置成一定范圍的隨機(jī)值就可以實(shí)現(xiàn)箭是隨機(jī)的;將箭的高度重置成玩家的高度、水平坐標(biāo)重置成玩家的坐標(biāo)就可以實(shí)現(xiàn)箭的追蹤,這里通過(guò)emp.transform.position.x、emp.transform.position.y和emp.transform.position.z獲取玩家的三維空間坐標(biāo)。
2.4玩家動(dòng)態(tài)視角
視角的變化主要是用LookAt來(lái)實(shí)現(xiàn)的。LookAt函數(shù)能使物體旋轉(zhuǎn)自身,使其指向目標(biāo)物體所在的位置。首先需要獲取箭在三維空間中的坐標(biāo)arrow.transform.position.x、arrow.transform.position.y和arrow.transform.position.z,然后將箭的位置作為參數(shù)帶入LookAt函數(shù)。
2.5音效與粒子特效
游戲中的音效與粒子特效的實(shí)現(xiàn)都是通過(guò)用代碼調(diào)用在場(chǎng)景中創(chuàng)建的組件實(shí)現(xiàn)的。
?。?)游戲音效
箭擊中角色所觸發(fā)的音效的實(shí)現(xiàn)方法如下。首先在場(chǎng)景中建立一個(gè)空物體hit,在hit上添加Audio Source音頻組件,然后將聲音文件拖到音頻組件的Audio Clip中,再在控制角色移動(dòng)的腳本中聲明一個(gè)AudioSource類(lèi)型的變量music,最后用music獲取剛才的聲音組件AudioSource,當(dāng)箭射中了角色時(shí),就用music.play()觸發(fā)這一段音效。
(2)粒子特效
箭擊中玩家時(shí)會(huì)觸發(fā)粒子特效,實(shí)現(xiàn)方法包括創(chuàng)建粒子系統(tǒng)物體和通過(guò)代碼控制粒子物體。
先創(chuàng)建一個(gè)粒子系統(tǒng)物體Particle System,要在Inspector中將粒子的顏色Start Color調(diào)整為紅色;粒子持續(xù)時(shí)間需要設(shè)定為確定值,這里需要將Looping的對(duì)勾去掉,再將Duration的值設(shè)定為確定值;通過(guò)Start Lifetime調(diào)整粒子存在的時(shí)間;通過(guò)Start Speed調(diào)整粒子噴出的速度;再通過(guò)調(diào)整Emission中的Rate來(lái)改變單位時(shí)間里發(fā)射的粒子數(shù)。
創(chuàng)建一個(gè)GameObject的變量particle,用particle去獲取Particle System,當(dāng)箭擊中了角色時(shí),就通過(guò)particle.particleSystem .Play ()觸發(fā)這個(gè)粒子效果。
游戲界面如圖2、圖3所示,它的實(shí)現(xiàn)要有3D的效果,而且背景必須要精美,這樣才能有足夠的吸引力。
4結(jié)論
這是一款基于Unity3D開(kāi)發(fā)平臺(tái)制作的游戲,運(yùn)用了JavaScrip腳本,實(shí)現(xiàn)了游戲場(chǎng)景的制作、重力感應(yīng)控制、箭的設(shè)置、玩家動(dòng)態(tài)視角及音效與粒子特效,但模型的制作還需要再精細(xì)一些,場(chǎng)景中可以加一些動(dòng)態(tài)的變換的元素,3D效果還可以通過(guò)暴風(fēng)墨鏡加強(qiáng)。
參考文獻(xiàn)
?。?] 王樹(shù)斌.淺析Unity3D開(kāi)發(fā)游戲流程及常用技術(shù)[J].電腦知識(shí)與技術(shù),2012,8(22):53515352.
[2] 李效偉,張海程,董樹(shù)霞,等.Unity3D引擎在軟件類(lèi)學(xué)科競(jìng)賽中的應(yīng)用[J].計(jì)算機(jī)教育,2015(24):69.
?。?] 謝韜.基于Unity3D粒子系統(tǒng)的游戲特效實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2015(16):3032.
?。?] 蔣元,蔡勝軍,何紹勇,等.基于Unity3D的虛擬地理環(huán)境構(gòu)建[J].現(xiàn)代計(jì)算機(jī),2014(22):5255.
[5] 張敏.基于Unity3D的三維地形建模[J].湖南工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2014,14(6):1618.
?。?] 王亞萍.淺析Unity3D創(chuàng)建環(huán)境地形[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2012(19):175.
[7] 李杰,楊娜,李釗.真實(shí)感游戲中的碰撞檢測(cè)方法研究[J].現(xiàn)代計(jì)算機(jī),2014(1):3537.