李竟
關(guān)鍵詞:unity3D;塔防;手機(jī)游戲;設(shè)計(jì)制作
國產(chǎn)游戲的發(fā)展可謂是突飛猛進(jìn),特別是手機(jī)游戲種類越來越多。市場調(diào)研報(bào)告顯示,估計(jì)在2023年,全球的手機(jī)玩家數(shù)量可突破30億,中國游戲市場發(fā)展前景廣闊。塔防游戲?qū)儆谳^為典型的休閑游戲,受到諸多玩家的喜愛,其在設(shè)計(jì)過程Unity3D的應(yīng)用必不可少,依托此技術(shù)能夠?yàn)樗烙螒虻脑O(shè)計(jì)提供方向,優(yōu)化設(shè)計(jì)思路,增強(qiáng)玩家的游戲體驗(yàn),推動3D手機(jī)游戲領(lǐng)域的快速發(fā)展。
1概述
Unity3D屬于游戲開發(fā)綜合類型工具,能夠?yàn)橥婕掖蛟燧p松的游戲場景,通過三維視頻,建立實(shí)時(shí)動畫,搭建可視化平臺。Unity3D中包含編輯器、地形編輯、腳本、版本控制以及跨平臺發(fā)布多重功能,能夠形成物理引擎( PsysX).可以拒絕多個(gè)腳本語言運(yùn)行,其中還內(nèi)置Shader效果,便于開發(fā)者應(yīng)用,游戲開發(fā)以后能夠向Android和iOS等手機(jī)平臺上發(fā)布,還可向PC端發(fā)布,或者利用Unity插件來發(fā)布網(wǎng)游。Unity3D和其他類型的游戲引擎存在顯著差異,即設(shè)計(jì)者更為關(guān)注游戲體驗(yàn)感和可玩性,并非只追求設(shè)計(jì)簡單[1]。塔防游戲?qū)儆谝嬷穷愑螒?,通過作戰(zhàn)地圖,使怪獸按照設(shè)定路線進(jìn)行移動,而玩家則可根據(jù)設(shè)定位置創(chuàng)建炮塔,用特殊技能對敵人發(fā)起攻擊,最終獲得勝利。手機(jī)平臺中的《保衛(wèi)蘿卜》《植物大戰(zhàn)僵尸》都屬于塔防游戲。當(dāng)前,移動設(shè)備的運(yùn)行性能日益提升,手機(jī)游戲也具備3D視覺體驗(yàn)功能,為塔防游戲的開發(fā)提供了良好的環(huán)境。
2設(shè)計(jì)與制作策略
2.1《保衛(wèi)羊村》制作與設(shè)計(jì)
2.1.1游戲設(shè)計(jì)內(nèi)容
《保衛(wèi)羊村》等塔防游戲就是利用Unity3D技術(shù)完成設(shè)計(jì)的。其設(shè)計(jì)思路是將人物角色劃分為“羊村武士”“灰太狼敵人”,二者分別作為防守方和進(jìn)攻方。敵人根據(jù)地圖設(shè)計(jì)向左方移動,逐漸靠近羊村,并對基地發(fā)起攻擊,而攻守一方根據(jù)防守需求,完成武士角色的動態(tài)設(shè)置,創(chuàng)建角色展開防守,當(dāng)武士能夠成功消滅一個(gè)敵人時(shí),就可以獲得對應(yīng)金幣,而金幣可以應(yīng)用在防守投入中。若敵方進(jìn)入羊村大門,則代表防守方失敗。
根據(jù)Unity3D塔防游戲的設(shè)計(jì)流程,要先創(chuàng)建模型和工程,之后建構(gòu)場景,完成程序的編寫,通過測試以后相關(guān)功能才可實(shí)現(xiàn)。在建模階段,主要利用3DsMax軟件對游戲模型進(jìn)行設(shè)計(jì)和制作。在本游戲設(shè)計(jì)中,進(jìn)攻方、防守防的角色和各類武器、道具等都將被導(dǎo)出為FXB類型格式文件,之后使用PS軟件完成貼圖設(shè)計(jì),最終導(dǎo)出PNG格式信息。重新建立Unity工程,并將其命名為“Sheep War”,之后創(chuàng)建文件Asserts,并將模型資源(包括PNC和FXB等)導(dǎo)人其中,隨后依次創(chuàng)建Material,Model,Prefab,Scenes,Scripts,對于以上文件采取分類管理措施。之后,設(shè)置不同游戲場景、劃分關(guān)卡,通過游戲管理器內(nèi)部腳本輔助鏈接與管理[2]。
在游戲設(shè)計(jì)環(huán)節(jié),需要依托核心技術(shù)完成腳本程序的編寫和地形建構(gòu),之后進(jìn)行調(diào)試,調(diào)試通過以后發(fā)布作品,進(jìn)入發(fā)布頁面,選擇游戲場景,默認(rèn)加載項(xiàng),之后在平臺內(nèi)選擇對應(yīng)的運(yùn)行平臺屬性,即可發(fā)布。此時(shí),用戶可將游戲下載到手機(jī)等設(shè)備進(jìn)行試玩和測試。
2.1.2游戲設(shè)計(jì)技術(shù)
《保衛(wèi)羊村》屬于塔防游戲,其設(shè)計(jì)階段的關(guān)鍵技術(shù)應(yīng)用如下。
第一,創(chuàng)建地形。從菜單中選擇”Create terrian”,以平面地形的創(chuàng)建作為對象,借助編輯工具完成地形繪制,并且美化。地形編輯器擁有多種功能,借助“拉高降低”功能可建構(gòu)山壑:依托“平滑工具”,能夠?qū)⒌匦蔚睦饨侨コ哼x擇“貼圖工具”還可自定義地形貼圖,設(shè)置綠色和黃色等顏色,或者種植各類植物:利用“細(xì)節(jié)工具”完成花草植被等細(xì)節(jié)元素的設(shè)置。在場景中,默認(rèn)主攝像機(jī),并選擇對象,將其屬性設(shè)定為Projection,垂直觀察,對于觀察位置進(jìn)行調(diào)整,保證預(yù)覽窗口可以清晰觀察游戲運(yùn)行鏡頭。點(diǎn)擊編輯菜單,在其屬性界面中設(shè)置Sky box Material,并將其命名為“Sunny one sky books”,此時(shí)設(shè)置場景即可出現(xiàn)“藍(lán)天白云”,營造游戲背景[3]。
第二,矩陣地圖的應(yīng)用。需要在游戲的平面對象設(shè)置長寬值,并通過指定的腳本文件,在其中將二維數(shù)組定義出來,經(jīng)過初始化生成地圖單元序列,使其初始化成地圖的平面矩陣。
第三,游戲管理器。通過創(chuàng)建空中游戲體,將其視為游戲管理器,將新建腳本的組件制定,完成Audio組件的配置,管理器可以設(shè)定為靜態(tài)實(shí)例,并且具有唯一性,這能夠保證游戲運(yùn)行階段只存在一個(gè)靜態(tài)實(shí)例,對于游戲核心邏輯加以控制,具體涵蓋玩家得分、游戲?qū)ο?、游戲狀態(tài)、界面數(shù)據(jù)、切換關(guān)卡、背景音樂等內(nèi)容。
第四,敵人生成器。通過新建游戲?qū)ο?,在腳本文件之內(nèi),根據(jù)不同關(guān)卡的預(yù)設(shè)時(shí)間、位置動態(tài)等,經(jīng)過克隆來生存進(jìn)攻方對象模型,也稱Prefabs,不同生成對象都可以根據(jù)運(yùn)動行為移動,對防守單位進(jìn)行攻擊。通過XML數(shù)據(jù)設(shè)計(jì)對生成策略進(jìn)行預(yù)定義,進(jìn)而模擬預(yù)設(shè)行為,對程序的讀取文件進(jìn)行定義,根據(jù)等待時(shí)間、指定線路等編號來生成進(jìn)攻對象。
第五,碰撞檢測。利用該技術(shù)輔助3D游戲設(shè)計(jì),經(jīng)過碰撞檢測,如果其運(yùn)行效果良好,則角色處于特定場景中可平滑移動。如果出現(xiàn)擊打碰撞或者被武器擊中等場景,則會導(dǎo)致物體受損。常規(guī)條件下塔防游戲設(shè)計(jì)都是以第三人稱視角出發(fā),在Unity3D模型內(nèi)部設(shè)置組件,通過碰撞器完成觸發(fā)剛體、偵測內(nèi)容之間的碰撞。如果碰撞事件能夠?qū)⑹录瘮?shù)觸發(fā),此時(shí)可以將“Is trigger”選項(xiàng)勾選,并將邏輯代碼添加在觸發(fā)函數(shù)中,從而檢驗(yàn)物體在碰撞以后的行為效果。
第六,音效設(shè)置。Unity3D模型的游戲場景音頻擁有兩種形式,即音樂和音效。游戲音樂可以作為背景音樂長期循環(huán)播放,所以設(shè)計(jì)階段可選擇MP3格式,這種設(shè)計(jì)方式不占用過多游戲的運(yùn)行內(nèi)存。而音效設(shè)計(jì)主要是突出游戲效果,如設(shè)計(jì)短暫爆炸聲音,可以選擇Wav等格式。具體設(shè)計(jì)流程是:勾選管理器對象,完成音源對象的創(chuàng)建,包括audio,component,audio source等,將audio屬性設(shè)為背景音樂,將其和bkmp3音樂關(guān)聯(lián),借助update方法對背景音樂播放與否加以判斷。腳本內(nèi)部使用“Play”將音樂全部播放。設(shè)計(jì)武器的時(shí)候,應(yīng)該和創(chuàng)建音效對象關(guān)聯(lián),當(dāng)游戲過程出現(xiàn)碰撞時(shí),可使用“Play one shot”,代表音效被播放一次[4]。
第七,游戲數(shù)據(jù)存儲。Unity3D能夠?yàn)閮煞N游戲提供差異化的數(shù)據(jù)存儲方式,相對便捷的設(shè)計(jì)方式就是直接保存,本地完成存儲和讀取,主要是利用“Player Prefs”來完成,其運(yùn)行原理是通過“鍵值”保存數(shù)據(jù),并將其存儲在文件內(nèi)。運(yùn)行過程類似于為每個(gè)數(shù)據(jù)命名,在其存儲于本地文檔之內(nèi)以后,通過名字將存儲數(shù)據(jù)取出。若游戲涉及大量的數(shù)據(jù)運(yùn)算,則需要利用Filelnfo方式完成復(fù)雜文件的讀寫操作。
2.2塔防游戲制作與設(shè)計(jì)實(shí)例
2.2.1游戲內(nèi)容分析
本研究借鑒塔防游戲的設(shè)計(jì)思路,開發(fā)出適合手機(jī)移動端運(yùn)行的塔防游戲,游戲本身的節(jié)奏快,適應(yīng)玩家靈活應(yīng)用閑暇時(shí)間體驗(yàn)游戲樂趣。在設(shè)計(jì)過程中,應(yīng)用Unity3D引擎,在原有3D塔防游戲基礎(chǔ)之上,增設(shè)攝像機(jī)移動功能,讓游戲畫質(zhì)更為清晰。游戲規(guī)則為:地圖一側(cè)能夠以點(diǎn)生點(diǎn)的方式生成敵人,之后敵人按照既定的路線跑到地圖另一側(cè),在敵人行走路線中,兩側(cè)玩家可以使用金幣完成炮臺建構(gòu),以此攻擊敵人,阻止其向終點(diǎn)移動。值得注意的是,若炮臺位置設(shè)定不合理,或者炮臺本身威力不夠,則敵人就會順利到達(dá)終點(diǎn),此時(shí)玩家大本營被攻陷,游戲結(jié)束。
2.2.2游戲設(shè)計(jì)流程
在設(shè)計(jì)過程中,游戲功能模塊主要表現(xiàn)在敵人功能、防御塔功能、UI界面上,玩家需要先注冊賬號,之后登錄游戲界面,完成信息設(shè)置,主要包括游戲難度等級、背景音樂的音量等,以上設(shè)置結(jié)束以后,即可進(jìn)入游戲界面。在左上角能夠顯示玩家持有金幣數(shù)量,右側(cè)設(shè)計(jì)三種炮彈的UI,當(dāng)玩家點(diǎn)擊對應(yīng)按鈕的時(shí)候,即可完成炮臺建造。炮臺建造完成以后,3s時(shí)間內(nèi)第1波敵人出現(xiàn),按照設(shè)定路線移動。玩家利用系統(tǒng)給的初始資金可以抵御敵人的第1波攻勢,之后獲得金幣,新建造炮臺。在游戲運(yùn)行階段,玩家通過暫停按鈕進(jìn)入暫停界面,該界面有“重新開始”“繼續(xù)游戲”“退出游戲”等按鈕,待敵人全部死亡之后,即可進(jìn)入下一關(guān)卡。如若大本營被攻破,玩家血量為0,則游戲結(jié)束,彈出游戲界面。針對Game manager,選擇單列設(shè)計(jì)模式,便于控制游戲,還能節(jié)約系統(tǒng)資源。利用MVC設(shè)計(jì),完成敵人、炮臺等設(shè)計(jì),將二者的數(shù)據(jù)模塊、功能模塊分離,既可降低程序設(shè)計(jì)難度,還能將其維護(hù)性提高。游戲中的“類”主要有Game manager,負(fù)責(zé)場景加載、UI控制等整體控制功能:Bullet功能為追蹤子彈、減少敵人血量;Turret功能為發(fā)射子彈;Enemy功能為移動敵人、受傷死亡等[5]。
2.2.3游戲?qū)崿F(xiàn)流程
Unity3D技術(shù)的應(yīng)用和實(shí)現(xiàn)流程如下。
第一,Prefab也稱“預(yù)設(shè)體”,屬于Unity核心概念,可將游戲?qū)ο蟠鎯τ赑refab中,對象包含其組件下方所有游戲?qū)ο?,借助Hierarchy示圖能夠?qū)崿F(xiàn)復(fù)制粘貼預(yù)設(shè)體。在游戲開發(fā)階段,敵人、炮臺均利用Prefab進(jìn)行設(shè)計(jì),可以減少設(shè)計(jì)工作量。具體而言,在Unity中導(dǎo)人炮臺模型,后臺運(yùn)行腳本可通過Turret編寫,并將其向目標(biāo)上加載,通過測試以后,將后臺預(yù)設(shè)體對象拖人Project示圖中。
第二,核心控件Ugui。應(yīng)用Ugui panel之后,板面控件能夠作為容器,允許其他UI控件在其中編輯,通過text文本組件,將玩家消滅敵人獲得金幣或者建造炮臺消耗金幣實(shí)時(shí)顯示,設(shè)置Button,Image組件建造炮臺,轉(zhuǎn)變圖片格式,通過填充呈現(xiàn)在界面上。建造不同炮臺時(shí),可以將按鈕置于相同Toggle中,以確保UI數(shù)據(jù)傳人的準(zhǔn)確性,玩家只能建造一種炮臺,以避免非必要錯(cuò)誤。
第三,AI設(shè)計(jì)。敵人程序有兩類,即Enemy和Create Enemy,實(shí)現(xiàn)敵人創(chuàng)建,并在地圖中完成路點(diǎn)設(shè)定,生成前進(jìn)路線,通過transform方法,讓敵人根據(jù)向量移動。炮臺設(shè)計(jì)需要實(shí)現(xiàn)點(diǎn)擊處即可建造,在Unity中設(shè)置physics,炮臺能夠鎖定首個(gè)敵人的攻擊范圍,所以程序設(shè)計(jì)需要添加trigger,將防御塔攻擊范圍明確,代碼中也需要添加One trigger Enter,敵人進(jìn)入攻擊范圍之內(nèi),炮臺即可獲取攻擊對象,按照設(shè)計(jì)路線攻擊敵人。至于炮彈追蹤的算法應(yīng)用,先假設(shè)炮彈和敵人的位置,獲得兩條向量,借助線性代數(shù)的向量減法,分析敵人所在位置,將該向量單位化處理,得到單位向量,游戲中的每一幀都采取該算法進(jìn)行計(jì)算,隨著敵人移動,逐漸更新向量,保證炮彈能夠按照對應(yīng)方向移動。
3結(jié)束語
在塔防游戲設(shè)計(jì)階段,設(shè)計(jì)者需要將玩家感受考慮其中,以保證游戲玩法多樣化,讓玩家即使處于相同的游戲環(huán)境中,也能夠獲得差異化的游戲體驗(yàn)。通過對Unity3D技術(shù)的廣泛應(yīng)用,可以開發(fā)出具備良好交互性的手機(jī)游戲,為玩家?guī)砀鼮閮?yōu)越的游戲體驗(yàn)感,提高Unity3D技術(shù)的應(yīng)用價(jià)值。