基于Unity3D戰(zhàn)爭(zhēng)模擬策略游戲的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于Unity3D戰(zhàn)爭(zhēng)模擬策略游戲的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于Unity3D戰(zhàn)爭(zhēng)模擬策略游戲的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于Unity3D戰(zhàn)爭(zhēng)模擬策略游戲的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于Unity3D戰(zhàn)爭(zhēng)模擬策略游戲的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于Unity3D戰(zhàn)爭(zhēng)模擬策略游戲的設(shè)計(jì)與實(shí)現(xiàn)DesignandImplementationofWarSimulationStrategyGameBasedonUnity3D內(nèi)容摘要互聯(lián)網(wǎng)時(shí)代中,科技產(chǎn)物正是最被人們所關(guān)注和喜愛(ài)的,科技的飛躍發(fā)展讓曾經(jīng)天馬行空的幻想事物一點(diǎn)點(diǎn)地?cái)D進(jìn)了人們的快節(jié)奏的生活。忙碌嚴(yán)肅的生活需要放松和娛樂(lè),因此促進(jìn)了娛樂(lè)類(lèi)事業(yè)的發(fā)展,而電子游戲作為科技結(jié)合娛樂(lè)的產(chǎn)物,以難以置信的速度風(fēng)靡了全世界,而能夠得到科技發(fā)展反饋的電子游戲,在硬件水平提升的加持下,在畫(huà)面上、流暢性以及可玩性上仍在不斷地提升。與當(dāng)前主流的注重操作與考驗(yàn)反應(yīng)速度的刺激型游戲不同,慢節(jié)奏的策略類(lèi)游戲?qū)Ω嗟挠螒蚴鼙娙后w更為友好。本論文將基于Unity3D游戲開(kāi)發(fā)引擎,結(jié)合刺激型戰(zhàn)斗類(lèi)游戲的趣味性以及策略型益智游戲的休閑性,開(kāi)發(fā)即時(shí)戰(zhàn)爭(zhēng)模擬策略型游戲。多單位型游戲?qū)Ρ绕胀ㄓ螒蛐枰蟮挠?jì)算量,在單個(gè)單位的邏輯中細(xì)微的漏洞在數(shù)量的加持下也很容易成為無(wú)法處理的累贅,因此也考驗(yàn)著開(kāi)發(fā)者的邏輯能力。本文記錄了探索過(guò)程中涉及到的各領(lǐng)域的原理以及遇到的難點(diǎn)及其解決方案,希望能給到后來(lái)的開(kāi)發(fā)者提供借鑒與參考。關(guān)鍵詞:Unity3D3D視角戰(zhàn)爭(zhēng)模擬趣味策略

AbstractIntheInternetera,theproductsofscienceandtechnologyaretheonesthatpeoplepaythemostattentiontoandlove.Therepiddevelopmentofscienceandtechnolgyhas

promotedtheonceunrestrainedfantasiesgraduallybeingsqueezed

intopeople'sfast-pacedlife.Thebusyandseriouslifeneedsrelaxations

andentertainments,inconsequence,it

promotedthedevelopmentoftheentertainmentbusiness.Atthesametime,

videogames,

asaproductofscienceandtechnologycombinedwithentertainment,swepttheworldwithincrediblespeed.Foritcangetfeedbackfromtechnologicaldevelopments,thevideogamesarestillimprovingingraphics,fluency,andplayabilityunderthesupportofhardwarelevelimprovement.

Incontrasttothecurrentmainstreamofstimulatinggamesthatfocusonoperationandtestreactionspeed,slow-pacedstrategygamesaremorefriendlytomoregameaudiences.Thispaperwilldevelopreal-timewarsimulationstrategygamesbasedonUnity3Dgamedevelopmentengine,combiningthefunofstimulatingcombatgamesandtheleisureofstrategypuzzlegames.Multi-unitgamesrequiremorecomputationthannormalgames,envena

smallbuginthelogicofasingleunitcaneasilybecomeanunmanageableburdenwiththeabundant

ofthenumber,

therefore,theprocessofdevelopmentalso

trials

thelogicofdevelopers.Inthehopeofprovidingconsultsandreferencesforfuturedevelopers,thispaper

will

keeparecordoftheprinciplesofvariousfieldsinvolvedintheprocessofexplorationandthedifficultiesencounteredandtheirsolutions.Keywords:Unity3D3DViewSimulationoftheWarFunnyStrategy

目錄TOC\o"1-1"\h\z\t"二級(jí)標(biāo)題,2,三級(jí)標(biāo)題,3"第一章 緒論 緒論概括伴隨著三次工業(yè)革命,人類(lèi)在探索的道路上獲得了前所未有的發(fā)展,時(shí)至今日,科技依然在飛速發(fā)展著。于20世紀(jì)四十至五十年代啟動(dòng)的第三次工業(yè)革命,人類(lèi)在電子計(jì)算機(jī)微電技術(shù)領(lǐng)域上取得了開(kāi)拓性的突破,這一突破孕育了為電子游戲誕生的溫床。再隨著時(shí)代齒輪的推進(jìn),機(jī)械精度的不斷上升,更快更小芯片的產(chǎn)生,更低成本的生產(chǎn)技術(shù)出現(xiàn),高科技產(chǎn)品現(xiàn)在已經(jīng)普及化,不再是上流社會(huì)的奢侈品。電子設(shè)備的普及讓電子游戲的風(fēng)波卷席了全世界,五花八門(mén)的游戲橫空出世,受到了人們的喜愛(ài)和追捧,閑暇時(shí)間一起玩電子游戲已經(jīng)成為了當(dāng)代的一種流行的娛樂(lè)消遣方式。選題的意義和目的游戲開(kāi)發(fā)技術(shù)愈來(lái)愈成熟,市面上已經(jīng)有了許許多多完善的游戲開(kāi)發(fā)引擎。而在鼓勵(lì)開(kāi)源,技術(shù)分享的時(shí)代里,門(mén)檻更低的開(kāi)發(fā)引擎往往更容易受到追捧。在這樣的環(huán)境下,Unity3D向全世界的初級(jí)游戲開(kāi)發(fā)者提供了免費(fèi)精簡(jiǎn)的開(kāi)發(fā)平臺(tái),呼吁更多熱愛(ài)游戲的人加入到游戲開(kāi)發(fā)行業(yè)中來(lái)。隨著時(shí)間的推移,Unity3D的高容納性使得其受歡迎程度已力壓曾經(jīng)的主流開(kāi)發(fā)引擎虛幻,成為世界用戶(hù)數(shù)量最為龐大的游戲開(kāi)發(fā)引擎。富有想象力與創(chuàng)造了的開(kāi)發(fā)者前輩們,結(jié)合著自己的想法與技術(shù)在電子游戲的發(fā)展史上劃上色彩斑斕一筆又一筆。如今技術(shù)日愈成熟,硬件設(shè)備基礎(chǔ)不斷提升,使得在游戲開(kāi)發(fā)過(guò)程中能夠在功能實(shí)現(xiàn)后仍留有余力去保證精美的畫(huà)面,從而獲得視覺(jué)上的沖擊力提升。而曾經(jīng)稱(chēng)霸了電子游戲領(lǐng)域的多單位型游戲礙于性能方面的缺憾,鋒芒逐漸消散,如今有著更成熟的開(kāi)發(fā)技術(shù)以及性能更優(yōu)的硬件條件。為了讓在游戲中分析戰(zhàn)場(chǎng)局勢(shì)、率領(lǐng)軍隊(duì)?wèi)?zhàn)斗的雄偉設(shè)想得到更好的傳承,以及在開(kāi)發(fā)過(guò)程中依靠多單位行動(dòng)帶來(lái)的性能制約磨練自身的邏輯整理能力,本設(shè)計(jì)將基于Unity3D游戲開(kāi)發(fā)引擎完成一款模擬戰(zhàn)爭(zhēng)的策略型游戲,以在踏足新的過(guò)程中不斷探索獲得積累。國(guó)內(nèi)外的發(fā)展及現(xiàn)狀新興的商業(yè)娛樂(lè)產(chǎn)物電子游戲,自從誕生以來(lái)便受到人們的關(guān)注并迅速地發(fā)展著,歷時(shí)18年,電子游戲就成為了世界上科技水平較為發(fā)達(dá)的國(guó)家的電子娛樂(lè)工業(yè)基石。直到美國(guó)電子游戲業(yè)發(fā)生了雅達(dá)利震蕩,電子游戲市場(chǎng)遭到世界性的重創(chuàng),全世界都對(duì)電視電子游戲失去信心,在這之后的兩年,北美地區(qū)游戲市場(chǎng)上再也沒(méi)有具有劃時(shí)代意義的電子游戲出現(xiàn),電子游戲的發(fā)展遇到了最大的瓶頸,直到1985年日本公司任天堂打破僵局使得游戲事業(yè)得以重生,電子游戲產(chǎn)業(yè)一躍成為可以與當(dāng)時(shí)最受歡迎的電影業(yè)競(jìng)爭(zhēng)獲利最高的娛樂(lè)產(chǎn)業(yè)。直至今日,電子游戲產(chǎn)業(yè)一直在飛躍發(fā)展,受到先進(jìn)的開(kāi)發(fā)引擎兼完善的游戲交易平臺(tái)加持,在娛樂(lè)產(chǎn)業(yè)中以不可阻擋的勢(shì)頭占據(jù)著領(lǐng)軍地位。國(guó)外擁有著最高開(kāi)發(fā)預(yù)算和推廣級(jí)別的電子游戲,在游戲開(kāi)發(fā)中伴隨著高額的經(jīng)濟(jì)風(fēng)險(xiǎn),大量的開(kāi)發(fā)成本的投入讓國(guó)外游戲理所當(dāng)然地?fù)碛兄罡叩难邪l(fā)水準(zhǔn)。無(wú)論是玩法上地創(chuàng)新還是視覺(jué)上的震撼體驗(yàn)都能讓玩家驚嘆,下至劇情及配音,無(wú)一不體現(xiàn)超高的開(kāi)發(fā)水準(zhǔn)。在各領(lǐng)域的游戲制作上都遙遙領(lǐng)先,出名的游戲研發(fā)廠(chǎng)商有“游戲界航空母艦“之稱(chēng)的EA、任天堂、索尼娛樂(lè)、育碧等。游戲引擎方面,位于游戲引擎之首的虛幻引擎(Unreal)5年前在開(kāi)放世界游戲領(lǐng)域上產(chǎn)出了驚世之作《GTA5》,以豐富巧妙的規(guī)則設(shè)定還原了一個(gè)虛擬的現(xiàn)實(shí)城市;Gamebryo、Creation引擎,創(chuàng)造了運(yùn)動(dòng)模擬類(lèi)的大作《極品飛車(chē)》《NBA》等,將賽車(chē)籃球等運(yùn)動(dòng)體驗(yàn)真實(shí)的還原到了游戲中;起源引擎(Source)則是創(chuàng)造了MOBA類(lèi)競(jìng)技游戲玩法的頂尖作品《Dota2》;創(chuàng)建了世界上數(shù)一數(shù)二的Havock物理引擎的IWEngine引擎,其優(yōu)秀的物理引擎甚至用于好萊塢電影制作,作品《使命召喚》也是無(wú)比優(yōu)秀的作品。自主研發(fā)的游戲引擎也孕育了不少風(fēng)靡世界的作品:暴雪的《守望先鋒》和Riot的《英雄聯(lián)盟》?!皣?guó)外的游戲越做越真,國(guó)內(nèi)的鯤越吞越大”,這句在網(wǎng)絡(luò)上令人啼笑皆非的玩笑話(huà)無(wú)法概括國(guó)內(nèi)所有的游戲產(chǎn)業(yè)環(huán)境,但是在一定程度上體現(xiàn)了玩家群體對(duì)國(guó)內(nèi)的游戲開(kāi)發(fā)技術(shù)的蔑視與譏諷。但是事實(shí)并不是這樣,當(dāng)前國(guó)產(chǎn)的網(wǎng)絡(luò)研發(fā)引擎主要為自行研發(fā)。首先開(kāi)發(fā)了《魔域》、《征服》、《投名狀Online》等優(yōu)秀游戲作品的C3、S3游戲引擎就是網(wǎng)龍公司的自主研發(fā)的;其次產(chǎn)出了《天驕3》的OverMax游戲引擎也是由國(guó)內(nèi)自主研發(fā)的杰作;最后是完美時(shí)空公司自主研發(fā)的游戲引擎Angelica,代表作品《完美世界》,以上的作品都是優(yōu)秀且受玩家追捧的,可以看出國(guó)內(nèi)游戲發(fā)開(kāi)企業(yè)在游戲開(kāi)發(fā)的核心技術(shù)方面已經(jīng)具備了強(qiáng)大的能力,但在產(chǎn)品研發(fā)的方面的創(chuàng)新思想較為薄弱,一味效仿,追隨其后,后續(xù)產(chǎn)出的作品同質(zhì)化強(qiáng)。騰訊公司出自Unty3D引擎的MOBA類(lèi)手游《王者榮耀》,在2018年以19.3億美元的的年收入登上全球收入第一手機(jī)游戲的寶座,更是在2019年免費(fèi)游戲年收入排行榜上,以一億的年收入差距壓制了網(wǎng)游巨頭《英雄聯(lián)盟》,同期擠入了前十的游戲還有出自虛幻4引擎的手機(jī)游戲《和平精英》,亦出于是經(jīng)營(yíng)模式的不同,國(guó)內(nèi)雖擁有制作優(yōu)秀游戲的水平,但是在以盈利為主要目的游戲產(chǎn)業(yè)里,國(guó)內(nèi)的游戲廠(chǎng)商更傾向于避開(kāi)高額的經(jīng)濟(jì)風(fēng)險(xiǎn)降低開(kāi)發(fā)成本,著重于獲得用戶(hù)后的運(yùn)營(yíng)管理,依靠著巨大的玩家基數(shù)和優(yōu)秀的運(yùn)營(yíng)模式獲得巨額利潤(rùn),在經(jīng)營(yíng)上取得巨大的成功,從而作品本身缺乏新鮮感與沖擊力。設(shè)計(jì)思路本設(shè)計(jì)計(jì)劃基于A(yíng)star尋路算法,以觀(guān)察戰(zhàn)略形式?jīng)Q定士兵落點(diǎn)及進(jìn)攻方向的操作方式,在士兵部署后通過(guò)Astar尋路算法自動(dòng)尋找距離最近的攻擊目標(biāo)進(jìn)行尋路及攻擊。制定多個(gè)士兵狀態(tài)互相協(xié)調(diào)的AI系統(tǒng),完成防御建筑與士兵之間的包圍盒互相檢測(cè)與自動(dòng)攻擊,制作不同的兵種AI與防御建筑類(lèi)型來(lái)提高可玩性,初步設(shè)想兵種分為普通戰(zhàn)士、擁有高額生命值的獸人族傭兵、擁有在遠(yuǎn)程攻擊能力的射手或法師;防御建筑類(lèi)型分為單體攻擊的弓箭發(fā)射塔及范圍傷害的炮塔。在士兵部署后玩家可以通過(guò)使用通關(guān)后獲得的輔助魔法輔助場(chǎng)上的士兵進(jìn)行作戰(zhàn)。每一關(guān)根據(jù)持有的金幣雇傭不用費(fèi)用和屬性的兵種進(jìn)行戰(zhàn)斗。讓玩家在觀(guān)察進(jìn)攻地形的同時(shí)思考優(yōu)勢(shì)兵種以及進(jìn)攻思路從而獲得戰(zhàn)斗獎(jiǎng)勵(lì),在戰(zhàn)斗中讓防御類(lèi)建筑概率掉了輔助魔法藥水,增加戰(zhàn)斗的多樣性和未知性,從而增添游戲的趣味性。在場(chǎng)景中使用火焰、雷電、爆炸等粒子效果增加游戲的視覺(jué)沖擊力。

游戲開(kāi)發(fā)工具介紹游戲引擎游戲引擎是將游戲開(kāi)發(fā)過(guò)程中常用的模塊組建在一起的工具,能夠減少游戲開(kāi)發(fā)中花在基礎(chǔ)部分建設(shè)的時(shí)間,通常包括物理引擎、音效、腳本引擎、渲染引擎、動(dòng)畫(huà)系統(tǒng)、碰撞檢測(cè)系統(tǒng)幾個(gè)部分,是當(dāng)下游戲研發(fā)過(guò)程中必備的重要工具。優(yōu)秀的游戲開(kāi)發(fā)引擎往往可以更好地孕育優(yōu)秀的游戲。Unity3D游戲開(kāi)發(fā)引擎Unity3D的logo由三個(gè)互相連接著的箭頭組成,正如Unity這個(gè)名字一樣寓意著團(tuán)結(jié)。Unity公司在游戲開(kāi)發(fā)成本高昂的背景下,發(fā)布了功能強(qiáng)大的免費(fèi)獨(dú)立版Unity2.6,且依靠著對(duì)iOS和Wii(任天堂電視游戲主機(jī))平臺(tái)的支持的在眾多游戲引擎中脫穎而出。本設(shè)計(jì)使用的版本為Unity2019.2.19。Unity3D游戲開(kāi)發(fā)引擎(以下簡(jiǎn)稱(chēng)U3D)是世界上用戶(hù)量最多的游戲開(kāi)發(fā)引擎,擁有適合新手學(xué)習(xí)的免費(fèi)個(gè)人版和深度開(kāi)發(fā)的專(zhuān)業(yè)版,引擎中集成了一系列用于游戲開(kāi)發(fā)的模塊化工具,憑借著強(qiáng)大的跨平臺(tái)特性在頂尖游戲開(kāi)發(fā)引擎里占據(jù)了一席之地,時(shí)至今日,U3D所支持的研發(fā)平臺(tái)已超過(guò)30個(gè),強(qiáng)大的跨平臺(tái)特性意味著使用該引擎將能夠大量減少開(kāi)發(fā)過(guò)程中用于解決平臺(tái)差異的時(shí)間。U3D在集合多種開(kāi)發(fā)工具的同時(shí)擁有著個(gè)性化的人機(jī)交互界面,具備著視覺(jué)化編輯(Scene視圖)和預(yù)覽動(dòng)態(tài)游戲的特性(Game視圖),動(dòng)態(tài)監(jiān)測(cè)資源占用狀況的性能分析器(Profiler),同時(shí)擁有可以在游戲運(yùn)行圖中實(shí)時(shí)修改參數(shù)的屬性編輯器(Inspector視圖)。有了跨平臺(tái)及用戶(hù)基數(shù)大的基礎(chǔ),使得U3D在資源的獲取以及導(dǎo)入上也尤為方便,U3D幾乎能夠支持所有的主流三維格式,且能夠?qū)①N圖材質(zhì)自動(dòng)轉(zhuǎn)換為能與相關(guān)應(yīng)用程序協(xié)調(diào)工作的U3D格式,U3D還擁有著官方的資源商店AssetStore,用戶(hù)能夠在A(yíng)ssetStore上發(fā)布或下載導(dǎo)入各種需要的資源。在腳本編譯上,U3D中的MonoDeveloper編譯環(huán)境支持本設(shè)計(jì)使用的C#語(yǔ)言,此外還支持Boo、JavaScript。A*PathFinding組件本設(shè)計(jì)中引入了AssetStore中的AstarPathFindingProject(A*尋路插件),用于輔助游戲中的尋路邏輯。該插件中定義了三種網(wǎng)格類(lèi)型:第一種是可實(shí)現(xiàn)精確的移動(dòng),高速度且占用內(nèi)存最小的Navmeshes(導(dǎo)航網(wǎng)絡(luò)),Navmeshes是基于三角形構(gòu)建的導(dǎo)航網(wǎng)絡(luò),每個(gè)三角形都制定了AI可以行走的區(qū)域,因?yàn)閷?dǎo)航網(wǎng)格可以構(gòu)建出帶有很少三角形的大區(qū)域的緣故,使得Navmeshes適合在在包含的開(kāi)放區(qū)域少的游戲里使用;第二種是能夠快速更新、具有更高靈活性的GridGraphs(網(wǎng)格圖),GridGraphs通過(guò)將節(jié)點(diǎn)像網(wǎng)格一樣排列的模式來(lái)構(gòu)建網(wǎng)格圖,每一個(gè)節(jié)點(diǎn)都被放置在場(chǎng)景中并且在網(wǎng)格坐標(biāo)處采樣收集信息,這樣的規(guī)則結(jié)構(gòu)讓GridGraphs能夠更快速地更新,適合需要頻繁更新地圖建筑物狀態(tài)地游戲,常用于TD類(lèi)游戲和RTS類(lèi)游戲;第三種是靈活性最高且能夠?qū)崿F(xiàn)自定義的PointGraphs(點(diǎn)圖),能夠從向其拋出的任何點(diǎn)列表中構(gòu)造點(diǎn)圖。本設(shè)計(jì)采用的網(wǎng)格類(lèi)型為GridGraphs。AstarPathFinding組件可以同時(shí)支持大量的代理尋路,能夠管理巨大的游戲世界。同時(shí)項(xiàng)目中含有豐富實(shí)用的API接口,幫助開(kāi)發(fā)者實(shí)現(xiàn)一些常用的功能,如在網(wǎng)格圖中添加建筑物生成障礙物、在導(dǎo)航網(wǎng)格中生成隨機(jī)點(diǎn)等功能,還有最重要的該插件支持發(fā)行到U3D支持的任何平臺(tái)。物理引擎3D游戲在體驗(yàn)上本質(zhì)區(qū)別于2D游戲的關(guān)鍵是物體的物理真實(shí)互動(dòng)效果,U3D在原有的PhysX物理引擎外,在去年還加入了Havok物理引擎,兩款物理引擎的加持使U3D能夠非常出色地模擬物理效果,但是需要注意的是,Physx物理引擎使用的摩擦模型是針對(duì)性能和穩(wěn)定性的模擬,摩擦力計(jì)算在兩個(gè)面接觸的時(shí)候會(huì)被計(jì)算成現(xiàn)實(shí)物理學(xué)的兩倍,需要調(diào)整摩擦系數(shù)才能還原更真實(shí)的結(jié)果。許多優(yōu)秀的游戲大作及電影都會(huì)使用物理引擎,在U3D中可以給游戲物體添加Rigidbody組件來(lái)賦予物體物理效果。相似的組件還有CharacterControllers、Collider等,開(kāi)發(fā)者可以調(diào)節(jié)組件中的參數(shù)來(lái)實(shí)現(xiàn)預(yù)期的物理效果。任何一個(gè)游戲的設(shè)計(jì)都需要其物體特性的合理性,這樣才顯得真實(shí)可信。粒子效果系統(tǒng)現(xiàn)實(shí)世界中的水流、煙霧、火焰、浮云、星辰、光線(xiàn)、爆炸等抽象的視覺(jué)效果,這些抽象的視覺(jué)效果很難用傳統(tǒng)的渲染技術(shù)達(dá)到很高的真實(shí)感,而粒子系統(tǒng)則是模擬這些特定的模糊現(xiàn)象的計(jì)算機(jī)圖形學(xué)技術(shù),通過(guò)粒子的模糊性和制定的特定運(yùn)動(dòng)規(guī)律和邊界參數(shù)描述粒子,使得粒子系統(tǒng)能夠幫助開(kāi)發(fā)者在游戲世界中制造現(xiàn)實(shí)中的模糊事物。粒子系統(tǒng)的核心為用于控制共享時(shí)間軸的ParticleSystem,場(chǎng)景中可以擁有多個(gè)粒子系統(tǒng),并且每一個(gè)粒子系統(tǒng)都有自己?jiǎn)为?dú)的時(shí)間軸,發(fā)射后通過(guò)ParticlePainter對(duì)粒子進(jìn)行可視化顯示,粒子可以被賦予逐漸透明化的貼圖材質(zhì)和粒子渲染參數(shù)來(lái)達(dá)到模糊的視覺(jué)效果。粒子系統(tǒng)與物理引擎互相輔助可以還原出以假亂真的游戲世界,給玩家?guī)?lái)震撼的視覺(jué)體驗(yàn)。C#C#是微軟公司發(fā)布的高級(jí)程序設(shè)計(jì)語(yǔ)言,擁有面向?qū)ο蟮奶匦?,與Java有著相似的編譯成中間代碼再運(yùn)行的流程和編輯語(yǔ)法,和Java有很大的相似之處。C#并不是跨平臺(tái)語(yǔ)言,只有運(yùn)行于.NETCore平臺(tái)(微軟官方的開(kāi)源計(jì)算機(jī)軟件框架)上時(shí)才能實(shí)現(xiàn)跨平臺(tái),本設(shè)計(jì)的C#語(yǔ)言運(yùn)行于.NETFramework4.7之上,而能夠在U3D中使用C#編輯腳本的原因是在U3D中Mono對(duì)C#語(yǔ)言進(jìn)行了重新實(shí)現(xiàn),使得U3D能夠使用C#語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā)。而選擇C#作為開(kāi)發(fā)語(yǔ)言的原因是C#比起需要頻繁拆裝箱操作的UnityScript速度更快,U3D的C#語(yǔ)言的開(kāi)發(fā)文檔也是最完善的,在遇到問(wèn)題的時(shí)候更容易解決。VSVS全稱(chēng)MircrosoftVisualStudio,是在編程行業(yè)內(nèi)非常常用的一套開(kāi)發(fā)環(huán)境,包括了開(kāi)發(fā)一個(gè)軟件所需要的絕大部分基本工具,編輯的代碼程序能夠在微軟支持的所有平臺(tái)運(yùn)行,本設(shè)計(jì)中采用的VS版本為VisualStudio2017,.NET版本為.NETFramework4.7。AudacityAudacity是一款流行于Linux系統(tǒng)的的免費(fèi)跨平臺(tái)音頻處理軟件,具有小體積、開(kāi)源、操作簡(jiǎn)單、功能豐富等特點(diǎn),本設(shè)計(jì)中將使用Audacity裁剪制作游戲內(nèi)需要用到的音頻資源,使用的版本為Audacity2.3.2。VLCVLC是一款開(kāi)源的跨平臺(tái)多媒體免費(fèi)軟件,這款軟件支持眾多的音頻與視頻解碼器,能夠?qū)σ纛l或視頻文件進(jìn)行格式轉(zhuǎn)換,同時(shí)還有體積小巧的特點(diǎn),本設(shè)計(jì)中將使用VLC將視頻素材.flv文件轉(zhuǎn)換成U3D使用的的.ogg格式音頻文件供Audacity裁剪使用,使用版本為VLC-3.0.6。GIMPGIMP全稱(chēng)GNUImageManipilationProgram,是一款免費(fèi)開(kāi)源的跨平臺(tái)圖像處理軟件。不得不說(shuō)的是,這些開(kāi)源免費(fèi)的軟件通常直接就把軟件的功能精簡(jiǎn)后作為軟件的名稱(chēng),GIMP擁有不遜于圖像處理巨頭Photoshop的功能的同時(shí),擁有比Photoshop更簡(jiǎn)潔的界面,外加上軟件體積小及免費(fèi)開(kāi)源的特點(diǎn),GIMP在Linux系統(tǒng)下深受歡迎,擁有Linux系統(tǒng)的Photoshop稱(chēng)號(hào),本設(shè)計(jì)將使用GIMP裁剪修改UI圖片的素材,使用版本為GIMP2.10.12。

游戲設(shè)計(jì)目標(biāo)和任務(wù)撒本設(shè)計(jì)將完成一款緩解生活中快節(jié)奏狀態(tài)的休閑即時(shí)戰(zhàn)略游戲,用于調(diào)整工作生活中的不良情緒,同時(shí)在閑暇時(shí)間感受游戲的帶來(lái)的快感,體驗(yàn)用領(lǐng)袖的玩家視角調(diào)遣戰(zhàn)士進(jìn)行攻擊的感覺(jué),從而達(dá)到在游戲后心曠神怡的良好狀態(tài)的目的。亦能在游戲中鍛煉到玩家的、判斷能力和邏輯思維能力和對(duì)環(huán)境的觀(guān)察能力,發(fā)揮策略型游戲的良性功能。功能需求分析能夠獲取鼠標(biāo)點(diǎn)擊信息的按鈕以及在游戲場(chǎng)景中再次點(diǎn)擊后能夠在鼠標(biāo)指針處生成對(duì)應(yīng)兵種的士兵。生成的士兵能夠自動(dòng)尋找距離最近的敵方目標(biāo)繞開(kāi)障礙物進(jìn)行尋路。敵方建筑能夠被士兵攻擊并破壞消除。士兵破壞首要目標(biāo)后能夠自動(dòng)尋找下一個(gè)攻擊目標(biāo)并自動(dòng)尋路。士兵需要能夠被防御型建筑物攻擊造成傷害并消除。擁有遠(yuǎn)程攻擊能力的士兵需要能夠隔著城墻攻擊墻內(nèi)的建筑物。防御型建筑需要選中進(jìn)入范圍的士兵進(jìn)行攻擊。防御型建筑在消滅當(dāng)年攻擊目標(biāo)前不能將火力轉(zhuǎn)向其他目標(biāo)。需要有選定防御建筑為攻擊目標(biāo)的兵種。需要有范圍攻擊的防御建筑。攻擊目標(biāo)消滅后能夠自動(dòng)選擇下一個(gè)目標(biāo),直到范圍內(nèi)沒(méi)有目標(biāo)為止。帶有生命值的游戲物體在受到傷害時(shí)候需要能夠顯示血條。血條需要以不同的顏色來(lái)動(dòng)態(tài)地反映游戲物體的生命狀況。構(gòu)建金幣系統(tǒng),玩家通過(guò)使用擁有的金幣雇傭士兵,進(jìn)行游戲獲得金幣。構(gòu)建根據(jù)破壞程度來(lái)對(duì)游戲結(jié)果進(jìn)行評(píng)分的評(píng)分系統(tǒng)。聲音開(kāi)關(guān)選項(xiàng)按鈕、暫停按鈕、認(rèn)輸按鈕和重新開(kāi)始按鈕。需要有開(kāi)始界面、兵力儲(chǔ)備界面、加載界面、結(jié)束界面。性能需求分析士兵生成按鈕點(diǎn)擊后響應(yīng)時(shí)間在0.2秒以?xún)?nèi)。士兵尋路AI響應(yīng)時(shí)間在0.2秒以?xún)?nèi),尋路過(guò)程中除非目標(biāo)丟失不得停頓。士兵在抵達(dá)攻擊范圍處在0.2秒內(nèi)需要做出攻擊。士兵目標(biāo)丟失后停頓時(shí)間在0.5秒內(nèi)需要做出尋找新目標(biāo)行為。防御塔在目標(biāo)進(jìn)入范圍的響應(yīng)時(shí)間在0.2秒內(nèi)。防御塔丟失當(dāng)前目標(biāo)后重新選擇攻擊目標(biāo)的響應(yīng)時(shí)間在0.2秒內(nèi)。在場(chǎng)景中存在50個(gè)或以上AI同時(shí)自動(dòng)行動(dòng)時(shí)候保持流暢。在場(chǎng)景中連續(xù)使用10個(gè)以上法術(shù)召喚大量隕石時(shí)需保存流暢。數(shù)據(jù)需求分析建筑物在游戲中擁有最高的生命值。單體攻擊型建筑在游戲中擁有最高的攻擊距離。單體攻擊建筑攻擊力數(shù)值需要高于范圍攻擊建筑的攻擊力數(shù)值。肉盾戰(zhàn)士在士兵中擁有最高的生命值體現(xiàn)肉盾價(jià)值。肉盾戰(zhàn)士只能擁有最低的移動(dòng)速度。遠(yuǎn)程士兵只能擁有較少的最大生命值和攻擊力。遠(yuǎn)程士兵的攻擊距離應(yīng)小于任何防御型建筑物的攻擊距離??傮w設(shè)計(jì)

游戲功能圖游戲內(nèi)的對(duì)象大致分為三種:士兵、防御塔和法術(shù)藥水,士兵功能包括選擇目標(biāo)、尋路移動(dòng)、攻擊和死亡;防御塔功能包括選擇攻擊和受損;法術(shù)藥水功能包括碰撞傷害和粒子效果,整個(gè)游戲的大體功能圖如下。圖3-1游戲功能圖

游戲流程圖玩家在進(jìn)入游戲后在士兵購(gòu)買(mǎi)頁(yè)面購(gòu)買(mǎi)士兵進(jìn)入游戲場(chǎng)景,在場(chǎng)景中點(diǎn)擊士兵選擇按鈕部署士兵,士兵AI開(kāi)始行動(dòng),AI全部陣亡則游戲失敗,摧毀所有目標(biāo)則游戲勝利,整個(gè)運(yùn)作過(guò)程如下。圖3-2游戲流程圖

E-R圖E-R圖中展示了士兵實(shí)體、法術(shù)藥水實(shí)體及隕石實(shí)體的基本屬性及與建筑物實(shí)體之間的聯(lián)系,士兵實(shí)體中包含了兩個(gè)特殊實(shí)體弓箭兵和肉盾戰(zhàn)士,分別擁有遠(yuǎn)程攻擊距離和優(yōu)先攻擊防御建筑的特性,圖示如下。圖3-3E-R圖

游戲素材模型獲取在中下載的人物模型和貼圖:士兵、弓箭兵、肉盾戰(zhàn)士。圖4-1肉盾戰(zhàn)士圖4-2弓箭兵圖4-3士兵給人物模型配置模型貼圖。圖4-4貼圖配置在A(yíng)ssetStore中下載的模型資源:lowpolymedieevalbuildings資源包,包含房屋模型、弓箭塔模型、炮塔模型。圖4-5資源包 Floormaterialspack資源包,包含地板材質(zhì)貼圖。 YughuesFreeGroundMaterials資源包,包含草皮地板材質(zhì)貼圖。 SkyboxSeriesFree資源包,包含天空盒子材質(zhì)貼圖。 DreamForestTree資源包,包含樹(shù)木貼圖、草叢貼圖。 RockyMeadowAsset資源包,包含石頭模型與貼圖。圖4-6資源包免費(fèi)的中世紀(jì)武器資源包,包含弓箭模型與貼圖。Potion,CoinAndBox資源包,包含法術(shù)藥瓶、寶箱模型與貼圖。Fire&SpellEffect資源包,包含隕石模型與貼圖。圖4-7資源包動(dòng)畫(huà)獲取在中下載普通骨骼的動(dòng)作素材包,分段裁剪出角色的基本行為動(dòng)畫(huà):步行、跑步、閑置、攻擊、死亡、歡呼。粒子效果獲取使用Fire&SpellEffect資源包中內(nèi)漢的爆炸粒子效果及火焰粒子效果。布置場(chǎng)景和預(yù)制體將下載的模型資源導(dǎo)入到游戲目錄下,配置貼圖測(cè)試完畢后打包成預(yù)制體供游戲邏輯使用。

游戲設(shè)計(jì)搭建場(chǎng)景場(chǎng)景設(shè)計(jì)游戲中包含兩種場(chǎng)景:兵力準(zhǔn)備階段的雇傭士兵場(chǎng)景1(游戲準(zhǔn)備階段界面)和下落士兵的游戲進(jìn)行場(chǎng)景2。場(chǎng)景1將在Game視窗中向玩家展示兵種的外觀(guān)及其屬性面板以及價(jià)格,在展示的兵種下方放置購(gòu)買(mǎi)按鈕,當(dāng)按鈕被點(diǎn)擊時(shí)、玩家能夠在場(chǎng)景2種使用該兵種的數(shù)量增加1,同時(shí)扣除兵種價(jià)格對(duì)應(yīng)的金幣。場(chǎng)景2為游戲場(chǎng)景,包含以下模塊:供士兵移動(dòng)尋路導(dǎo)航的戰(zhàn)斗地面(以下稱(chēng)導(dǎo)航地形)。安置樹(shù)木、草叢、石頭等周邊環(huán)境游戲?qū)ο蟮倪吘壘彌_地面(以下稱(chēng)環(huán)境地形)布置外景環(huán)境的天空盒子。敵方建筑與城墻。放置于Game視圖底部的玩家剩余可使用士兵/物品的UI面板。能夠自由移動(dòng)轉(zhuǎn)向且能夠切換2D/3D(正交/透視)視圖模式的攝像機(jī)。場(chǎng)景制作場(chǎng)景1制作思路:使用GIMP裁剪購(gòu)買(mǎi)界面UI圖片至包含三個(gè)透明窗口,將攝像機(jī)模式調(diào)整為Othographic(以下稱(chēng)為正交)模式,將三種兵種放置于對(duì)應(yīng)的透明窗口之后,設(shè)置三種兵種的默認(rèn)動(dòng)畫(huà)為閑置,這樣在玩家在此界面中就可以觀(guān)察到兵種動(dòng)態(tài)的活動(dòng)畫(huà)面。在兵種的購(gòu)買(mǎi)按鈕上鏈接上兵種購(gòu)買(mǎi)的函數(shù),將兵種數(shù)量及對(duì)應(yīng)種類(lèi)存入一個(gè)數(shù)據(jù)在各個(gè)場(chǎng)景種互相連通的腳本中并在加載游戲場(chǎng)景時(shí)將兵種數(shù)量數(shù)據(jù)傳遞出去,具體實(shí)現(xiàn)邏輯見(jiàn)5.6.4其他界面。場(chǎng)景2制作:在測(cè)試各模塊功能的時(shí)候均使用最基本的Plane平面來(lái)模擬導(dǎo)航地形,而在正式的合成各模塊的場(chǎng)景中,使用U3D的地面建造系統(tǒng)Terrain來(lái)搭建地形,直接右鍵Hierarchy面板中的空白部分創(chuàng)建3DObjectTerrain。在Inspector視窗中選擇Terrain組件中的TerrainSettings按鈕處設(shè)置地形的大小限制,設(shè)置TerrainWidth及TerrainLength為160,設(shè)置此組件的Layer為Ground。再創(chuàng)建環(huán)境地形,設(shè)置TerrainWidth及TerrainLength為180,調(diào)整導(dǎo)航地形位置Transform組件的Position屬性至環(huán)境地形的中央。通過(guò)Window下的Rendering打開(kāi)LightingSettings窗口,將準(zhǔn)備好的天空盒子素材拖入Environment下的SkyboxMaterial中,在場(chǎng)景中完成主要地面及外景的搭建,在Terrain地形外圈使用PaintDetails組件與PaintTrees組件鋪設(shè)草坪與植株模型貼圖完成周邊環(huán)境的搭建。圖5-1游戲主地面整體圖5-2地形邊緣不可移動(dòng)區(qū)域植被士兵腳本士兵基本屬性基類(lèi)士兵基類(lèi)腳本ArmyController:為所有士兵類(lèi)型定義了受到傷害的函數(shù),在不同類(lèi)型兵種受到傷害時(shí)均調(diào)用此函數(shù)完成士兵生命值的衰減。圖5-3士兵基類(lèi)腳本AStarPathfinding插件實(shí)現(xiàn)尋路實(shí)現(xiàn)原理與使用A*尋路算法是一種基于靜態(tài)位置的高效搜索算法,使用A*尋路算法來(lái)搜索路徑一般有兩個(gè)條件:第一是場(chǎng)景有靜態(tài)路網(wǎng),即地圖中的地理屬性是設(shè)計(jì)好的靜態(tài)屬性;第二個(gè)是已知出發(fā)點(diǎn)和目標(biāo)點(diǎn),A*尋路算法的結(jié)果是通向目標(biāo)點(diǎn)的最短路徑,采用啟發(fā)式搜索的方式一步步地判斷出發(fā)點(diǎn)鄰近方格到達(dá)目標(biāo)點(diǎn)及出發(fā)點(diǎn)的成本,選擇成本最低的方格作為移動(dòng)方向,在此方格中再次判斷臨近方格到達(dá)目標(biāo)點(diǎn)及出發(fā)點(diǎn)的成本選處下一個(gè)最低成本的方格作為移動(dòng)方向,直到到達(dá)目標(biāo)點(diǎn)。貪婪且高效的搜尋方式使得A*尋路算法成為了游戲開(kāi)發(fā)最常用的尋路算法,沒(méi)有之一。通過(guò)閱讀A*PathfindingProject的官方文檔及資源包中自帶的示例場(chǎng)景中演示的各種環(huán)境下的尋路腳本,了解到該資源包實(shí)現(xiàn)A*尋路的方法,開(kāi)發(fā)者可以在場(chǎng)景中掛載AstarPath組件(如圖5-4所示)進(jìn)而在導(dǎo)航地形上生成不同種類(lèi)的導(dǎo)航網(wǎng)格,在Graphs下定義及修改網(wǎng)格的大小及位置,同時(shí)可以在Collisiontesting下的ObstacleLayerMask中定義不可以作為移動(dòng)區(qū)域的障礙物層。在需要尋路的游戲物體上掛載Seeker組件及AIPath組件(如圖5-5所示),Seeker組件將計(jì)算出掛載物體的位置到傳入IAstarAI接口的目標(biāo)點(diǎn)的路徑,AIPath組件則定義了尋路物體的基本屬性:半徑、高度、速度、轉(zhuǎn)向速度等基本屬性,并使掛載物體遵循Seeker組件計(jì)算的路徑移動(dòng),本設(shè)計(jì)在這個(gè)基礎(chǔ)上編寫(xiě)運(yùn)動(dòng)邏輯腳本構(gòu)建各個(gè)兵種AI,實(shí)現(xiàn)不同攻擊距離的兵種的差別尋路。圖5-4AtraPath組件下的網(wǎng)格類(lèi)導(dǎo)航網(wǎng)格的生成與配置圖5-5尋路游戲?qū)ο笊蠏燧d的AIPath組件與Seeker組件配置肉盾戰(zhàn)士肉盾戰(zhàn)士在邏輯上除優(yōu)先選擇防御塔作為優(yōu)先攻擊目標(biāo)尋路外其余部分與普通士兵基本相同,參考以下的戰(zhàn)士邏輯,肉盾戰(zhàn)士在本文中不做描述。戰(zhàn)士尋路函數(shù)如直接選擇建筑物作為尋路目標(biāo)點(diǎn),所有以此建筑物為攻擊目標(biāo)的士兵都會(huì)朝建筑物中心坐標(biāo)進(jìn)行移動(dòng),士兵尋路過(guò)程中將出現(xiàn)互相阻擋的狀況。且建筑物的模型中心偏移時(shí),將出現(xiàn)目標(biāo)點(diǎn)固定以至于士兵會(huì)饒到建筑后方的情況,為解決此問(wèn)題,這里使用指向建筑物的射線(xiàn)檢測(cè)與建筑物包圍盒碰撞處獲取碰撞信息將碰撞位置作為士兵的尋路目標(biāo)點(diǎn)。圖5-6士兵尋路函數(shù)Seek戰(zhàn)士攻擊函數(shù)士兵的攻擊邏輯分為三部分:第一部分為遍歷所有建筑對(duì)象,通過(guò)存入列表并獲取距離進(jìn)行長(zhǎng)度排列得出最近的建筑物作為攻擊目標(biāo)觸發(fā)尋路函數(shù);第二部分為士兵到達(dá)尋路目標(biāo)點(diǎn)后檢測(cè)建筑物的存活狀態(tài),滿(mǎn)足攻擊條件則播放攻擊動(dòng)畫(huà)。第三部分為士兵觸發(fā)攻擊動(dòng)畫(huà)后,在動(dòng)畫(huà)狀態(tài)機(jī)控制腳本里檢測(cè)攻擊動(dòng)畫(huà)播放進(jìn)度,到達(dá)揮刀落下處時(shí)觸發(fā)傷害函數(shù)。圖5-7遍歷建筑物選擇攻擊目標(biāo)圖5-8檢測(cè)是否滿(mǎn)足攻擊條件圖5-9動(dòng)畫(huà)途中觸發(fā)傷害函數(shù)弓箭兵尋路函數(shù)弓箭兵區(qū)別于普通士兵的地方在于弓箭兵需要能夠隔著城墻對(duì)建筑物進(jìn)行攻擊,從而需要不一樣的尋路函數(shù),通過(guò)發(fā)射檢測(cè)城墻層碰撞的射線(xiàn)以及不檢測(cè)城墻層碰撞的射線(xiàn)獲取兩個(gè)碰撞信息,在兩個(gè)碰撞點(diǎn)距離大于弓箭兵攻擊距離時(shí)候,將選擇不檢測(cè)城墻層的碰撞點(diǎn)為尋路目標(biāo)點(diǎn),反之判定能夠在城墻外攻擊到該建筑,選擇檢測(cè)城墻層的射線(xiàn)碰撞點(diǎn)為尋路目標(biāo)點(diǎn),由于此處使用的距離并非為建筑與城墻的垂直距離,因此只能大致地判斷,并不是絕對(duì)準(zhǔn)確的結(jié)果。圖5-10建筑物在墻內(nèi)墻外的判斷邏輯弓箭兵攻擊函數(shù)弓箭兵類(lèi)在基礎(chǔ)屬性上額外增加了用于檢測(cè)攻擊對(duì)象的攻擊范圍包圍盒Range(如圖5-13所示),實(shí)現(xiàn)了攻擊范圍包圍盒Range中開(kāi)放的IArcherRange接口中的RangeColliderHander方法,實(shí)現(xiàn)在尋路過(guò)程中當(dāng)有攻擊對(duì)象進(jìn)入Range包圍盒時(shí)將改變弓箭兵的狀態(tài)為攻擊狀態(tài)的功能,Range包圍盒上的腳本ArcherRange:開(kāi)放了IArcherRange接口提供RangeColliderHander方法,并在包圍盒檢測(cè)到物體進(jìn)入時(shí)將碰撞信息傳遞出去(此處Range包圍盒在物理碰撞上設(shè)置了僅與建筑物層發(fā)生碰撞)并將自身的激活狀態(tài)改為false,以避免同時(shí)碰撞兩個(gè)物體的情況出現(xiàn)。,根據(jù)模型動(dòng)畫(huà)相對(duì)位置定義了弓箭的發(fā)射位置ShootPoint(如圖5-11所示)。圖5-11ShootPoint位置圖5-12實(shí)現(xiàn)接口函數(shù)圖5-13Range攻擊范圍包圍盒弓箭運(yùn)動(dòng)腳本弓箭游戲?qū)ο笥葾rcherAttackSMB中實(shí)例化后從ArcherController腳本中獲取了攻擊目標(biāo),弓箭發(fā)射腳本ArrowShoot將完成弓箭朝攻擊目標(biāo)移動(dòng)、與攻擊目標(biāo)接觸后觸發(fā)建筑物傷害函數(shù)后或者目標(biāo)丟失后并銷(xiāo)毀自身的功能,因建筑物為靜態(tài)游戲?qū)ο?,所以弓箭使用MoveTowards()函數(shù)移動(dòng)。圖5-14弓箭發(fā)射腳本邏輯建筑物腳本普通建筑基類(lèi)建筑物基類(lèi)腳本定義了生命值、健康狀態(tài)等變量和基本的觸發(fā)傷害函數(shù)、獲取聲明狀態(tài)函數(shù)、獲取血量比例函數(shù)。在生命值小于0后摧毀建筑物游戲?qū)ο蟮耐瑫r(shí)使用AstarPath.active.UpdateGraphs()函數(shù)更新建筑物占地區(qū)域的導(dǎo)航網(wǎng)格信息使該位置變回空地。圖5-15建筑物被摧毀后更新導(dǎo)航地形防御塔類(lèi)防御塔控制腳本將進(jìn)入防御塔檢測(cè)包圍盒士兵游戲?qū)ο蟠嫒氪袅斜碇?,并將離開(kāi)包圍盒范圍的游戲?qū)ο髲拇袅斜砝飫h除。定義了一個(gè)用于比較的巨大參數(shù),遍歷待攻擊的列表,計(jì)算每個(gè)元素與防御塔的距離并比較獲得距離最近的元素作為攻擊目標(biāo),實(shí)例化炮彈并將攻擊目標(biāo)的坐標(biāo)傳遞給炮彈。圖5-16選擇攻擊目標(biāo)函數(shù)炮彈邏輯炮彈外表為火焰粒子效果,炮彈內(nèi)部是一個(gè)透明的球形的檢測(cè)體,檢測(cè)體朝向防御塔類(lèi)傳遞過(guò)來(lái)的坐標(biāo)參數(shù)進(jìn)行非指向性移動(dòng),如與士兵類(lèi)型的游戲?qū)ο蠡蛘叩匕褰佑|后將返回碰撞信息,信息傳遞回炮彈主體后實(shí)例化爆炸包圍盒,爆炸包圍盒實(shí)例化0.1秒后自動(dòng)銷(xiāo)毀,期間接觸的士兵受到傷害。圖5-17炮彈移動(dòng)邏輯法術(shù)支援隕石法術(shù)藥水腳本隕石法術(shù)藥水邏輯:藥水被實(shí)例化后將在藥水斜上空處實(shí)例化一定數(shù)量的隕石,生成的隕石以賦予Rigibody.velocity一個(gè)朝向藥水周邊的一個(gè)隨機(jī)坐標(biāo)的向量的方式移動(dòng)。隕石的生成范圍為設(shè)定好的高空位置處的一個(gè)單位球體內(nèi)的隨機(jī)一個(gè)點(diǎn),目標(biāo)點(diǎn)為藥水位置處單位球體乘設(shè)定半徑的單位平面(通過(guò)設(shè)置y坐標(biāo)為0將隨機(jī)獲取的點(diǎn)移動(dòng)到平面上),生成隕石的延遲時(shí)間、大小、旋轉(zhuǎn)方向均為隨機(jī)獲取的數(shù)字,隕石生成時(shí)在音源列表中選擇隨機(jī)的發(fā)射音效,接觸地面或建筑物爆炸時(shí)候也選擇隨機(jī)的爆炸音效以及實(shí)例化隕石大小比例對(duì)應(yīng)范圍的爆炸粒子效果,每0.5秒生成一次隕石,每次生成一定數(shù)量的隕石,每個(gè)隕石通過(guò)協(xié)同程序延遲隨機(jī)的時(shí)間后生成,使得隕石的生成在視覺(jué)上連續(xù),且在隕石預(yù)制體上掛載尾流渲染器(TrailRenderer組件),此組件會(huì)在游戲物體位置發(fā)生變化時(shí)渲染尾流效果,在腳本中還根據(jù)隕石的大小來(lái)改變尾流渲染的規(guī)模,使得隕石效果更為真實(shí)。圖5-18隨機(jī)的隕石生成邏輯圖5-19隕石效果預(yù)覽爆炸粒子效果爆炸效果的實(shí)現(xiàn)原理:將爆炸圖片通過(guò)粒子的形式顯示,在顯示的時(shí)候?qū)⒁欢〝?shù)量的爆炸圖片邊緣透明化并朝向設(shè)定好的隨機(jī)方向擴(kuò)散移動(dòng),從而模擬仿真的爆炸視覺(jué)效果。圖5-20爆炸材質(zhì)貼圖圖5-21粒子系統(tǒng)配置攝像機(jī)腳本攝像機(jī)旋轉(zhuǎn)攝像機(jī)旋轉(zhuǎn):當(dāng)鼠標(biāo)右鍵處于按下?tīng)顟B(tài),攝像機(jī)將朝向鼠標(biāo)指針指向的的方向。攝像機(jī)旋轉(zhuǎn)邏輯:在U3D的世界坐標(biāo)中(如圖5-22所示),當(dāng)Transform.Rotation.x增大時(shí),游戲物體將沿著x軸順時(shí)針旋轉(zhuǎn),當(dāng)Transform.Rotation.y增大時(shí),游戲物體將沿著坐標(biāo)軸的y軸順時(shí)針旋轉(zhuǎn),根據(jù)這個(gè)規(guī)則,使用兩個(gè)變量獲取鼠標(biāo)位置的移動(dòng)增量的方向向量,從而獲取與該方向向量(x,y)垂直且相對(duì)朝向相反的向量(-y,x)作為攝像機(jī)歐拉角增量。

圖5-22U3D世界坐標(biāo)系圖5-23攝像機(jī)旋轉(zhuǎn)代碼攝像機(jī)運(yùn)動(dòng)攝像機(jī)運(yùn)動(dòng):當(dāng)鼠標(biāo)中鍵處于按下?tīng)顟B(tài)時(shí),攝像機(jī)朝著鼠標(biāo)移動(dòng)方向移動(dòng)攝像機(jī)運(yùn)動(dòng)邏輯:根據(jù)U3D坐標(biāo)系原理,使攝像機(jī)以自身坐標(biāo)為基準(zhǔn)朝鼠標(biāo)移動(dòng)增量方向的反方向(-x,-y)移動(dòng)。(代碼如圖5-24所示)圖5-24攝像機(jī)運(yùn)動(dòng)代碼鼠標(biāo)滾輪與正交攝像機(jī)與透視攝像機(jī)交互鼠標(biāo)滾輪作用:玩家往前滾動(dòng)鼠標(biāo)滾輪,放大游戲界面,往后滾動(dòng)鼠標(biāo)滾輪,則縮小游戲界面。鼠標(biāo)滾輪邏輯:在普通的透視攝像機(jī)模式中,將鼠標(biāo)滾輪的增量mouseScrollDelta.y以一定的比率用作于攝像機(jī)transform.position.z的增量以實(shí)現(xiàn)攝像機(jī)往前移動(dòng)的效果;而在正交攝像機(jī)模式(平面2D模式)中,攝像機(jī)往前移動(dòng)沒(méi)有意義,攝像機(jī)獲取的畫(huà)面為2維圖像,無(wú)近大遠(yuǎn)小的區(qū)別。所以在正交攝像機(jī)模式中,將通過(guò)鼠標(biāo)滾輪直接改變正交攝像機(jī)的窗口大小(orthographicSize參數(shù)表示正交攝像機(jī)參數(shù)Size,如圖5-26所示)來(lái)放大圖像。圖5-25鼠標(biāo)滾輪于正交攝像機(jī)與透視攝像機(jī)間的交互代碼圖5-26Camera組件Size參數(shù)UI設(shè)計(jì)士兵血條士兵的血條以綠色的圖片形式掛載于士兵上方,在游戲場(chǎng)景中,血條圖標(biāo)的父對(duì)象畫(huà)布將通過(guò)腳本控制朝向攝像機(jī)。圖5-27血條UI畫(huà)布朝向血條圖片填充方式設(shè)置為水平模式(Horizontal),并設(shè)置填充起源為左邊,使得血量從右側(cè)開(kāi)始衰減,填充重量設(shè)置為1,將通過(guò)腳本控制血條圖片顯示百分比隨士兵血量情況動(dòng)態(tài)展示,且在士兵血量下降到百分之30以下時(shí)將血條顏色改為紅色。圖5-28血條Image組件參數(shù)圖5-29血條控制腳本防御塔血條防御塔血條除初始顏色為紫色與士兵血條不同以外,大體實(shí)現(xiàn)邏輯與士兵血條的實(shí)現(xiàn)邏輯相同,此處不做詳細(xì)闡述。士兵數(shù)量欄與摧毀度評(píng)級(jí)士兵數(shù)量欄功能:放置選擇不同兵種類(lèi)型與法術(shù)藥水的按鈕,并顯示剩余數(shù)量。當(dāng)玩家點(diǎn)擊按鈕時(shí),下一次在場(chǎng)景地面上的點(diǎn)擊將按鈕對(duì)應(yīng)的士兵或法術(shù)藥水實(shí)例化到鼠標(biāo)點(diǎn)擊位置并將此兵種或法術(shù)藥水的剩余數(shù)量減少1。摧毀度評(píng)級(jí):遍歷游戲場(chǎng)景中的建筑物游戲?qū)ο螅匀w星星的形式表示玩家對(duì)此關(guān)卡的摧毀程度進(jìn)行評(píng)級(jí),建筑物數(shù)量每減少百分之33則點(diǎn)亮一顆星星,三顆星星點(diǎn)亮即表示游戲勝利,同時(shí)士兵停下移動(dòng)并播放歡呼動(dòng)畫(huà)。圖5-30游戲場(chǎng)景UI畫(huà)布預(yù)覽圖5-33士兵數(shù)量欄示例代碼5-34士兵播放歡呼動(dòng)畫(huà)其他游戲界面開(kāi)始游戲界面:包含難度選擇按鈕、音量開(kāi)啟/關(guān)閉按鈕、和兵種購(gòu)買(mǎi)界面跳轉(zhuǎn)按鈕,鑒于此界面內(nèi)容均為常規(guī)游戲的基本功能,本設(shè)計(jì)將不對(duì)此界面的實(shí)現(xiàn)作詳細(xì)描述。游戲準(zhǔn)備階段界面:包含普通士兵、弓箭兵、肉盾戰(zhàn)士及隕石法術(shù)藥水的模型及動(dòng)畫(huà),通過(guò)TextMeshProUGUI文字組件顯示界面中的標(biāo)題字體及需要用于計(jì)算的兵種數(shù)據(jù)變量,每個(gè)兵種類(lèi)型均攜帶一個(gè)購(gòu)買(mǎi)按鈕及取消購(gòu)買(mǎi)按鈕,在兩個(gè)按鈕中間顯示該兵種當(dāng)前已購(gòu)買(mǎi)的數(shù)量,當(dāng)兵力儲(chǔ)備完畢后,點(diǎn)擊Ready按鈕跳轉(zhuǎn)到游戲界面,UI元素布置結(jié)構(gòu)如圖5-35所示。圖5-35UI元素布置結(jié)構(gòu)布置好UI元素后,將游戲窗口的分辨率改為1680×1050,給場(chǎng)景相機(jī)添加灰暗的天空盒,同時(shí)在場(chǎng)景中放入兵種及隕石法術(shù)藥水模型并配置動(dòng)畫(huà)資源。(如圖5-36所示)圖5-36場(chǎng)景最終效果預(yù)覽場(chǎng)景外觀(guān)搭建完畢后,編輯按鈕函數(shù),在場(chǎng)景管理器腳本種引入TMPro包,使用TMP_Text.text參數(shù)改變士兵數(shù)量的顯示文本,兵種數(shù)量增加減少邏輯將封裝函數(shù)供按鈕點(diǎn)擊觸發(fā),在剩余金幣數(shù)量大于兵種價(jià)格時(shí)購(gòu)入兵種,在剩余兵種數(shù)量大于0時(shí)售出兵種。圖5-37藥水購(gòu)買(mǎi)函數(shù)及普通士兵售出函數(shù)圖5-38實(shí)時(shí)更新TMP文本內(nèi)容添加音效開(kāi)始界面UI按鈕點(diǎn)擊音效及背景音樂(lè)。購(gòu)買(mǎi)兵種頁(yè)面購(gòu)買(mǎi)按鈕及刪除按鈕點(diǎn)擊音效、背景音樂(lè)及點(diǎn)擊兵種觸發(fā)語(yǔ)音。游戲場(chǎng)景中的士兵選擇按鈕點(diǎn)擊音效。士兵部署音效、士兵沖鋒語(yǔ)音、士兵攻擊命中音效、士兵死亡音效、勝利音效。防御塔炮彈發(fā)射音效、建筑物摧毀音效。驚喜盒子音效、法術(shù)藥水落地音效、隕石運(yùn)動(dòng)音效、隕石撞擊音效。其他優(yōu)化添加完音效后,整個(gè)游戲的核心功能已經(jīng)全部完成,接下來(lái)在U3D中使用不同的條件多次運(yùn)行游戲場(chǎng)景觀(guān)察游戲中是否會(huì)出現(xiàn)異常,以下是發(fā)現(xiàn)的代碼邏輯問(wèn)題及解決方案。問(wèn)題1:游戲準(zhǔn)備階段界面的士兵購(gòu)買(mǎi)按鈕觸發(fā)位置與按鈕位置不符,觸發(fā)位置在按鈕的右側(cè)區(qū)域。原因及解決方式:這個(gè)問(wèn)題出現(xiàn)的原因是在定義UI按鈕位置時(shí)候復(fù)選了購(gòu)買(mǎi)按鈕和售出按鈕并一起通過(guò)鼠標(biāo)移動(dòng),在這之后將游戲分辨率從1920×1080更改為了1650×1050。將購(gòu)買(mǎi)按鈕刪除重新創(chuàng)建解決了此問(wèn)題。問(wèn)題2:在游戲運(yùn)行場(chǎng)景中,點(diǎn)擊了兵種選擇按鈕后,鼠標(biāo)點(diǎn)擊到游戲地形之外的地方或者點(diǎn)擊到了UI面板依然會(huì)使士兵數(shù)量減少,前者會(huì)丟失一個(gè)士兵,后者會(huì)在鼠標(biāo)點(diǎn)擊兵種按鈕切換兵種時(shí)同時(shí)生成上一個(gè)選擇的兵種類(lèi)型。原因及解決方式:場(chǎng)景中使用從攝像機(jī)位置發(fā)射出去的射線(xiàn)來(lái)檢測(cè)點(diǎn)擊游戲地板事件,這個(gè)射線(xiàn)穿過(guò)了UI面板。引入U(xiǎn)nityEngine.EventSystem命名空間獲取鼠標(biāo)點(diǎn)擊UI面板事件,使鼠標(biāo)點(diǎn)擊到UI按鈕時(shí)不觸發(fā)游戲地板點(diǎn)擊事件。圖5-39點(diǎn)擊邏輯修改問(wèn)題3:兩個(gè)或兩個(gè)以上的防御塔同時(shí)攻擊一群士兵時(shí),其中一個(gè)防御塔在選擇下一個(gè)攻擊目標(biāo)時(shí)出現(xiàn)空元素或者數(shù)組越界異常。圖5-40數(shù)組越界原因及解決方式:逐幀運(yùn)行游戲后得知問(wèn)題出于防御塔B將防御塔A的待攻擊數(shù)組中的元素選作為攻擊目標(biāo)消滅后,防御塔A再次遍歷待攻擊數(shù)組選擇攻擊目標(biāo)時(shí)訪(fǎng)問(wèn)了空元素或空數(shù)組下標(biāo)。因此在防御塔每次遍歷待攻擊數(shù)組選擇攻擊目標(biāo)之前先判斷數(shù)組內(nèi)是否包含空元素,如存在空元素則將其從數(shù)組中刪除再進(jìn)行距離判斷。圖5-41防御塔選擇攻擊目標(biāo)函數(shù)修改問(wèn)題4:建筑物被摧毀時(shí)留下透明障礙地形。圖5-42地形殘留原因及解決方式:建筑物摧毀函數(shù)中包含了地圖更新函數(shù)卻沒(méi)有按照預(yù)期執(zhí)行,且此問(wèn)題并非每次都會(huì)出現(xiàn),因此猜測(cè)問(wèn)題的來(lái)源是地形更新函數(shù)對(duì)地形的更新處理常常需要一幀以上的時(shí)間,查閱AStarPathfinding的腳本手冊(cè)和內(nèi)置的尋路Demo的障礙清除腳本后,改用協(xié)程延遲一幀來(lái)實(shí)現(xiàn)地形的更新后問(wèn)題消失。圖5-43延遲一幀刪除建筑物除邏輯Bug修復(fù)外,對(duì)項(xiàng)目整體進(jìn)行了優(yōu)化調(diào)整,其中共包括:將代碼邏輯中的調(diào)試用的輸出語(yǔ)句注釋掉,將為直觀(guān)觀(guān)察游戲物體當(dāng)前攻擊目標(biāo)的射線(xiàn)繪制部分注釋掉,刪除游戲物體上不必要的碰撞體和角色控制器,去除建筑物Rigibody組件上的UseGravity選擇,去除A*導(dǎo)航網(wǎng)絡(luò)組件AstarPath組件上的ShowGraphs選擇,優(yōu)化尋路邏輯結(jié)構(gòu),使每個(gè)士兵在Update()方法中盡可能地減少尋路次數(shù)。圖5-44建筑物Rigibody組件配置圖5-45AstarPath組件配置游戲包導(dǎo)出最后對(duì)游戲進(jìn)行Windows平臺(tái)導(dǎo)出,在導(dǎo)出的過(guò)程中出現(xiàn)了錯(cuò)誤:圖5-46導(dǎo)出游戲包錯(cuò)誤信息其原因是火焰爆炸資源包的示例腳本中使用了UnityEditor命名空間,在導(dǎo)出游戲包后將無(wú)法使用,此腳本無(wú)關(guān)本游戲邏輯,因此直接打開(kāi)此腳本添加#ifUNITY_EDITOR#endif條件使此腳本邏輯只在U3D編輯器中使用。解決此問(wèn)題后游戲包順利導(dǎo)出。

游戲測(cè)試試玩體驗(yàn)在游戲的打包

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論