版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE28基于unity3d的塔防游戲的設(shè)計(jì)與實(shí)現(xiàn)摘要塔防,即炮塔防御(TowerDefence),也統(tǒng)稱TD,指一類通過在地圖上建造炮塔或類似建筑物,以阻止游戲中敵人進(jìn)攻的策略型游戲,要有陣圖。塔防受眾很廣,游戲模式簡(jiǎn)單而且可玩性極強(qiáng),時(shí)至今日,塔防在游戲應(yīng)用中依然是最熱門的下載類型之一,比較經(jīng)典的像《植物大戰(zhàn)僵尸》。本設(shè)計(jì)使用當(dāng)前流行的跨平臺(tái)游戲引擎Unity3d,編程語言為C#。在游戲中,玩家可以在任何空白的地塊上建造各種防御塔用于攻擊不同類型的怪物,怪物會(huì)按照預(yù)定的路線前進(jìn),當(dāng)進(jìn)入目的地的怪物到達(dá)一定數(shù)量后游戲會(huì)失??;當(dāng)進(jìn)入目的地的怪物沒有到達(dá)指定數(shù)量且所有怪物都被擊殺后游戲通關(guān)。使用Unity3d引擎來設(shè)計(jì)讓UI、游戲地圖的布置大幅簡(jiǎn)化。并通過使用拓展性強(qiáng)的類,使得開發(fā)者能快速添加新的怪物、防御塔等,提高開發(fā)效率的同時(shí),還降低了游戲的開發(fā)成本。本文主要從選題背景與意義、可行性與需求分析、游戲設(shè)計(jì)與功能實(shí)現(xiàn)、測(cè)試等四個(gè)方面,按照制作的流程對(duì)本次設(shè)計(jì)進(jìn)行論述,對(duì)開發(fā)的思路、實(shí)現(xiàn)以及實(shí)現(xiàn)過程中的主要問題都予以描述記錄。關(guān)鍵詞:游戲;塔防;Unity3d;PC
DesignandImplementationofavirtualcitybuildinggameAbstractTowerdefense,thatis,turretdefense,alsoknownasTD,referstoakindofstrategicgamethatblockstheenemy'sattackinthegamebybuildingturretsorsimilarbuildingsonthemap.Towerdefensehasawideaudience,simplegamemodeandstrongplayability.Today,towerdefenseisstilloneofthemostpopulardownloadtypesingameapplications,suchastheclassic"Plantsvs.Zombies".Thisdesignusesthecurrentpopularcrossplatformgameengineunity3d,andtheprogramminglanguageisC.Inthegame,playerscanbuildvariousdefensetowersonanyblanklandtoattackdifferenttypesofmonsters.Monsterswilladvanceaccordingtothepredeterminedroute.Whenthenumberofmonstersenteringthedestinationreachesacertainnumber,thegamewillfail.Whenthenumberofmonstersenteringthedestinationdoesnotreachaspecifiednumberandallmonstersarekilled,thegamewillpassthecustoms.Useunity3denginetodesignandsimplifythelayoutofUIandgamemap.Andthroughtheuseofexpandingclasses,developerscanquicklyaddnewmonsters,defensetowers,etc.,improvedevelopmentefficiency,butalsoreducethedevelopmentcostofthegame.Thispaperselectedtopicbackgroundandthesignificance,feasibilityandrequirementanalysis,gamedesignandfunctionimplementation,testing,andsoonfouraspects,accordingtotheproductionprocessofthisdesignisdiscussed,thedevelopmentideaandthemainproblemsintheprocessofimplementationandtheimplementationofallrecordsshallbedescribed.Keywords:Virtualgame;Unity3Dgameengine;Theinteractiveofgames目錄TOC\o"1-3"\h\u143151前言 1252911.1論文結(jié)構(gòu)安排 1250781.2研究的目的與意義 1254692可行性研究 398522.1技術(shù)可行性 3309012.2經(jīng)濟(jì)可行性 368132.3操作可行性 4278072.4總結(jié) 428403游戲概要設(shè)計(jì) 5325453.1總體概述 5199303.2游戲功能設(shè)計(jì) 5219283.2.1地圖與路線 5176673.2.2敵人 6313783.2.3防御塔 6182273.2.4武器系統(tǒng) 8288833.2.5特效設(shè)計(jì) 8325383.2.6各種UI 9178534游戲具體實(shí)現(xiàn) 1193724.1程序?qū)崿F(xiàn) 1166804.1.1建造管理模塊 11174204.1.2游戲進(jìn)程管理模塊 1194514.1.3敵人模塊 12113374.1.4敵人生成器模塊 1214514.1.5游戲菜單模塊 1289024.1.6可建造地塊模塊 13104004.1.7防御塔模塊 13135054.1.8防御塔數(shù)據(jù)模塊 13224704.1.9游戲視角控制模塊 14305114.1.10敵人進(jìn)攻波次模塊 1490824.1.8敵人行進(jìn)路線模塊 14213005測(cè)試 14270485.1交互界面 14110305.2游戲過程 15141715.3測(cè)試總結(jié) 17174226總結(jié) 1824542參考文獻(xiàn) 19872謝辭 2015819附錄 201前言Unity,也稱Unity3D,是近幾年非常流行的一個(gè)3D游戲開發(fā)引擎,跨平臺(tái)能力強(qiáng),使用它開發(fā)的手機(jī)游戲數(shù)不勝數(shù)。REF_Ref7337\r\h[8]Unity3d是如今游戲開發(fā)過程中比較流行的虛擬現(xiàn)實(shí)和跨平臺(tái)游戲開發(fā)的虛擬交互式引擎。這幾年,不僅Web應(yīng)用、移動(dòng)設(shè)備的App應(yīng)用等得到迅猛發(fā)展,而且軟件開發(fā)模式及其管理也發(fā)生了較大的變化。REF_Ref26503\r\h[9]Unity3d引擎為游戲開發(fā)者提供了易用的可視化編輯器、資源導(dǎo)入導(dǎo)出、動(dòng)畫與物理系統(tǒng)、光照與音效系統(tǒng)以及對(duì)多達(dá)21個(gè)平臺(tái)的發(fā)布支持等等的功能。除此之外,在Unity3d從發(fā)布至今的多年發(fā)展中,網(wǎng)絡(luò)上對(duì)于開發(fā)者提供的教材文檔十分的豐富,官方的AssetStore里面也提供十分豐富多樣的插件,由而多年來Unity3d引擎深受開發(fā)者的喜愛、逐步成為全球開發(fā)者普遍試用的交互式引擎。1.1論文結(jié)構(gòu)安排本論文共有六章。結(jié)構(gòu)安排如下:第一章:對(duì)游戲現(xiàn)狀和發(fā)展前景、項(xiàng)目的研究目的和意義進(jìn)行了簡(jiǎn)要介紹。第二章:對(duì)此項(xiàng)目的可行性分析,包括技術(shù)、經(jīng)濟(jì)、操作三個(gè)方面,并做出總結(jié)。第三章:對(duì)游戲的概要設(shè)計(jì)和游戲的主要功能進(jìn)行介紹。第四章:對(duì)游戲的類的詳細(xì)闡述,介紹了游戲功能的具體實(shí)現(xiàn),對(duì)游戲架構(gòu)的各個(gè)部分與其相對(duì)于的代碼部分進(jìn)行分析。第五章:對(duì)游戲進(jìn)行測(cè)試,包括測(cè)試的方法與測(cè)試的功能,并對(duì)此作出總結(jié)。第六章:總結(jié)本次項(xiàng)目的實(shí)現(xiàn)過程與體會(huì)。1.2研究的目的與意義隨著智能化電子產(chǎn)品的普及,游戲產(chǎn)業(yè)已成為經(jīng)濟(jì)市場(chǎng)中增長(zhǎng)速度最快的熱點(diǎn),近幾年來,Android平臺(tái)游戲以及Web的網(wǎng)頁游戲迅速發(fā)展,已經(jīng)成為帶動(dòng)游戲產(chǎn)業(yè)發(fā)展的中堅(jiān)力量。REF_Ref22904\r\h[10]知識(shí)經(jīng)濟(jì)的核心內(nèi)容之一是創(chuàng)意經(jīng)濟(jì),創(chuàng)意經(jīng)濟(jì)也是知識(shí)經(jīng)濟(jì)的重要表現(xiàn)形式,可以說,沒有創(chuàng)意,就沒有新經(jīng)濟(jì)。作為文化創(chuàng)意產(chǎn)業(yè)中重要的部分,游戲設(shè)計(jì)是商品生產(chǎn)與文化藝術(shù)創(chuàng)意的一次碰撞下的產(chǎn)物,在中國(guó)的經(jīng)濟(jì)發(fā)展中,游戲產(chǎn)業(yè)占據(jù)著十分重要的的地位。截至2015年上半年,中國(guó)游戲市場(chǎng)實(shí)際銷售收入達(dá)到605.1億元人民幣,同比增長(zhǎng)21.9%。REF_Ref23319\r\h[2]國(guó)內(nèi)的首款自主研發(fā)的3d游戲是在2003年,相對(duì)于美國(guó)最早的第一人稱3d射擊游戲《重返德軍總部》晚了十年左右,雖然目前國(guó)內(nèi)3d技術(shù)日益加強(qiáng),但畢竟起步較晚,與國(guó)外存在著不小的差距,只有少數(shù)大型的互聯(lián)網(wǎng)公司能夠從設(shè)計(jì)理念出發(fā)并應(yīng)用到開發(fā)制作上,其余大部分游戲公司和游戲開發(fā)者依舊使用國(guó)外的游戲引擎,比較出名的有:虛幻引擎、寒霜引擎以及Unity3d引擎,要想開發(fā)一款優(yōu)秀的游戲,人工智能必不可少。REF_Ref3513\r\h[1]不過,隨著智能化設(shè)備的快速普及,現(xiàn)階段國(guó)內(nèi)的游戲市場(chǎng)競(jìng)爭(zhēng)很激烈,尤其是移動(dòng)端,自2017年國(guó)內(nèi)移動(dòng)游戲市場(chǎng)進(jìn)入黃金時(shí)代以來,游戲APP從種類到數(shù)量皆呈現(xiàn)爆發(fā)式增長(zhǎng),玩家人數(shù)與日俱增,涵蓋的玩家年齡段也越來越廣。2可行性研究2.1技術(shù)可行性本設(shè)計(jì)基于Unity3d引擎,采用C#開發(fā)腳本,C#是由Microsoft公司開發(fā)的一種面向?qū)ο蟮木幊陶Z言。作為使用.NETFramework的Windows和Web開發(fā)人員無可爭(zhēng)議的首選語言,C#語言提供了VisualBasic的簡(jiǎn)單易用性,同時(shí)也提供了Java和C++語言的靈活性和強(qiáng)大功能。REF_Ref5632\r\h[4]目前比較流行的開發(fā)引擎有Unity3d、Cocos2d-x、UnrealEngine3等。虛幻3引擎具有高優(yōu)先級(jí)的動(dòng)態(tài)演示管道和其他演示效果,但對(duì)多核CPU的支持很差,而且大多數(shù)插件都必須付費(fèi),而且國(guó)內(nèi)這方面的學(xué)習(xí)資源也較少,這對(duì)學(xué)生個(gè)人開發(fā)群體來說不是很合適。但是Cocos2d-x是為2T游戲開發(fā)的游戲引擎,不適合這種設(shè)計(jì)。與前兩個(gè)相比,Unity3d在技術(shù)支持和技術(shù)可見性方面更適合像作者這樣的學(xué)生開發(fā)人員。自從2012年Unity正式進(jìn)入中國(guó)市場(chǎng)以來,中國(guó)越來越多的業(yè)內(nèi)知名企業(yè)開始將選擇Unity引擎開發(fā)作為其移動(dòng)端戰(zhàn)略部署的重要組成部分,使用Unity開發(fā)的諸多游戲都在市場(chǎng)上大方異彩。REF_Ref24315\r\h[6]Unity3d是一個(gè)綜合性的游戲開發(fā)工具,用于創(chuàng)建交互式多媒體內(nèi)容,如3D視頻、視頻、實(shí)時(shí)3D動(dòng)畫等。同時(shí),unity3d擁有免費(fèi)的開發(fā)資源和免費(fèi)的強(qiáng)大插件,非常適合常用的3D類應(yīng)用。如果你正在為尋找合適的開發(fā)工具而焦頭爛額時(shí),不妨嘗試一下Unity3D這個(gè)引擎。如果需要制作2D/3D的游戲產(chǎn)品,那么它是一個(gè)不可多得的游戲引擎工具;如果需要制作AAA級(jí)畫質(zhì)的數(shù)字交互產(chǎn)品,那么它可以為你提供高效優(yōu)質(zhì)的渲染效果。REF_Ref3438\r\h[5]從上可以看出,unity3d加入可視化引擎視圖為初級(jí)的開發(fā)者提供了很大的方便,由于其能夠?qū)㈨?xiàng)目發(fā)布于多平臺(tái),它使開發(fā)者能夠更加關(guān)注游戲技術(shù)的研究,而不是代碼平臺(tái)兼容性上需要時(shí)間問題的問題。綜上所述,本設(shè)計(jì)基于一個(gè)使用C#腳本開發(fā)的unity3d引擎,在技術(shù)上是可行的。2.2經(jīng)濟(jì)可行性此次塔防游戲設(shè)計(jì)是單機(jī)游戲,開發(fā)引擎使用的是Unity3d,使用的是免費(fèi)的個(gè)人版,將游戲打包至PC或手機(jī)端上即可游玩。此次設(shè)計(jì)的開發(fā)是獨(dú)立開發(fā),開發(fā)人員是筆者,沒有團(tuán)隊(duì)上的開銷,游戲所投入的成本很低,主要集中在游戲資源(如模型、材質(zhì))的收集以及游戲本體的開發(fā)。Unity是一款標(biāo)準(zhǔn)的商業(yè)游戲引擎,而商業(yè)引擎的主要特點(diǎn)有收費(fèi)、封閉源碼和功能強(qiáng)大。關(guān)于收費(fèi)情況,Unity的使用費(fèi)用非常昂貴,最便宜的普通版許可證也需要400美元,加強(qiáng)版本為1500美元。當(dāng)然許可證的版本不同,引擎支持的功能也就截然不同。具有加強(qiáng)版許可證的引擎的很多強(qiáng)大功能是有普通版許可證的引擎所不具備的。但是從學(xué)習(xí)的角度來說,無須購(gòu)買許可證同樣可以進(jìn)行,因?yàn)樵S可證更大的用處在于游戲制作完成后的打包與發(fā)布,不購(gòu)買許可證制作的游戲是無法發(fā)售的,不過,單就學(xué)習(xí)而言,我們完全無須購(gòu)買許可證,選擇免費(fèi)的Unity即可。REF_Ref25559\r\h[7]綜上所述,本次設(shè)計(jì)在經(jīng)濟(jì)上可行。2.3操作可行性此次塔防游戲在操作界面采用極簡(jiǎn)的風(fēng)格,操作十分的簡(jiǎn)易明了,unity3d引擎為游戲界面的設(shè)計(jì)提供了良好的設(shè)計(jì)平臺(tái)。游戲里所使用的圖標(biāo)如炮塔的圖標(biāo)皆取自炮塔本身使用的模型的貼圖,在配合上與游戲界面風(fēng)格相似的文本文字,游戲整體的風(fēng)格是連貫一致的,玩家對(duì)游戲的操作僅僅只需點(diǎn)擊或放大縮小,加上本次游戲規(guī)則采用傳統(tǒng)塔防的游戲機(jī)制,因此玩家能夠迅速掌握游戲要領(lǐng),輕松便捷的暢游。綜上所述,本次設(shè)計(jì)在操作上可行。2.4總結(jié)本次塔防游戲的設(shè)計(jì),在技術(shù)層面、經(jīng)濟(jì)層面以及操作層面三個(gè)層面上看,都具有高度可行性。Unity3D引擎給此次設(shè)計(jì)提供了技術(shù)層面的支持,C#語言是腳本功能運(yùn)行的保障;單機(jī)小游戲的設(shè)計(jì)規(guī)模使得個(gè)人獨(dú)立開發(fā)成為可能,開發(fā)成本很低,經(jīng)濟(jì)上沒有太大問題;而簡(jiǎn)單的操作和極簡(jiǎn)的風(fēng)格在如今電腦、智能機(jī)普及的當(dāng)下掌握起來不過幾分鐘,經(jīng)典的塔防模式也降低了游戲門檻和學(xué)習(xí)成本。綜合以上論述表明,本次設(shè)計(jì)在基于Unity3D引擎下,使用C#腳本開發(fā)一款經(jīng)典塔防類的游戲,是可行的。3游戲概要設(shè)計(jì)3.1總體概述游戲題材:經(jīng)典塔防游戲游戲類別:策略類游戲游戲玩法:顏色不同的圓球形狀的敵人從地圖的藍(lán)色正方體中進(jìn)入地圖,經(jīng)過預(yù)設(shè)的黑色道路行進(jìn),進(jìn)入地圖的粉色正方體(即目的地),玩家需要在這些敵人行進(jìn)的路線附近建造各種類型的防御塔,用以攻擊經(jīng)過的敵人,在敵人進(jìn)入粉色正方體前將敵人擊殺。敵人有若干進(jìn)攻波次,在每一波過后敵人都會(huì)變得更強(qiáng),玩家也需要通過建造更多的防御塔或升級(jí)已有的防御塔來加強(qiáng)防御力。當(dāng)進(jìn)入粉色正方體的敵人到達(dá)一定數(shù)量后,游戲會(huì)失敗。要想通關(guān),玩家需頂住敵人的進(jìn)攻,直到最后一波敵人被殲滅。3.2游戲功能設(shè)計(jì)本設(shè)計(jì)的主要功能包括:游戲地圖與敵人的行進(jìn)路線、各種各樣的敵人以及敵人的生成器、各種防御塔、資金的顯示以及各種特效。3.2.1地圖與路線游戲地圖的構(gòu)成要素包括:可建造地塊、敵人的行進(jìn)路線、敵人生成位置、敵人進(jìn)攻目的地。圖3.1游戲場(chǎng)景圖此圖顯示的視角即為游戲內(nèi)攝像機(jī)的位置,其中,白色方格為可建造地塊,即防御塔建造的位置,黑色道路為敵人行進(jìn)路線,藍(lán)色正方體為敵人生成器,游戲內(nèi)的敵人均從此處生成并以此為行進(jìn)路線的起點(diǎn),而紅色正方體即為敵人行進(jìn)的終點(diǎn),當(dāng)敵人到達(dá)此處時(shí),游戲宣布失敗。3.2.2敵人此次共設(shè)計(jì)了五種敵人,外形皆以圓球形狀,以不同顏色分為普通型(紅色)、速度型(橙色)、極速型(黃色)、加強(qiáng)型(綠色)、Boss(藍(lán)色)。敵人最重要的屬性,是敵人的血量、生成速度以及其行進(jìn)速度。 圖3.2各種類型的敵人示意圖以普通型敵人為標(biāo)準(zhǔn),速度型敵人在行進(jìn)速度和生成速度上有較強(qiáng)的提升,但同時(shí)弱化了它的生命值;而極速型敵人則更進(jìn)一步的作此改變,因此,極速型敵人是游戲里行進(jìn)速度最快、生成位置最密集的敵人,同時(shí)也是游戲里最脆弱的敵人,選用攻速快傷害低的機(jī)槍塔能對(duì)其進(jìn)行有效的打擊;而加強(qiáng)型敵人是敵人中的精英,在速度上只有較小的提升,但在血量上有極大的提升,與Boss不同的是,Boss只是單獨(dú)出現(xiàn),但加強(qiáng)型敵人是成群結(jié)對(duì)的,不過,其弱點(diǎn)于生成時(shí)間較慢,導(dǎo)致加強(qiáng)型敵人之間的間隔較大,陣型散亂,使用攻速慢傷害高的重炮塔,配合上能夠造成減速效果的激光塔是打敗加強(qiáng)型敵人的關(guān)鍵。Boss,游戲最后的敵人,打敗它是游戲通關(guān)的關(guān)鍵。Boss的最大的特點(diǎn)就是其無與倫比的血量,但其行進(jìn)速度是敵人中最慢的,且只單一出現(xiàn),因此只需集中火力,盡量多的建造重炮塔配合激光塔,少建造機(jī)槍塔,盡可能加大對(duì)其造成的傷害。打敗Boss后,游戲宣布勝利。3.2.3防御塔此次設(shè)計(jì)中共有三種類型的防御塔,分別為機(jī)槍塔、重炮塔以及激光塔。防御塔的屬性有:使用的武器系統(tǒng)、攻擊傷害、攻擊頻率、子彈飛行速度、攻擊范圍、特殊效果。圖3.3機(jī)槍塔示意圖 圖3.4升級(jí)版機(jī)槍塔示意圖 圖3.5機(jī)槍塔購(gòu)買圖標(biāo)機(jī)槍塔是游戲中最廉價(jià)的防御塔,使用的武器系統(tǒng)是炮彈系統(tǒng),雖然傷害不高,但其攻擊頻率高、子彈飛行速度快的特點(diǎn)能夠有效對(duì)付移動(dòng)迅速且血量低的敵人,而其廉價(jià)的特點(diǎn)能使其被大量建造,彌補(bǔ)其傷害低、攻擊范圍小的缺陷,將其放置在各個(gè)點(diǎn)位能對(duì)集群的敵人進(jìn)行有效的攔截。升級(jí)版機(jī)槍塔在原基礎(chǔ)上大幅提升了其攻擊頻率,對(duì)攻擊傷害、攻擊范圍也有小幅的提升。 圖3.6重炮塔示意圖 圖3.7升級(jí)版重炮塔示意圖 圖3.8重炮塔購(gòu)買圖標(biāo)重炮塔是游戲中傷害最高、攻擊范圍最大的防御塔,使用的武器系統(tǒng)也是炮彈系統(tǒng),其巨額的攻擊傷害所付出的代價(jià)是其攻擊頻率的低下,巨大的炮彈飛行的速度也受到了影響,適合攻擊移動(dòng)速度較慢、生命值較高且單獨(dú)行動(dòng)或陣型間隔較大的敵人。升級(jí)版重炮塔在原基礎(chǔ)上大幅提升攻擊傷害和攻擊范圍,攻擊頻率不變。 圖3.9激光塔示意圖 圖3.10升級(jí)版激光塔示意圖 圖3.11激光塔示意圖激光塔是游戲中一種特殊的防御塔,它搭載了不同于機(jī)槍塔和重炮塔的武器系統(tǒng)——激光武器系統(tǒng),該武器最大的特點(diǎn)在于它造成傷害的方式不是瞬時(shí)的,而是持續(xù)性的,且能夠?qū)φ诠舻哪繕?biāo)造成減速效果,適合對(duì)付單獨(dú)行動(dòng)的或陣型間隔較大的敵人,不過,由于價(jià)格昂貴,且殺傷力較于重炮塔還是稍顯不足,不適合大量建造,只需在幾個(gè)關(guān)鍵路口建造即可,主要用于降低敵人的行進(jìn)速度。升級(jí)版激光塔在原基礎(chǔ)上提升了攻擊傷害與攻擊范圍,著重增強(qiáng)其對(duì)敵人的減速能力。3.2.4武器系統(tǒng)在此次炮彈系統(tǒng)的設(shè)計(jì)中,共分為兩大武器系統(tǒng),分別是炮彈武器系統(tǒng)以及激光武器系統(tǒng)。 圖3.12重炮塔開火示意圖 圖3.13激光塔開火示意圖炮彈武器系統(tǒng)是瞬時(shí)傷害的攻擊系統(tǒng),有攻擊頻率的屬性,機(jī)槍塔與重炮塔皆搭載此攻擊系統(tǒng),是主要的武器系統(tǒng)。激光武器系統(tǒng)是持續(xù)傷害的攻擊系統(tǒng),專為激光塔而設(shè)計(jì),采用激光射線代替子彈和炮彈,能對(duì)目標(biāo)持續(xù)造成傷害,最大的特點(diǎn)是其擁有減速能力,提供戰(zhàn)術(shù)上的支持。3.2.5特效設(shè)計(jì)在特效設(shè)計(jì)方面,主要包括三大類:動(dòng)畫類特效、粒子類特效、線渲染類特效。動(dòng)畫類特效主要應(yīng)用于游戲開始界面、玩家資金提示、防御塔升級(jí)面板、游戲結(jié)束界面等。粒子類特效主要應(yīng)用于防御塔的建造、炮彈武器系統(tǒng)、擊殺敵人、升級(jí)和拆除防御塔等。線渲染類特效專為激光武器系統(tǒng)服務(wù),是實(shí)現(xiàn)激光武器系統(tǒng)的構(gòu)成要素。3.2.6各種UI此次設(shè)計(jì)的UI包括:游戲初始界面、游戲結(jié)束界面、升級(jí)面板、玩家資金面板、防御塔購(gòu)買面板。圖3.14游戲開始界面示意圖圖3.15游戲內(nèi)場(chǎng)景示意圖圖3.16游戲結(jié)束界面示意圖
4游戲具體實(shí)現(xiàn)4.1程序?qū)崿F(xiàn)4.1.1建造管理模塊類名:BuildManager說明:控制游戲內(nèi)建造防御塔、升級(jí)防御塔、拆除防御塔相關(guān)的操作。方法:voidChangeMoney()、voidStart()、voidUpdate()、publicvoidOnLaserTurretSelected()、publicvoidOnMissileTurretSelected()、publicvoidOnStandarTurretSelected()、voidShowUpgradeUI()、IEnumeratorHideUpgradeUI()、publicvoidOnUpgradeButtonDown()、publicvoidOnDestroyButtonDown()。分析:voidChangeMoney()記錄了玩家資金的變化;voidStart()用于開啟與防御塔升級(jí)界面相關(guān)的狀態(tài)機(jī);voidUpdate()用于控制防御塔的建造、升級(jí)、拆操作;publicvoidOnLaserTurretSelected()用于判斷激光塔是否被鼠標(biāo)選擇;publicvoidOnMissileTurretSelected()用于判斷重炮塔是否被鼠標(biāo)選擇;publicvoidOnStandarTurretSelected()用于判斷機(jī)槍塔是否被鼠標(biāo)選擇;voidShowUpgradeUI()用于顯示防御塔的升級(jí)面板;IEnumeratorHideUpgradeUI()用攜程的方式來讀取升級(jí)面板的顯示與隱藏的變化并控制其隱藏;publicvoidOnUpgradeButtonDown()鼠標(biāo)監(jiān)聽升級(jí)按鈕的點(diǎn)擊;publicvoidOnDestroyButtonDown()鼠標(biāo)監(jiān)聽拆除按鈕的點(diǎn)擊。4.1.2游戲進(jìn)程管理模塊類名:GameManager說明:控制游戲內(nèi)菜單、場(chǎng)景切換、游戲流程切換。方法:publicvoidAwake()、publicvoidWin()、publicvoidFailded()、publicvoidOnButtonReplay()、publicvoidOnButtonMenu()。分析:publicvoidAwake()控制游戲開始時(shí)的各種操作如啟動(dòng)敵人生成器;publicvoidWin()控制游戲勝利時(shí)的UI顯示與文本;publicvoidFailded()控制游戲失敗時(shí)的UI顯示與文本;publicvoidOnButtonReplay()監(jiān)聽游戲結(jié)束時(shí)“重玩”按鈕是否被點(diǎn)擊;publicvoidOnButtonMenu()監(jiān)聽游戲結(jié)束時(shí)“菜單”按鈕是否被點(diǎn)擊。4.1.3敵人模塊類名:Enemy說明:記錄敵人各種屬性,包括行進(jìn)行為、承受傷害以及死亡銷毀。方法:voidStart()、voidUpdate()、voidMove()、voidReachDestination()、voidOnDestroy()、publicvoidTakeDamage()、voidDie()。分析:voidStart()初始化敵人屬性、控制敵人開始從起點(diǎn)移動(dòng);voidUpdate()更新敵人行進(jìn)狀態(tài);voidMove()控制敵人移動(dòng);voidReachDestination()用于銷毀到達(dá)終點(diǎn)的敵人,同時(shí)宣布游戲失?。籶ublicvoidTakeDamage()控制記錄敵人承受的傷害,并作出承傷行為;voidDie()敵人血量為0時(shí)銷毀敵人。4.1.4敵人生成器模塊類名:EnemySpawner說明:控制敵人在起點(diǎn)生成、每一波次的生成時(shí)間、生成的敵人類型和數(shù)量。方法:voidStart()、publicvoidStop()、IEnumeratorSpawnEnemy()。分析:voidStart()用于啟動(dòng)敵人生成器;publicvoidStop()停止敵人的生成(當(dāng)游戲失敗時(shí));IEnumeratorSpawnEnemy()用攜程控制每一波生成的敵人,判斷條件以作出是否進(jìn)行下一波敵人的進(jìn)攻,敵人全部被消滅時(shí)宣布游戲勝利。4.1.5游戲菜單模塊類名:GameMenu說明:控制游戲的菜單、場(chǎng)景加載以及其相關(guān)事件。方法:publicvoidOnstartGame()、publicvoidOnExitGame()。分析:publicvoidOnstartGame()用于加載游戲開始時(shí)進(jìn)入游戲內(nèi)的場(chǎng)景;publicvoidOnExitGame()控制游戲暫停與退出。4.1.6可建造地塊模塊類名:MapCube說明:控制游戲的菜單、場(chǎng)景加載以及其相關(guān)事件。方法:voidStart()、publicvoidBuildTurret()、publicvoidUpgradeTurret()、publicvoidDestroyTurret()、voidOnMouseOver()、voidOnMouseExit()。 分析:voidStart()初始化地塊;publicvoidBuildTurret()將建造防御塔時(shí)的特效實(shí)例化并控制其顯示時(shí)間;publicvoidUpgradeTurret()用于判斷當(dāng)前地塊能否升級(jí)防御塔,并控制其升級(jí)行為和相關(guān)特效;publicvoidDestroyTurret()用于判斷當(dāng)前地塊能否拆除防御塔,并控制其拆除行為和相關(guān)特效;voidOnMouseOver()監(jiān)聽鼠標(biāo)懸停于地塊上;voidOnMouseExit()監(jiān)聽鼠標(biāo)懸停離開地塊。4.1.7防御塔模塊類名:StandardTurret說明:控制防御塔的攻擊行為。方法:voidOnTriggerEnter()、voidOnTriggerExit()、voidStart()、voidUpdate()、voidAttack()、voidUpdateEnemies()。 分析:voidOnTriggerEnter()用于判斷敵人是否進(jìn)入防御塔的射程之內(nèi);voidOnTriggerExit()用于判斷敵人是否離開防御塔的射程之內(nèi);voidStart()用于啟動(dòng)防御塔攻擊計(jì)時(shí)器;voidUpdate()控制防御塔炮口的朝向,發(fā)動(dòng)攻擊指令,以及決定使用何種武器系統(tǒng)進(jìn)行攻擊;voidAttack()記錄攻擊指令;voidUpdateEnemies()更新防御塔發(fā)現(xiàn)的敵人數(shù)量。4.1.8防御塔數(shù)據(jù)模塊類名:TurretData說明:記錄防御塔的類型和各項(xiàng)屬性。方法:publicenumTurretType。 分析:publicenumTurretType用于記錄激光塔、重炮塔、機(jī)槍塔的類型。4.1.9游戲視角控制模塊類名:ViewController說明:控制顯示游戲場(chǎng)景的攝像機(jī)。方法:voidUpdate()。 分析:voidUpdate()控制鍵盤上“A”、“W”、“S”、“D”四個(gè)鍵對(duì)應(yīng)的鏡頭移動(dòng),賦予鼠標(biāo)滾輪放大縮小的功能。4.1.10敵人進(jìn)攻波次模塊類名:Wave說明:記錄每波敵人的類型、數(shù)量和生成速度。方法:無,非主類。 分析:記錄每波敵人的類型、數(shù)量和生成速度。4.1.8敵人行進(jìn)路線模塊類名:WayPoints說明:控制防御塔的攻擊行為。方法:voidAwake()。 分析:voidAwake()用于獲取路徑點(diǎn),對(duì)每一段行進(jìn)路線進(jìn)行賦值操作。5測(cè)試5.1交互界面測(cè)試:游戲運(yùn)行,顯示游戲主界面,如下圖。圖5.1游戲開始界面測(cè)試圖測(cè)試結(jié)果:游戲主界面加載成功。測(cè)試:點(diǎn)擊“START”按鈕開始游戲,加載游戲場(chǎng)景。圖5.2加載游戲場(chǎng)景測(cè)試圖測(cè)試結(jié)果:游戲場(chǎng)景加載成功,“START”按鈕交互成功。測(cè)試:點(diǎn)擊“EXIT”按鈕退出游戲。測(cè)試結(jié)果:成功退出游戲。5.2游戲過程測(cè)試:敵人生成器生成敵人,敵人開始沿進(jìn)攻路線從起點(diǎn)出發(fā)。圖5.3敵人生成及行進(jìn)測(cè)試圖測(cè)試結(jié)果:敵人生成器成功生成敵人,敵人成功按路線行進(jìn)。測(cè)試:防御塔建造并攻擊敵人。圖5.4防御塔建造并攻擊敵人測(cè)試圖測(cè)試結(jié)果:防御塔成功建造并扣除相應(yīng)的玩家資金,成功攻擊范圍內(nèi)的敵人。測(cè)試:防御塔升級(jí)及拆除。圖5.5防御塔升級(jí)及拆除測(cè)試圖測(cè)試結(jié)果:防御塔成功升級(jí)并扣除玩家資金;防御塔拆除成功。測(cè)試:游戲視角控制。測(cè)試結(jié)果:放大縮小及平移皆成功。測(cè)試:游戲勝利宣布。圖5.6游戲勝利測(cè)試圖測(cè)試結(jié)果:成功。測(cè)試:游戲失敗宣布。圖5.7游戲失敗測(cè)試圖測(cè)試結(jié)果:成功。5.3測(cè)試總結(jié)本次測(cè)試的主要部分,如交互界面(包括游戲主菜單、游戲場(chǎng)景加載、升級(jí)面板、玩家資金)以及游戲過程(從敵人生成并行進(jìn)到游戲結(jié)束的所有過程)測(cè)試都沒問題,所有流程、功能正常運(yùn)行。6總結(jié)這此的畢業(yè)設(shè)計(jì)是大學(xué)階段的最后一個(gè)大作業(yè)。對(duì)我來說,這更像是在完成這項(xiàng)任務(wù)的過程中對(duì)我四年大學(xué)生涯的一種成果查驗(yàn)。在這之前,我對(duì)unity3d引擎的理解比較淺,這次的設(shè)計(jì)讓我更加熟練去使用unity3d,對(duì)這些方面的認(rèn)識(shí)也比以前更加深入。對(duì)于我來說,這次一個(gè)人完成整個(gè)游戲確實(shí)是很大的挑戰(zhàn)。很多的功能、實(shí)現(xiàn)我在一開始都沒有很好的考慮到,在制作的過程中發(fā)現(xiàn)很多的問題,比如說特效、動(dòng)畫的制作,以及攜程的使用等等,常常為制作過程一個(gè)小小的BUG而費(fèi)時(shí)很久,也由于是第一次獨(dú)立開發(fā)項(xiàng)目,在整個(gè)設(shè)計(jì)的過程中對(duì)于開發(fā)進(jìn)度的掌握還是太過稚嫩,導(dǎo)致許多創(chuàng)意只能停留在計(jì)劃上,而根本沒有去實(shí)施,過程中加強(qiáng)對(duì)unity3d的使用的同時(shí),也學(xué)習(xí)C#編程語言,目前,Unity引擎的API有好幾千個(gè),并且隨著Unity版本的更新,API的數(shù)量還會(huì)不斷增長(zhǎng)。對(duì)API的熟悉程度直接影響著程序的開發(fā)效率,熟悉API也成了新手進(jìn)階的必經(jīng)之路。REF_Ref5244\r\h[3]為此查閱了很多的資料,也得益于老師不厭其煩的幫助。其中讓我覺得受益最大的地方在于,我對(duì)游戲開發(fā),或者說獨(dú)立游戲開發(fā)的過程有了一個(gè)最初級(jí)卻比較清晰的了解。我在這個(gè)游戲開發(fā)的過程中得到了很大的成長(zhǎng),很大程度的提高了自己的開發(fā)能力。但是在這過程中對(duì)于時(shí)間的掌控還是沒有做到十分的充分合理,這一點(diǎn)我會(huì)牢牢記在心里好好改進(jìn)。
參考文獻(xiàn)王洪源,Unity3D人工智能編程精粹[M].清華大學(xué)出版社,2014.11Unity5.X從入門到精通[M].中國(guó)鐵道出版社,2016.1陳泉宏,UnityAPI解析[M].北京:人民郵電出版社,2014張冬旭,C#編程從基礎(chǔ)到應(yīng)用[M].北京:清華大學(xué)出版社,2014張帆,Unity3D游戲開發(fā)基礎(chǔ)[M].浙江工商大學(xué)出版社,2013.8穆海明,劉盼,劉華興.基于Unity的游戲開發(fā)[J].通訊世界,2016.8宣雨松.Unity3D游戲開發(fā)[M].北京:人民郵電出版社,2012金璽曾.Unity3D手機(jī)游戲開發(fā)[M].北京:清華大學(xué)出版社,2013朱少民,軟件測(cè)試方法和技術(shù)第2版[M].北京:清華大學(xué)出版社,2010劉俊,郭祖.基于Unity3D的塔防游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].科技傳播,2015.5
謝辭為時(shí)一個(gè)學(xué)期的畢業(yè)設(shè)計(jì)即將結(jié)束了,這也意味者我在北京理工大學(xué)珠海學(xué)院的大學(xué)生涯也即將結(jié)束。在畢業(yè)設(shè)計(jì)這段時(shí)間里,我得到了很大的自身提高,其中包含了對(duì)游戲設(shè)計(jì)流程的理解、對(duì)Unity3d游戲引擎的使用、對(duì)C#編程語言的學(xué)習(xí)以及對(duì)有關(guān)這方面書籍的認(rèn)識(shí)等等,這些都得益于老師和同學(xué)的大力幫助。附錄程序源代碼BuildManager建造管理模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.EventSystems;usingUnityEngine.UI;publicclassBuildManager:MonoBehaviour{//各種類型炮塔的數(shù)據(jù);publicTurretDatalaserTurretData;//激光炮臺(tái)數(shù)據(jù);publicTurretDatamissileTurretData;//導(dǎo)彈炮塔數(shù)據(jù);publicTurretDatastandardTurretData;//機(jī)槍炮塔數(shù)據(jù);privateTurretDataselectedTurretData;//當(dāng)前選擇的炮塔的數(shù)據(jù);privateMapCubeselectedMapCube;//當(dāng)前選擇的場(chǎng)景中的地塊;publicTextmoneyText;//資金的文本;publicGameObjectupgradeCanvas;//升級(jí)的UI;publicButtonbuttonUpgrade;publicAnimatormoneyAnimator;//資金的動(dòng)畫;privateAnimatorupgradeCanvasAnimator;//升級(jí)UI的狀態(tài)機(jī);privateintmoney=10000;//玩家擁有的資金;//玩家擁有的資金的變化;voidChangeMoney(intchange=0){money+=change;moneyText.text="擁有資金:¥"+money;}voidStart(){upgradeCanvasAnimator=upgradeCanvas.GetComponent<Animator>();}voidUpdate(){if(Input.GetMouseButtonDown(0))//判斷鼠標(biāo)是否按下;{if(EventSystem.current.IsPointerOverGameObject()==false)//判斷鼠標(biāo)按下的的位置是否在UI上;{//新炮臺(tái)的建造;Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);//將鼠標(biāo)點(diǎn)的位置轉(zhuǎn)化為射線;RaycastHithit;//射線預(yù)檢測(cè);boolisCollider=Physics.Raycast(ray,outhit,1000,LayerMask.GetMask("MapCube"));//射線碰撞檢測(cè);//判斷是否發(fā)碰撞;if(isCollider){MapCubemapCube=hit.collider.GetComponent<MapCube>();//得到了點(diǎn)擊的mapCube;if(selectedTurretData!=null&&mapCube.turretGo==null){//可以建造;if(money>=selectedTurretData.cost){//錢足夠;ChangeMoney(-selectedTurretData.cost);mapCube.BuildTurret(selectedTurretData);}else{//錢不夠;moneyAnimator.SetTrigger("Flicker");}}elseif(mapCube.turretGo!=null){//TODO升級(jí)處理;//if(mapCube.isUpgraded)//{////如果已升級(jí),則禁用升級(jí);//ShowUpgradeUI(mapCube.transform.position,true);//}//else//{////如果未升級(jí),則不禁用升級(jí);//ShowUpgradeUI(mapCube.transform.position,false);//}//以上代碼可簡(jiǎn)化為如下代碼://ShowUpgradeUI(mapCube.transform.position,mapCube.isUpgraded);//判斷當(dāng)前地塊炮臺(tái)是否為選擇的炮臺(tái),并且升級(jí)UI是否已經(jīng)顯示;if(mapCube==selectedMapCube&&upgradeCanvas.activeInHierarchy){StartCoroutine(HideUpgradeUI());}else{ShowUpgradeUI(mapCube.transform.position,mapCube.isUpgraded);}selectedMapCube=mapCube;//更新所選擇的地塊為當(dāng)前地塊;}}}}}publicvoidOnLaserTurretSelected(boolisOn){if(isOn){selectedTurretData=laserTurretData;//激光塔被選擇;}}publicvoidOnMissileTurretSelected(boolisOn){if(isOn){selectedTurretData=missileTurretData;//導(dǎo)彈塔被選擇;}}publicvoidOnStandarTurretSelected(boolisOn){if(isOn){selectedTurretData=standardTurretData;//機(jī)槍塔被選擇;}}//顯示升級(jí)UI;voidShowUpgradeUI(Vector3pos,boolisDisableUpgrade=false)//讀取即將升級(jí)的炮塔位置,升級(jí)是否禁用設(shè)置初始值為不可用;{StopCoroutine("HideUpgradeUI");//暫停攜程;upgradeCanvas.SetActive(false);//初始化upgradeCanvas.SetActive(true);//升級(jí)UI的顯示;upgradeCanvas.transform.position=pos;buttonUeractable=!isDisableUpgrade;//升級(jí)是否禁用,如果禁用,則不顯示升級(jí)UI;}//隱藏升級(jí)UI;IEnumeratorHideUpgradeUI(){upgradeCanvasAnimator.SetTrigger("Hide");//upgradeCanvas.SetActive(false);//隱藏UI的顯示;yieldreturnnewWaitForSeconds(0.8f);upgradeCanvas.SetActive(false);}publicvoidOnUpgradeButtonDown(){if(money>=selectedMapCube.turretData.costUpgraded){ChangeMoney(-selectedMapCube.turretData.costUpgraded);selectedMapCube.UpgradeTurret();}else{moneyAnimator.SetTrigger("Flicker");}StartCoroutine(HideUpgradeUI());}publicvoidOnDestroyButtonDown(){selectedMapCube.DestroyTurret();StartCoroutine(HideUpgradeUI());}}GameManager游戲進(jìn)程管理模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;usingUnityEngine.SceneManagement;publicclassGameManager:MonoBehaviour{publicGameObjectendUI;//游戲結(jié)束畫面;publicTextendMessage;//游戲結(jié)束時(shí)顯示的文本;publicstaticGameManagerInstance;publicEnemySpawnerenemySpawner;publicvoidAwake(){Instance=this;enemySpawner=GetComponent<EnemySpawner>();}publicvoidWin(){endUI.SetActive(true);endMessage.text="VICTORY";} publicvoidFailded(){enemySpawner.Stop();endUI.SetActive(true);endMessage.text="GAMEOVER";}publicvoidOnButtonReplay(){SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);}publicvoidOnButtonMenu(){SceneManager.LoadScene(0);}}Enemy敵人模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassEnemy:MonoBehaviour{privateTransform[]positions;//子路徑點(diǎn);privateintindex=0;//子路徑點(diǎn)索引數(shù)字;publicGameObjectexplosionEffect;//爆炸效果節(jié)點(diǎn);privateSliderhpSlider;//敵人的血條顯示UI;privatefloattotalHp;//敵人的生命值上限;publicfloatspeed=10;//移動(dòng)速度預(yù)設(shè)值;publicfloathp=100;//敵人的實(shí)時(shí)生命值; //Usethisforinitialization voidStart(){positions=WayPoints.positions;//從WayPoints腳本中獲取子路徑點(diǎn);totalHp=hp;hpSlider=GetComponentInChildren<Slider>();//獲取所有類型的敵人的血條顯示UI; } //Updateiscalledonceperframe voidUpdate(){Move(); }voidMove()//構(gòu)建敵人移動(dòng)的方法;{//判斷是否還有下一個(gè)子路徑;if(index>positions.Length-1){return;//若沒有則返回;}//設(shè)置移動(dòng)路徑與速度,敵人參考系本身就是世界坐標(biāo)系,因此無需重新設(shè)置參考系;transform.Translate((positions[index].position-transform.position).normalized*Time.deltaTime*speed);//到達(dá)目標(biāo)子路徑點(diǎn)后搜索下一子路徑點(diǎn);if(Vector3.Distance(positions[index].position,transform.position)<0.2f){index++;//索引值+1;}//判斷敵人是否到達(dá)目的地;if(index>positions.Length-1){ReachDestination();//調(diào)用銷毀方法;}}voidReachDestination()//銷毀敵人;{GameManager.Instance.Failded();GameObject.Destroy(this.gameObject);//銷毀當(dāng)前敵人;}voidOnDestroy()//記錄已被銷毀的敵人;{EnemySpawner.EnemyAliveCount--;//敵人存活數(shù)量-1;}publicvoidTakeDamage(floatdamage){//先判斷敵人是否還能繼續(xù)承受傷害;if(hp<=0){return;}//敵人承受傷害;hp-=damage;hpSlider.value=(float)hp/totalHp;//敵人生命值的百分比;//判斷敵人承受傷害后是否死亡;if(hp<=0){Die();//調(diào)用死亡方法;}}//死亡方法;voidDie(){GameObjecteffect=GameObject.Instantiate(explosionEffect,transform.position,transform.rotation);//敵人的死亡特效;Destroy(effect,1);Destroy(this.gameObject);}}EnemySpawner敵人生成器模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassEnemySpawner:MonoBehaviour{publicWave[]waves;//敵人的進(jìn)攻波數(shù);publicTransformSTART;//敵人初始位置;publicfloatwaveRate=0.2f;//每一波的間隔;publicstaticintEnemyAliveCount=0;//敵人存活數(shù)量;privateCoroutinecoroutine;voidStart(){coroutine=StartCoroutine(SpawnEnemy());//啟動(dòng)敵人生成器;}publicvoidStop(){StopCoroutine(coroutine);}//通過攜程來創(chuàng)建敵人生成器;IEnumeratorSpawnEnemy(){//設(shè)置每一波敵人;foreach(Wavewaveinwaves){//每一波敵人的數(shù)量和位置;for(inti=0;i<wave.count;i++){GameObject.Instantiate(wave.enemyPrefab,START.position,Quaternion.identity);//生成敵人;EnemyAliveCount++;//敵人存活數(shù)量+1;//判斷當(dāng)前生成的敵人是否為最后一個(gè),依次生成當(dāng)前波數(shù)的所有敵人;if(i!=wave.count-1){yieldreturnnewWaitForSeconds(wave.rate);//暫停生成間隔時(shí)間,生成當(dāng)前波數(shù)的下一個(gè)敵人;}}//當(dāng)有敵人存活時(shí),暫停下一波的生成;while(EnemyAliveCount>0){yieldreturn0;//暫停;}yieldreturnnewWaitForSeconds(waveRate);//暫停每波的間隔時(shí)間,開始下一波;}while(EnemyAliveCount>0){yieldreturn0;}GameManager.Instance.Win();}}GameMenu游戲菜單模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.SceneManagement;publicclassGameMenu:MonoBehaviour{ publicvoidOnstartGame(){SceneManager.LoadScene(1);}publicvoidOnExitGame(){#ifUNITY_EDITORUnityEditor.EditorApplication.isPlaying=false;#elseApplication.Quit();#endif}}MapCube可建造地塊模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.EventSystems;publicclassMapCube:MonoBehaviour{[HideInInspector]publicGameObjectturretGo;//保存地塊當(dāng)前已有的炮臺(tái);[HideInInspector]publicTurretDataturretData;[HideInInspector]publicboolisUpgraded=false;//默認(rèn)炮臺(tái)還未升級(jí)過;publicGameObjectbuildEffect;//建造特效;privateRendererrender;voidStart(){render=GetComponent<Renderer>();}publicvoidBuildTurret(TurretDataturretData){//特效實(shí)例化;this.turretData=turretData;isUpgraded=false;//炮臺(tái)還未升級(jí)過;//turretGo=Instantiate(turretData.turretPrefab,transform.position,Quaternion.identity);turretGo=GameObject.Instantiate(turretData.turretPrefab,transform.position,Quaternion.identity);GameObjecteffect=GameObject.Instantiate(buildEffect,transform.position,Quaternion.identity);Destroy(effect,1.5f);//特效持續(xù)一秒后銷毀;}publicvoidUpgradeTurret()//防御塔升級(jí);{if(isUpgraded==true){return;}Destroy(turretGo);isUpgraded=true;turretGo=GameObject.Instantiate(turretData.turretUpgradedPrefab,transform.position,Quaternion.identity);GameObjecteffect=GameObject.Instantiate(buildEffect,transform.position,Quaternion.identity);Destroy(effect,1.5f);//特效持續(xù)一秒后銷毀;}publicvoidDestroyTurret(){Destroy(turretGo);isUpgraded=false;turretGo=null;turretData=null;GameObjecteffect=GameObject.Instantiate(buildEffect,transform.position,Quaternion.identity);Destroy(effect,1.5f);//特效持續(xù)一秒后銷毀;}//鼠標(biāo)懸停方法;voidOnMouseOver(){if(turretGo==null&&EventSystem.current.IsPointerOverGameObject()==false){render.material.color=Color.gray;}}//鼠標(biāo)懸停離開方法;voidOnMouseExit(){render.material.color=Color.white;}}StandardBullet武器模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassStandardBullet:MonoBehaviour{publicintdamage=10;//子彈傷害;publicfloatspeed=100;//子彈飛行速度;publicGameObjectexplosionEffectPrefab;//爆炸效果;privateTransformtarget;//子彈攻擊目標(biāo);//子彈當(dāng)前攻擊的目標(biāo);publicvoidSetTarget(Transform_target){this.target=_target;}//更新目標(biāo)位置,子彈攻擊目標(biāo);voidUpdate(){//如果子彈追擊途中失去目標(biāo);if(target==null){Die();//子彈自行銷毀;return;//不在向下執(zhí)行;}transform.LookAt(target.position);transform.Translate(Vector3.forward*speed*Time.deltaTime);}voidOnTriggerEnter(Collidercol){if(col.tag=="Enemy"){col.GetComponent<Enemy>().TakeDamage(damage);Die();}}voidDie(){GameObjecteffect=GameObject.Instantiate(explosionEffectPrefab,transform.position,transform.rotation);Destroy(this.gameObject);//銷毀子彈;Destroy(effect,0.2f);//銷毀特效;}}StandardTurret防御塔模塊usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassStandardTurret:MonoBehaviour{privateList<GameObject>enemies=newList<GameObject>(); voidOnTriggerEnter(Collidercol){if(col.tag=="Enemy"){enemies.Add(col.gameObject);}}voidOnTriggerExit(Collidercol){if(col.tag=="Enemy"){enemies.Remove(col.gameObject);}}publicfloatattackRateTime=0.1f;//攻擊冷卻;privatefloattimer=0;//計(jì)時(shí)器;publicGameObjectbulletPrefab;//子彈;publicTransformfirePosition;//開火口位置;publicTransformhead;//炮塔頂部;publicbooluseLaser=false;//是否使用激光,默認(rèn)不使用;publicfloatdamageRate=30;publicLineRendererlaserRenderer;//激光系統(tǒng);publicGameObjectlaserEffect;//調(diào)用激光特效;voidStart(){timer=attackRateTime;//炮塔在遇到敵人前就已準(zhǔn)備就緒,無需再等待冷卻;}voidUpdate(){//調(diào)轉(zhuǎn)炮口方向;if(enemies.Count>0&&enemies[0]!=null){Vector3targetPosition=enemies[0].transform.position;//讀取當(dāng)前敵人的位置;targetPosition.y=head.position.y;//將敵人的垂直方向位置與炮塔頂部保持一致;head.LookAt(targetPosition);//炮塔頂部的炮口指向當(dāng)前敵人;}if(useLaser==false){//計(jì)時(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川省長(zhǎng)寧縣事業(yè)單位招聘57人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省廣安市鄰水縣“小平故里英才”引進(jìn)急需緊缺專業(yè)人才9人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年916四川事業(yè)單位聯(lián)考系列講座歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川雅安天全縣事業(yè)單位招聘6人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省內(nèi)江資中縣事業(yè)單位考聘215人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年事業(yè)單位聯(lián)考云南省招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 智能家居安裝勞務(wù)施工合同
- 城市規(guī)劃工程師聘用協(xié)議
- 吉林省高速公路工程質(zhì)量監(jiān)督辦法
- 2024年度建材銷售傭金合同范本3篇
- 2023年甲型H1N1流感防控考核試題及答案
- T-ZJASE 024-2023 呼吸閥定期校驗(yàn)規(guī)則
- 流浪乞討人員救助工作總結(jié)
- 新生兒疼痛評(píng)估與管理課件
- 云南省昆明市盤龍區(qū)2023-2024學(xué)年高二上學(xué)期期末質(zhì)量檢測(cè)數(shù)學(xué)試題【含答案解析】
- 腎上腺皮質(zhì)功能減退通用課件
- 《安徒生童話》試題及答案
- 提高學(xué)生學(xué)習(xí)策略的教學(xué)方法
- 小學(xué)開學(xué)第一課《筑夢(mèng)新起點(diǎn) 一起向未來》課件
- 廣東省深圳市2023-2024學(xué)年上冊(cè)七年級(jí)歷史期末模擬試題(附答案)
- 關(guān)于元旦的雙人相聲
評(píng)論
0/150
提交評(píng)論