董健
摘? 要:隨著Android移動操作系統(tǒng)的迅速普及,針對Android平臺游戲的移植開發(fā)需求日益增多。用平面設(shè)計軟件構(gòu)建虛擬場景和運動單元,在Unity3D引擎中進行模塊封裝、數(shù)據(jù)處理和交互控制,采用盒狀碰撞檢測機制及對象池的數(shù)據(jù)管理模式,實現(xiàn)了自動射擊、關(guān)卡切換、視景特效及各種實體的動態(tài)效果,完成了一款手機射擊類游戲。最后,實現(xiàn)游戲向Android手機的移植,游戲基本功能完善,運行流暢。
關(guān)鍵詞:碰撞檢測;Unity3D;手機游戲;Android
中圖分類號:TP311.52?????????? 文獻標識碼:A
1?? 引言(Introduction)
信息化時代,智能手機等移動終端對人們來說已經(jīng)不是一個陌生的詞,因其強大的功能而越來越受人們的青睞。智能手機不再像過去的老式機一樣只能簡單地接聽電話和收發(fā)短信了,而是更能迎合眾多用戶的需求,成為更多手機用戶在工作、學(xué)習(xí)之余的一部方便靈巧、便于攜帶的休閑娛樂的移動設(shè)備[1]。智能手機擁有如此強大的功能,都是源于其完善的系統(tǒng)平臺,其中Android系統(tǒng)平臺就是其一,它因其良好的開放性而被很多手機廠商使用,在市場上占有相當高的比率?;贏ndroid平臺的應(yīng)用中,游戲因其擁有強大的交互性、娛樂性以及能隨時隨地進行游戲的便利性而被人們所喜愛,讓開發(fā)者看到了手機游戲在Android平臺上的巨大的發(fā)展空間。
2?? 游戲功能分析(The game features analysis)
射擊類游戲因其包含明顯的動作游戲的特征,是動作游戲中的一類,其操作簡單、易懂,是一類比較熱門的游戲。該應(yīng)用主要是通過Unity游戲引擎設(shè)計的一款適合于各階層人士的射擊類游戲并移植到Android移動平臺。對游戲功能進行分析時,應(yīng)集中注意要“做什么”而不是“怎么做”。通過對游戲的分析,根據(jù)游戲目標功能的用例圖分析得到游戲的整體框架圖,如圖1所示。
圖1 游戲框架結(jié)構(gòu)圖
Fig.1 Game framework structure
3?? 游戲功能模塊的實現(xiàn)(Realization of the game
function module)
3.1?? 游戲場景
就射擊類游戲來講,游戲的場景一般都會很大,因此無法在游戲的界面上完全顯示出來,所以要給游戲的主界面背景添加一個UV動畫。游戲中可以看到玩家控制的主角在不停地移動,而游戲背景總是在向下移動,讓玩家感覺整個畫面都在移動,呈現(xiàn)一種動態(tài)的視覺效果。
動態(tài)背景創(chuàng)建的原理就是將背景用一張圖片進行循環(huán)滾動,從而形成一個動畫的過程[2]。為了實現(xiàn)背景的循環(huán)滾動,則需得選擇Loop,將其設(shè)為循環(huán)播放模式。
3.2?? 主角管理的實現(xiàn)
在游戲中,主角有循環(huán)移動/具備生命值/可以發(fā)射子彈/尾部火焰效果等功能,在設(shè)計時建立一個Player類,讓它與主角關(guān)聯(lián),Player類中提供了一個Update函數(shù),這個函數(shù)在程序運行時,每幀都會被調(diào)用,因此,在這個函數(shù)中添加主角移動的部分代碼:
if(Input.GetKey(KeyCode.UpArrow)){movev-=m_speed*Time.deltaTime;} //上移
if(Input.GetKey(KeyCode.DownArrow)){ movev+=m_speed*Time.deltaTime;}//下移
if(Input.GetKey(KeyCode.LeftArrow)){moveh+=m_speed*Time.deltaTime;}//左移
if(Input.GetKey(KeyCode.RightArrow)){moveh-=m_speed*Time.deltaTime;}//右移
this.m_transform.Translate(new Vector3(moveh,0,
movev));//移動
…………………………………………
在Player類中定義一個enum(枚舉)狀態(tài),包含飛機的三種狀態(tài):Playing、Explosion、Invisible。再在子線程方法DestroyPlayer()中實現(xiàn)飛機被擊中或與敵機發(fā)生碰撞后,飛機退出游戲窗口底部,然后再從游戲窗口底部返回到游戲界面,且閃爍一段時間才能被子彈擊中的功能。
3.3?? 敵人管理的實現(xiàn)
敵機的類型主要分為三類,具體類型如圖2所示。
圖2 敵機類型說明圖
Fig.2 Description of enemy plane type
為了能夠不停的制造新的敵人,則需要創(chuàng)建敵人生成器。創(chuàng)建一個EnemySpawn腳本,為Update方法添加如下代碼:
m_timer-=Time.deltaTime;
if (m_timer<;=0){
m_timer=Random.value*15.0f;?? //在5~15s之間隨機生成一個敵人
if (m_timer<;5)
m_timer=5;?????? //實例化敵人的位置
Instantiate (m_enemy,m_transform.position,Quaternion.identity); }endprint
3.4?? 碰撞檢測的實現(xiàn)
射擊游戲中,為了判斷前方是否有障礙物和子彈是否擊中對方,就需要對兩個物體進行碰撞檢測,然后根據(jù)檢驗的結(jié)果采取相應(yīng)的方法進行處理。游戲中的碰撞檢測主要存在于主角與敵機、主角與敵機子彈、敵機與主角子彈之間。而物體要發(fā)生碰撞檢測,主動運行的對象就必須是剛體,因此,需要添加一個剛體組件。檢驗碰撞通常有兩種方法OnCollision-Enter和OnTriggerEnter。應(yīng)用中采取的則是OnTriggerEnter方法[3]。檢測中需要使用如下方法設(shè)置敵人位置:
Destroy(this.gameObject);
EnemyScript
enemy=(EnemyScript)ontherObject.gameObject.GetComponent("EnemyScript");
enemy.SetPositionAndSpeed();//設(shè)置敵人出現(xiàn)的位置
4? 游戲的完成及測試(Completion and testing of the
game)
在游戲制作完成后,為了檢查游戲是否完整、能否達到預(yù)期的效果,則需要對其進行調(diào)試和運行,以發(fā)現(xiàn)游戲中可能有的不足并解決這些問題。進入游戲,按空格鍵,發(fā)射子彈;按上、下、左、右鍵,上、下、左、右移動;飛機在飛行中若吃到星星,則會獲得一定的分數(shù)。若飛機撞到敵機或被敵機子彈集中,生命值會減一,當生命值減到零時,游戲失敗,進入失敗界面。
經(jīng)過測試,游戲運行效果符合預(yù)先設(shè)計的游戲總體效果,各個界面之間的切換也都正確。此外,還重點測試了游戲過程中其他功能的實現(xiàn),玩家控制的主角能正常移動并發(fā)射子彈,在吃到星星后,也能獲得相應(yīng)的分數(shù)。
5?? 結(jié)論(Conclusion)
游戲是以Unity游戲引擎為開發(fā)平臺,并最終實現(xiàn)向Android的移植。
在游戲的設(shè)計與開發(fā)的整個過程中,由于對Unity和Android機制研究的還未深入,遇到過很多問題,有技術(shù)方面的,有關(guān)于游戲模型方面的,有界面設(shè)計方面的,還有程序運行時出現(xiàn)的各種異常,移植過程中軟件無法打開、運行等問題。但是通過仔細研究Unity引擎及Android平臺的開發(fā)方法,均得到解決,也為以后的繼續(xù)開發(fā)提供基礎(chǔ)。
參考文獻(References)
[1] 段海朋,關(guān)振華.3DS Max 2010完全學(xué)習(xí)手冊[M].北京:清華大
學(xué)出版社,2010.
[2] 林深華,等.基于Android平臺Unity3D游戲設(shè)計與實現(xiàn)[J].企業(yè)
科技與發(fā)展,2013(10):40-42.
[3] 宋浩.基于虛擬現(xiàn)實過程中的碰撞檢測算法優(yōu)化的研究[J].科
技向?qū)В?013(03):152.
作者簡介:
董? ?。?980-),男,碩士,講師.研究領(lǐng)域:多媒體信息處理.endprint
3.4?? 碰撞檢測的實現(xiàn)
射擊游戲中,為了判斷前方是否有障礙物和子彈是否擊中對方,就需要對兩個物體進行碰撞檢測,然后根據(jù)檢驗的結(jié)果采取相應(yīng)的方法進行處理。游戲中的碰撞檢測主要存在于主角與敵機、主角與敵機子彈、敵機與主角子彈之間。而物體要發(fā)生碰撞檢測,主動運行的對象就必須是剛體,因此,需要添加一個剛體組件。檢驗碰撞通常有兩種方法OnCollision-Enter和OnTriggerEnter。應(yīng)用中采取的則是OnTriggerEnter方法[3]。檢測中需要使用如下方法設(shè)置敵人位置:
Destroy(this.gameObject);
EnemyScript
enemy=(EnemyScript)ontherObject.gameObject.GetComponent("EnemyScript");
enemy.SetPositionAndSpeed();//設(shè)置敵人出現(xiàn)的位置
4? 游戲的完成及測試(Completion and testing of the
game)
在游戲制作完成后,為了檢查游戲是否完整、能否達到預(yù)期的效果,則需要對其進行調(diào)試和運行,以發(fā)現(xiàn)游戲中可能有的不足并解決這些問題。進入游戲,按空格鍵,發(fā)射子彈;按上、下、左、右鍵,上、下、左、右移動;飛機在飛行中若吃到星星,則會獲得一定的分數(shù)。若飛機撞到敵機或被敵機子彈集中,生命值會減一,當生命值減到零時,游戲失敗,進入失敗界面。
經(jīng)過測試,游戲運行效果符合預(yù)先設(shè)計的游戲總體效果,各個界面之間的切換也都正確。此外,還重點測試了游戲過程中其他功能的實現(xiàn),玩家控制的主角能正常移動并發(fā)射子彈,在吃到星星后,也能獲得相應(yīng)的分數(shù)。
5?? 結(jié)論(Conclusion)
游戲是以Unity游戲引擎為開發(fā)平臺,并最終實現(xiàn)向Android的移植。
在游戲的設(shè)計與開發(fā)的整個過程中,由于對Unity和Android機制研究的還未深入,遇到過很多問題,有技術(shù)方面的,有關(guān)于游戲模型方面的,有界面設(shè)計方面的,還有程序運行時出現(xiàn)的各種異常,移植過程中軟件無法打開、運行等問題。但是通過仔細研究Unity引擎及Android平臺的開發(fā)方法,均得到解決,也為以后的繼續(xù)開發(fā)提供基礎(chǔ)。
參考文獻(References)
[1] 段海朋,關(guān)振華.3DS Max 2010完全學(xué)習(xí)手冊[M].北京:清華大
學(xué)出版社,2010.
[2] 林深華,等.基于Android平臺Unity3D游戲設(shè)計與實現(xiàn)[J].企業(yè)
科技與發(fā)展,2013(10):40-42.
[3] 宋浩.基于虛擬現(xiàn)實過程中的碰撞檢測算法優(yōu)化的研究[J].科
技向?qū)В?013(03):152.
作者簡介:
董? ?。?980-),男,碩士,講師.研究領(lǐng)域:多媒體信息處理.endprint
3.4?? 碰撞檢測的實現(xiàn)
射擊游戲中,為了判斷前方是否有障礙物和子彈是否擊中對方,就需要對兩個物體進行碰撞檢測,然后根據(jù)檢驗的結(jié)果采取相應(yīng)的方法進行處理。游戲中的碰撞檢測主要存在于主角與敵機、主角與敵機子彈、敵機與主角子彈之間。而物體要發(fā)生碰撞檢測,主動運行的對象就必須是剛體,因此,需要添加一個剛體組件。檢驗碰撞通常有兩種方法OnCollision-Enter和OnTriggerEnter。應(yīng)用中采取的則是OnTriggerEnter方法[3]。檢測中需要使用如下方法設(shè)置敵人位置:
Destroy(this.gameObject);
EnemyScript
enemy=(EnemyScript)ontherObject.gameObject.GetComponent("EnemyScript");
enemy.SetPositionAndSpeed();//設(shè)置敵人出現(xiàn)的位置
4? 游戲的完成及測試(Completion and testing of the
game)
在游戲制作完成后,為了檢查游戲是否完整、能否達到預(yù)期的效果,則需要對其進行調(diào)試和運行,以發(fā)現(xiàn)游戲中可能有的不足并解決這些問題。進入游戲,按空格鍵,發(fā)射子彈;按上、下、左、右鍵,上、下、左、右移動;飛機在飛行中若吃到星星,則會獲得一定的分數(shù)。若飛機撞到敵機或被敵機子彈集中,生命值會減一,當生命值減到零時,游戲失敗,進入失敗界面。
經(jīng)過測試,游戲運行效果符合預(yù)先設(shè)計的游戲總體效果,各個界面之間的切換也都正確。此外,還重點測試了游戲過程中其他功能的實現(xiàn),玩家控制的主角能正常移動并發(fā)射子彈,在吃到星星后,也能獲得相應(yīng)的分數(shù)。
5?? 結(jié)論(Conclusion)
游戲是以Unity游戲引擎為開發(fā)平臺,并最終實現(xiàn)向Android的移植。
在游戲的設(shè)計與開發(fā)的整個過程中,由于對Unity和Android機制研究的還未深入,遇到過很多問題,有技術(shù)方面的,有關(guān)于游戲模型方面的,有界面設(shè)計方面的,還有程序運行時出現(xiàn)的各種異常,移植過程中軟件無法打開、運行等問題。但是通過仔細研究Unity引擎及Android平臺的開發(fā)方法,均得到解決,也為以后的繼續(xù)開發(fā)提供基礎(chǔ)。
參考文獻(References)
[1] 段海朋,關(guān)振華.3DS Max 2010完全學(xué)習(xí)手冊[M].北京:清華大
學(xué)出版社,2010.
[2] 林深華,等.基于Android平臺Unity3D游戲設(shè)計與實現(xiàn)[J].企業(yè)
科技與發(fā)展,2013(10):40-42.
[3] 宋浩.基于虛擬現(xiàn)實過程中的碰撞檢測算法優(yōu)化的研究[J].科
技向?qū)В?013(03):152.
作者簡介:
董? ?。?980-),男,碩士,講師.研究領(lǐng)域:多媒體信息處理.endprint