一種基于Unity的人機(jī)對(duì)戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)
發(fā)布時(shí)間:2018-07-01 來(lái)源: 幽默笑話(huà) 點(diǎn)擊:
摘要:隨著社會(huì)科技水平和經(jīng)濟(jì)水平的迅速發(fā)展,游戲逐步成為人們享受生活?yuàn)蕵?lè)的一種流行的方式,Unity3D作為一款虛擬3D開(kāi)發(fā)的軟件正在逐步升溫,他以其跨平臺(tái)的優(yōu)勢(shì),良好的界面環(huán)境,操作要求不高,強(qiáng)大的功能設(shè)計(jì)漸漸的被廣大虛擬現(xiàn)實(shí)的設(shè)計(jì)者們所使用。
本文主要是設(shè)計(jì)一款能夠在手機(jī)上操作的休閑類(lèi)射擊游戲,功能模塊分為:敵機(jī)的生成與銷(xiāo)毀模塊,子彈的對(duì)象池,以及子彈與敵機(jī)的碰撞檢測(cè)模塊,還有最后的結(jié)束界面,用本地保存歷史最高的分?jǐn)?shù)。
關(guān)鍵詞:Unity3D;射擊游戲;安卓
就目前的游戲市場(chǎng)而已,很多人對(duì)unity3d游戲偏愛(ài)有佳,從事unity3d游戲開(kāi)發(fā)前景廣闊。在本次的畢業(yè)設(shè)計(jì),用戶(hù)能夠在手機(jī)上通過(guò)自身的單手觸屏的操作,享受游戲帶來(lái)的快樂(lè)。而通過(guò)本次的射擊游戲的開(kāi)發(fā),讓我對(duì)與大型游戲的制作流程有了一個(gè)更加深入的了解,并且提高的我邏輯思維能力,代碼能力,讓我受益匪淺。
一、游戲的模塊分析
新課程理念的核心在于充分發(fā)揮學(xué)生的思維能力,培養(yǎng)學(xué)生多元化的學(xué)習(xí)能力,進(jìn)而實(shí)現(xiàn)國(guó)家人才培養(yǎng)的基本目標(biāo)。新課程面對(duì)的一個(gè)重要問(wèn)題就是如何提高課堂教學(xué)效益最大化,即初中化學(xué)教師應(yīng)如何改善自身的教學(xué)方式,提高化學(xué)教學(xué)的有效性,促使初中化學(xué)教學(xué)能夠達(dá)到預(yù)想的教學(xué)效果,實(shí)現(xiàn)現(xiàn)代化人才培養(yǎng)的宏偉目標(biāo)。
。ㄒ唬┯螒蛑骶(xiàn)模塊
游戲中共有三種等級(jí)的敵機(jī),小型敵機(jī)生命值和分值最低,移動(dòng)速度最快,出現(xiàn)頻率最高,中型敵機(jī)生命值和分值略多于小型敵機(jī),移動(dòng)速度略低于小型敵機(jī),出現(xiàn)頻率略高于小型敵機(jī),大型敵機(jī)生命值和分值最高,移動(dòng)速度最慢,屬于BOSS,當(dāng)只有消滅數(shù)量的敵機(jī),達(dá)到一定分?jǐn)?shù)的時(shí)候才會(huì)出現(xiàn)。敵機(jī)生命值耗盡則爆炸,飛出邊界自動(dòng)銷(xiāo)毀。而玩家擁有主武器和副武器,在得到子彈獎(jiǎng)勵(lì)物品后,會(huì)在一定時(shí)間增強(qiáng)火力,玩家受到敵機(jī)碰撞會(huì)損失生命值,獎(jiǎng)勵(lì)物品同樣在飛出邊界后,或者過(guò)段時(shí)間后會(huì)自動(dòng)銷(xiāo)毀,敵機(jī)無(wú)法獲得獎(jiǎng)勵(lì)物品,玩家每消滅一個(gè)敵機(jī)得到相應(yīng)的分?jǐn)?shù),生命值耗盡則游戲結(jié)束如果和敵機(jī)發(fā)生碰撞或者與敵機(jī)的子彈發(fā)生碰撞,血量就會(huì)變少,當(dāng)消滅一個(gè)敵機(jī)時(shí),游戲右上方的分?jǐn)?shù)會(huì)增加,敵機(jī)會(huì)有銷(xiāo)毀的動(dòng)畫(huà)。由于本次采用是無(wú)盡深淵模式,就是一直刷怪,所以關(guān)數(shù)只有一關(guān)。同時(shí),對(duì)于游戲的界面進(jìn)行一些處理,要有進(jìn)入游戲后的玩家角色界面,如血條,分?jǐn)?shù)等,還需要結(jié)束游戲界面。
。ǘ┯螒颡(jiǎng)勵(lì)物品模塊
游戲中有多種獎(jiǎng)勵(lì)物品,為子彈獎(jiǎng)勵(lì),通過(guò)一個(gè)腳本控制,Inspector屬性面板中給定,由生成器根據(jù)不同頻率周期控制生成,生成的地點(diǎn)也是隨機(jī)的,獎(jiǎng)勵(lì)物品飛出邊界后自動(dòng)銷(xiāo)毀,碰撞到玩家戰(zhàn)機(jī),則由玩家戰(zhàn)機(jī)上面的腳本判斷獎(jiǎng)勵(lì)類(lèi)型,同時(shí),獎(jiǎng)勵(lì)物品消失。獎(jiǎng)勵(lì)物品和敵機(jī)沒(méi)有碰撞檢測(cè),當(dāng)獎(jiǎng)勵(lì)物品和敵機(jī)位置重疊,獎(jiǎng)勵(lì)物品渲染層級(jí)在敵機(jī)上層,優(yōu)先顯示,不會(huì)被敵機(jī)遮擋
。ㄈ⿺硻C(jī)模塊
游戲中有三種敵機(jī),小型、中型和大型,三種類(lèi)型的敵機(jī)都有同一個(gè)腳本控制,生命值(hp)、速度(speed)、分值,3個(gè)屬性為公共變量(public),直接在Inspector屬性面板中分別修改三種敵機(jī)的預(yù)制件(prefab)的屬性,生成的敵機(jī)就擁有不同的屬性。敵機(jī)的生成通過(guò)生成器(spawn)控制,生成器的腳本通過(guò)不同的頻率控制生成器隨機(jī)生成敵機(jī),當(dāng)然,敵機(jī)我也是為了重復(fù)利用,采用了對(duì)象池的技術(shù),通過(guò)生成鏈表和死亡鏈表來(lái)重復(fù)使用。
二、游戲的實(shí)現(xiàn)
。ㄒ唬┲鹘秋w機(jī)的移動(dòng)
在本款游戲中,主要是在安卓端使用,所以主要是用在手機(jī)拖拽,所以調(diào)用了OnMouseDrag函數(shù),并且要將鼠標(biāo)點(diǎn)擊的屏幕坐標(biāo)轉(zhuǎn)換為世界坐標(biāo)來(lái)計(jì)算,只能限定在屏幕內(nèi)拖動(dòng)不能拖到屏幕外側(cè)。
。ǘ┲鹘堑呐鲎矙z測(cè)
碰撞檢測(cè)的觸發(fā)條件是,兩個(gè)物體必須要有Box Collider或者Charater Controller,且至少一個(gè)Rigidbody組件。而在本次的游戲設(shè)計(jì)中,除了在主角物體的Inspector面板中的添加的Box Collider2D組件之外,還應(yīng)該給主角添加Rigidbody2D,Rigidbody2D是剛體組件,使物體具有物理屬性,將其中的Gravity Scale設(shè)置為0,這樣物體不會(huì)受到重力影響,不會(huì)掉落,Box Collider2D是物體在2D環(huán)境中的碰撞體,可以用來(lái)檢測(cè)是否發(fā)生碰撞,調(diào)整Box Collider2D的大小剛好包圍飛機(jī),勾選其中的Is Trigger,使其進(jìn)行觸發(fā)檢測(cè),但并不會(huì)產(chǎn)生物理碰撞效果。同時(shí),將player的tag設(shè)置成為Player,同理,后面提到的子彈,敵機(jī),獎(jiǎng)勵(lì)物品都會(huì)有Tag,以及Box Colloder2D及Rigidbody2D,是為了檢測(cè)兩者直接的碰撞檢測(cè),那么主角就會(huì)有兩者情況,第一種是碰撞到敵機(jī)或者是敵機(jī)的子彈,首先要判斷當(dāng)前血量,如果血量大于0,那么主角的血量減少否則就播放主角的死亡動(dòng)畫(huà),展開(kāi)游戲結(jié)束的畫(huà)面。所以,子彈和敵機(jī)的碰撞也是上述相同的道理。
。ㄈv史最高和最高分?jǐn)?shù)
用Unity中的PlayerPrefs.GetInt方法來(lái)保存歷史最高的,PlayerPrefs.SetInt方法來(lái)設(shè)置,具體的實(shí)現(xiàn)邏輯為第一次分?jǐn)?shù)肯定是歷史最高,然后保存在本地,當(dāng)?shù)诙问≈螅瑫?huì)將第二次的成績(jī)跟歷史最高成績(jī)對(duì)比,如果第二次的成績(jī)大于歷史最高成績(jī),那么就把第二次的成績(jī)變成歷史記錄顯示出來(lái),反之,則還是原來(lái)的歷史分?jǐn)?shù)
三、總結(jié)
本文主要實(shí)現(xiàn)了基于Unity開(kāi)發(fā)人機(jī)射擊游戲的詳細(xì)基本開(kāi)發(fā)流程。
首先分析了游戲行業(yè)的發(fā)展趨勢(shì)及手游的市場(chǎng)的巨大前景,介紹了Unity開(kāi)發(fā)工具的優(yōu)勢(shì)和特點(diǎn),C#的優(yōu)勢(shì),通過(guò)商業(yè)前景和發(fā)展趨勢(shì)闡述了選擇這個(gè)項(xiàng)目的意義。后面介紹了開(kāi)發(fā)所在的系統(tǒng)環(huán)境和開(kāi)發(fā)過(guò)程中用到的工具以及相關(guān)技術(shù),接著就是此項(xiàng)目設(shè)計(jì)、實(shí)現(xiàn)具體步驟。
此項(xiàng)目基本實(shí)現(xiàn)了飛行射擊游戲的功能,但是細(xì)節(jié)方面還遠(yuǎn)遠(yuǎn)不夠,游戲難度控制也沒(méi)有太多的體現(xiàn),敵機(jī)類(lèi)型只有三種,玩家飛機(jī)只有一種,獎(jiǎng)勵(lì)物品和細(xì)節(jié)動(dòng)畫(huà)特效都做得不夠全面。旨在通過(guò)此項(xiàng)目的實(shí)現(xiàn),熟悉Unity結(jié)合C#腳本開(kāi)發(fā)手游的具體流程,掌握Unity開(kāi)發(fā)工具的常用功能,以及對(duì)Unity開(kāi)發(fā)虛擬現(xiàn)實(shí)手游的展望。在項(xiàng)目的實(shí)現(xiàn)過(guò)程中,也遇到了大大小小的問(wèn)題,但都在導(dǎo)師、同學(xué)的幫助下逐一解決了。也使自己清楚自己的不足和局限性,尤其是在Unity的基礎(chǔ)方面還需要大量的花費(fèi)時(shí)間去學(xué)習(xí),由于我才使用Unity不久,算是個(gè)初學(xué)者,此次項(xiàng)目的設(shè)計(jì)和實(shí)現(xiàn)還有欠缺和不足的地方,能有進(jìn)一步改善的空間。
參考文獻(xiàn):
[1]金璽曾《Unity3D\2D手機(jī)游戲開(kāi)發(fā)(第二版)》清華大學(xué)出版社2014年10月.
[2]Unity Technologies 《Unity4.X從入門(mén)到精通》中國(guó)鐵道出版社 2013年11月.
[3](美)梅納德, 瓦格斯特夫著,占紅來(lái)譯《Unity游戲開(kāi)發(fā)實(shí)戰(zhàn)(原書(shū)第2版)》機(jī)械工業(yè)出版社 2015年11月.
[4](美) Matthew Johnson,James A. Henley著 郭華豐 韋靜 譯《Unity2D游戲開(kāi)發(fā)秘籍》清華大學(xué)出版社 2015年9月.
相關(guān)熱詞搜索:人機(jī) 對(duì)戰(zhàn) 設(shè)計(jì) 游戲 Unity
熱點(diǎn)文章閱讀