薛玉倩+李麗平
【摘 要】 隨著移動(dòng)設(shè)備性能的快速提升,移動(dòng)通信網(wǎng)絡(luò)速度的不斷提高,致使移動(dòng)設(shè)備迅速普及。而游戲已成為移動(dòng)端用戶的裝機(jī)必備。移動(dòng)端游戲開(kāi)發(fā)已成為熱門(mén)行業(yè),但移動(dòng)端的系統(tǒng)平臺(tái)存在多樣性,成為移動(dòng)端游戲開(kāi)發(fā)的瓶頸。采用Unity3D進(jìn)行游戲開(kāi)發(fā),可以實(shí)現(xiàn)Unity3D移動(dòng)跨平臺(tái)游戲。
【關(guān)鍵詞】 Unity3D 移動(dòng)設(shè)備 4G 跨平臺(tái)
1 引言
近年來(lái),隨著4G的出現(xiàn),移動(dòng)互聯(lián)網(wǎng)的網(wǎng)速大幅度提升,移動(dòng)互聯(lián)網(wǎng)發(fā)展速度異常迅猛。移動(dòng)設(shè)備的硬件也以極為迅速的速度在發(fā)展。移動(dòng)設(shè)備的CPU由原先的單核發(fā)展到現(xiàn)在的四核,存儲(chǔ)空間也由以前的幾K發(fā)展到128G。移動(dòng)設(shè)備已成為人們?nèi)粘I?、辦公等主要使用的終端。而游戲已成為移動(dòng)設(shè)備的裝機(jī)必備,近幾年游戲產(chǎn)業(yè)也在發(fā)生著巨變,大型客戶端游戲在火爆幾年后,網(wǎng)頁(yè)游戲又快速發(fā)展,玩家數(shù)量快速增長(zhǎng)。但隨著移動(dòng)設(shè)備的普及,移動(dòng)平臺(tái)上的高質(zhì)量3D游戲已成為現(xiàn)實(shí),這樣大量的玩家必然被吸引到移動(dòng)端。另外,越來(lái)越多的移動(dòng)平臺(tái)也加入了競(jìng)爭(zhēng),比如ios、Android、Windows Phone、Black Berry,這就帶來(lái)了移動(dòng)端游戲跨平臺(tái)的問(wèn)題。Unity3D是由Unity Technologies開(kāi)發(fā)的跨平臺(tái)的,使游戲開(kāi)發(fā)者能輕松完成高運(yùn)行效率游戲開(kāi)發(fā)的游戲引擎。Unity3D具有異常強(qiáng)大的功能,除了可以跨平臺(tái)以外,還能解決由于屏幕尺寸不同、操作方式差異,硬件條件相差較大等問(wèn)題,大幅度提高了游戲的可移植性[1]。
2 游戲功能設(shè)計(jì)
目前,移動(dòng)設(shè)備游戲的開(kāi)發(fā)非?;鸨?,越來(lái)越多的人都在空閑時(shí)間玩手機(jī),這也是移動(dòng)端游戲受歡迎的原因之一。所以移動(dòng)端手機(jī)的設(shè)計(jì)要操作簡(jiǎn)單、便捷,因此采用關(guān)卡式,隨時(shí)可以停下來(lái)。本文采用Unity3D開(kāi)發(fā)坦克射擊游戲,靠炮擊目標(biāo)數(shù)來(lái)獲得相應(yīng)分?jǐn)?shù) [2]。
3 基于Unity3D移動(dòng)跨平臺(tái)游戲的實(shí)現(xiàn)
3.1 游戲場(chǎng)景
射擊類的游戲其都會(huì)擁有較大的場(chǎng)景,因此其場(chǎng)景無(wú)法在游戲界面中全面顯示,因此要給游戲界面添加一個(gè)UV動(dòng)畫(huà)。在游戲中,游戲背景是一直向下移動(dòng),主角在不停的移動(dòng),從而使玩家感覺(jué)整個(gè)畫(huà)面在移動(dòng),因此有一種動(dòng)態(tài)視覺(jué)效果。
動(dòng)態(tài)背景的原理就是用一張圖片進(jìn)行循環(huán)滾動(dòng),從而實(shí)現(xiàn)動(dòng)畫(huà)過(guò)程,為了實(shí)現(xiàn)背景的循環(huán)滾動(dòng),需將其循環(huán)播放模式設(shè)置為L(zhǎng)oop[3]。
3.2 主角移動(dòng)與射擊的實(shí)現(xiàn)
在游戲中主角需要移動(dòng)、射擊、自身旋轉(zhuǎn)、與炮臺(tái)旋轉(zhuǎn)。MonoDevelop類中有一個(gè)Update函數(shù),在每一幀執(zhí)行時(shí),該函數(shù)都會(huì)被調(diào)用。移動(dòng)、射擊、自身旋轉(zhuǎn)與炮臺(tái)旋轉(zhuǎn)代碼如下[3]。
x=Input.GetAxis("Horizontal")*Time.deltaTime*speed;
z=Input.GetAxis("Vertical")*Time.deltaTime*speed;
transform.Translate(x,0,z);
if (Input.GetMouseButtonDown (0)) {
GameObject b=(GameObject)Instantiate(ball,transform.position,transform.rotation); b.rigidbody.AddForce(transform.up*1000);
}
if (Input.GetKey (KeyCode.Z)) {
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.Euler (60,0,0), Time.deltaTime);
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.Euler (60,-30,0), Time.deltaTime);
}
if (Input.GetKey (KeyCode.C)) {
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.Euler (60,0,0), Time.deltaTime);
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.Euler (60,30,0), Time.deltaTime);
}
3.3 目標(biāo)的產(chǎn)生與消滅
在游戲中射擊目標(biāo)是動(dòng)態(tài)產(chǎn)生的,其產(chǎn)生的代碼如下[4]。
float x = pos.transform.position.x;
float y = 1;
float z = pos.transform.position.z;
for (int m=0; m<10; m++) {
for(int i=0;i<10;i++){
Instantiate(comp,new Vector3(x+m,y+i,z+50),Quaternion.identity);
}
}
當(dāng)游戲目標(biāo)被擊打到地面以下,主角就應(yīng)加分。其代碼如下。
if(gameObject.transform.position.y<0)
{sj=gameObject.Find("Main Camera").GetComponent(sheji).sjshu;
xm=++gameObject.Find("Main Camera").GetComponent(sheji).dstshu; if(xm>20)
{gameObject.Find("wenzi").GetComponent(GUIText).text="congradulation,success";
gameObject.Find("Main Camera").GetComponent(sheji).enabled=false;
}
Destroy(gameObject);
}
結(jié) 語(yǔ)
本文具體分析了Unity3D引擎的特性,研究了Unity3D引擎在開(kāi)發(fā)移動(dòng)設(shè)備游戲過(guò)程中的關(guān)鍵技術(shù),并在此基礎(chǔ)以Unity3D游戲引擎為開(kāi)發(fā)平臺(tái)開(kāi)發(fā)了射擊類游戲項(xiàng)目,并最終實(shí)現(xiàn)了跨平臺(tái)。
【參考文獻(xiàn)】
[1]劉光然.虛擬現(xiàn)實(shí)技術(shù)[M].北京:清華大學(xué)出版社,2011.
[2] 汪超順.虛擬現(xiàn)實(shí)的特點(diǎn)與應(yīng)用[J].科技大觀園,2009,(22):43-44.
[3] 宣雨松.Unity3D游戲開(kāi)發(fā)[M]北京:人民郵電出版社,2012.
[4] HengLia,MiaojiaLua,GregGhana,etal.Proactive training system for safe and efficient precast installation [J].Automation in Construction,2015,49(A):163-174.endprint