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