薛玉倩+李麗平
【摘 要】 隨著移動設(shè)備性能的快速提升,移動通信網(wǎng)絡(luò)速度的不斷提高,致使移動設(shè)備迅速普及。而游戲已成為移動端用戶的裝機(jī)必備。移動端游戲開發(fā)已成為熱門行業(yè),但移動端的系統(tǒng)平臺存在多樣性,成為移動端游戲開發(fā)的瓶頸。采用Unity3D進(jìn)行游戲開發(fā),可以實現(xiàn)Unity3D移動跨平臺游戲。
【關(guān)鍵詞】 Unity3D 移動設(shè)備 4G 跨平臺
1 引言
近年來,隨著4G的出現(xiàn),移動互聯(lián)網(wǎng)的網(wǎng)速大幅度提升,移動互聯(lián)網(wǎng)發(fā)展速度異常迅猛。移動設(shè)備的硬件也以極為迅速的速度在發(fā)展。移動設(shè)備的CPU由原先的單核發(fā)展到現(xiàn)在的四核,存儲空間也由以前的幾K發(fā)展到128G。移動設(shè)備已成為人們?nèi)粘I?、辦公等主要使用的終端。而游戲已成為移動設(shè)備的裝機(jī)必備,近幾年游戲產(chǎn)業(yè)也在發(fā)生著巨變,大型客戶端游戲在火爆幾年后,網(wǎng)頁游戲又快速發(fā)展,玩家數(shù)量快速增長。但隨著移動設(shè)備的普及,移動平臺上的高質(zhì)量3D游戲已成為現(xiàn)實,這樣大量的玩家必然被吸引到移動端。另外,越來越多的移動平臺也加入了競爭,比如ios、Android、Windows Phone、Black Berry,這就帶來了移動端游戲跨平臺的問題。Unity3D是由Unity Technologies開發(fā)的跨平臺的,使游戲開發(fā)者能輕松完成高運行效率游戲開發(fā)的游戲引擎。Unity3D具有異常強(qiáng)大的功能,除了可以跨平臺以外,還能解決由于屏幕尺寸不同、操作方式差異,硬件條件相差較大等問題,大幅度提高了游戲的可移植性[1]。
2 游戲功能設(shè)計
目前,移動設(shè)備游戲的開發(fā)非?;鸨絹碓蕉嗟娜硕荚诳臻e時間玩手機(jī),這也是移動端游戲受歡迎的原因之一。所以移動端手機(jī)的設(shè)計要操作簡單、便捷,因此采用關(guān)卡式,隨時可以停下來。本文采用Unity3D開發(fā)坦克射擊游戲,靠炮擊目標(biāo)數(shù)來獲得相應(yīng)分?jǐn)?shù) [2]。
3 基于Unity3D移動跨平臺游戲的實現(xiàn)
3.1 游戲場景
射擊類的游戲其都會擁有較大的場景,因此其場景無法在游戲界面中全面顯示,因此要給游戲界面添加一個UV動畫。在游戲中,游戲背景是一直向下移動,主角在不停的移動,從而使玩家感覺整個畫面在移動,因此有一種動態(tài)視覺效果。
動態(tài)背景的原理就是用一張圖片進(jìn)行循環(huán)滾動,從而實現(xiàn)動畫過程,為了實現(xiàn)背景的循環(huán)滾動,需將其循環(huán)播放模式設(shè)置為Loop[3]。
3.2 主角移動與射擊的實現(xiàn)
在游戲中主角需要移動、射擊、自身旋轉(zhuǎn)、與炮臺旋轉(zhuǎn)。MonoDevelop類中有一個Update函數(shù),在每一幀執(zhí)行時,該函數(shù)都會被調(diào)用。移動、射擊、自身旋轉(zhuǎn)與炮臺旋轉(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)是動態(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é) 語
本文具體分析了Unity3D引擎的特性,研究了Unity3D引擎在開發(fā)移動設(shè)備游戲過程中的關(guān)鍵技術(shù),并在此基礎(chǔ)以Unity3D游戲引擎為開發(fā)平臺開發(fā)了射擊類游戲項目,并最終實現(xiàn)了跨平臺。
【參考文獻(xiàn)】
[1]劉光然.虛擬現(xiàn)實技術(shù)[M].北京:清華大學(xué)出版社,2011.
[2] 汪超順.虛擬現(xiàn)實的特點與應(yīng)用[J].科技大觀園,2009,(22):43-44.
[3] 宣雨松.Unity3D游戲開發(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