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