基于Unity3d的模擬沖浪游戲的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于Unity3d的模擬沖浪游戲的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于Unity3d的模擬沖浪游戲的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于Unity3d的模擬沖浪游戲的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于Unity3d的模擬沖浪游戲的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要隨著科技時(shí)代的飛速提升,人們的生活水平發(fā)生了重大的變革,許多人會(huì)親自體驗(yàn)生活中不常去的地方如海邊、沙灘、雪地,深山等,又如一些生活中少體驗(yàn)的釣魚(yú)、滑雪、沖浪等,但不是每個(gè)人都能親自去體驗(yàn),然而現(xiàn)代發(fā)達(dá)的游戲制作水平卻可以彌補(bǔ)人們生活中一些遺憾。如今游戲和虛擬現(xiàn)實(shí)事業(yè)蓬勃發(fā)展,受到越來(lái)越多人的關(guān)注和喜愛(ài),模擬類(lèi)游戲允許玩家自由控制游戲中的人或事物,通過(guò)體驗(yàn)生活中一些比較難去體驗(yàn)的娛樂(lè)或生存方法。該類(lèi)游戲不僅僅能夠鍛煉到人的反應(yīng)速度,更重要的是提高人對(duì)自己未用過(guò)或用的較少的物品的認(rèn)知以及人的生存常識(shí)等等,非常適合大眾的需求。Unity3D作為一款能夠快速開(kāi)發(fā)和上手的游戲開(kāi)發(fā)引擎在市場(chǎng)上逐步升溫。本論文探究基于Unity3D的模擬沖浪游戲的開(kāi)發(fā),這不僅僅是一款模擬沖浪類(lèi)游戲,區(qū)別真實(shí)的沖浪的體驗(yàn)但卻能給人帶來(lái)自己未曾體驗(yàn)過(guò)的愉悅同時(shí)可以通過(guò)游戲給人們帶來(lái)沖浪的知識(shí)以及沖浪需要的設(shè)備、安全注意等。游戲難度適中,游戲的海浪以及海浪的沖擊波會(huì)給人帶來(lái)刺激感以及被海浪沖進(jìn)水里的膽怯與畏懼,同時(shí)玩家可以通過(guò)教程學(xué)習(xí)一些基礎(chǔ)沖浪技巧,去挑戰(zhàn)更難的沖浪地點(diǎn)?,F(xiàn)在人們?yōu)榱讼綍r(shí)工作和生活的乏累,會(huì)選擇更多這類(lèi)刺激而且能帶來(lái)成就感的游戲,因此,模擬類(lèi)游戲擁有可觀的發(fā)展前景。本文主要描述了該游戲的開(kāi)發(fā)原理,游戲的設(shè)計(jì)與實(shí)現(xiàn)以及游戲功能測(cè)試等。為后續(xù)希望開(kāi)發(fā)同類(lèi)游戲的開(kāi)發(fā)者提供借鑒與參考。關(guān)鍵詞:Unity3D3D水流沖浪游戲

AbstractWiththerapiddevelopmentofscienceandtechnology,greatchangeshavetakenplaceinpeople'slivingstandards.Manypeoplewillpersonallyexperiencetheplacestheydon'toftengotoinlife,suchastheseaside,beach,snow,deepmountain,etc.,aswellassomefishing,skiing,surfing,etc.,whicharerarelyexperiencedinlife,butnoteveryonecanexperiencetheminperson.However,themoderndevelopedgameproductionlevelcanmakeupforpeople'slifeSomeregrets.Nowadays,gameandvirtualrealityarebooming,andmoreandmorepeoplepayattentiontoandlovethem.Simulationgamesallowplayerstofreelycontrolpeopleorthingsinthegame,andexperiencesomeentertainmentorsurvivalmethodsthataredifficulttoexperienceinlife.Thiskindofgamecannotonlytrainpeople'sreactionspeed,butalsoimprovepeople'scognitionoftheunusedorlessuseditemsandpeople'ssurvivalknowledge,whichisverysuitablefortheneedsofthepublic.Unity3d,asagamedevelopmentenginethatcanbedevelopedandstartedquickly,isgraduallywarmingupinthemarket.Thispaperexploresthedevelopmentofthesimulationsurfinggamebasedonunity3d,whichisnotonlyasimulationsurfinggame,butalsoarealsurfingexperiencethatcanbringpeoplepleasurethattheyhaveneverexperienced.Atthesametime,itcanbringpeopletheknowledgeofsurfing,theequipmentneededforsurfing,safetyattention,etc.throughthegame.Thedifficultyofthegameismoderate.Thewavesofthegameandtheshockwavesofthewaveswillgivepeopleasenseofstimulationandthetimidityandfearofbeingsweptintothewaterbythewaves.Atthesametime,playerscanlearnsomebasicsurfingskillsthroughthecoursetochallengemoredifficultsurfingplaces.Nowadays,inordertoeliminatethetirednessofdailyworkandlife,peoplewillchoosemoregamesthatstimulateandbringasenseofachievement.Therefore,simulationgameshaveaconsiderabledevelopmentprospect.Thispapermainlydescribesthedevelopmentprincipleofthegame,thedesignandimplementationofthegameandthefunctiontestofthegame.Forthefuturedeveloperswhowanttodevelopsimilargamestoprovidereferenceandreference.Keywords:Unity3D3Dwatersurfinggame

目錄第一章 緒論 緒論選題的目的和意義如今社會(huì)的計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,電子游戲的豐富多樣,大眾開(kāi)始對(duì)游戲的娛樂(lè)性需求逐漸增高,以及對(duì)游戲的即時(shí)娛樂(lè)需求,人們開(kāi)始對(duì)2D的平面游戲感到不夠真實(shí),追求真實(shí)的感官體驗(yàn)成為當(dāng)今游戲發(fā)展的趨勢(shì),隨著科技的不斷發(fā)展,計(jì)算機(jī)和手機(jī)的不斷普及,各種各樣的游戲應(yīng)用也層出不窮。而在人們背負(fù)著眾多壓力的生活中,游戲應(yīng)用的出世無(wú)疑是一劑調(diào)味品,讓人們可以適當(dāng)?shù)尼尫派顗毫Γ黾尤藗兊纳顦?lè)趣。休閑類(lèi)游戲是目前最受歡迎的游戲類(lèi)型之一,它經(jīng)過(guò)多年的發(fā)展,變得更加完善,不同種類(lèi)的游戲使得用戶得到更多的體驗(yàn)。選擇unity是由于Unity是一個(gè)可以讓玩家輕松建立如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫(huà)等類(lèi)型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)工具,是一個(gè)全面整合的專業(yè)游戲引擎。并且unity可以發(fā)布游戲到多個(gè)平臺(tái),Android就是其中一種。休閑類(lèi)游戲可以在休息的時(shí)間內(nèi)以玩的方式得到身心的放松和調(diào)節(jié),從而達(dá)到讓體能得到恢復(fù)、身心保持愉悅的目的的一種業(yè)余生活游戲。休閑類(lèi)游戲上手很快,不需要長(zhǎng)時(shí)間進(jìn)行,可以隨時(shí)隨地停止游戲,并且有較高的娛樂(lè)性,是非常適合和滿足大眾的需求的。國(guó)內(nèi)外研究現(xiàn)狀沖浪最初是由波利尼亞人的一種古老運(yùn)動(dòng)發(fā)展而來(lái),他們部落中的酋長(zhǎng)是一個(gè)技術(shù)最好的沖浪選手,并且擁有用最好樹(shù)木制作的最好沖浪板,最初沖浪對(duì)一般階級(jí)的民眾來(lái)說(shuō)是十分向往的運(yùn)動(dòng),因?yàn)榻y(tǒng)治階層擁有最好的海灘和板子,導(dǎo)致一般人不敢冒險(xiǎn)在海浪兇險(xiǎn)的地方以及沒(méi)有沙灘的地方都不適合沖浪,但隨著時(shí)間的推移,人們可以通過(guò)高超的沖浪技術(shù)來(lái)獲得這些特權(quán),同時(shí)也意味著沖浪運(yùn)動(dòng)開(kāi)始向基層民眾開(kāi)放,歐洲人是最早目擊沖浪的,在1767年由Dolphin的一名船員在大溪地記載。之后又由JameKing中尉在1779年在庫(kù)克船長(zhǎng)的日記中發(fā)現(xiàn)沖浪的藝術(shù)。在科克發(fā)現(xiàn)這種沖浪運(yùn)動(dòng)的幾十年后,在1912年的奧運(yùn)會(huì)中,哈摩庫(kù)得了游泳冠軍,在他的大力提倡下沖浪運(yùn)動(dòng)才開(kāi)始在美國(guó)流行起來(lái)并推廣,如今最流行的幾個(gè)沖浪地區(qū)就有美國(guó)的夏威夷,以及北美、秘魯、澳大利亞和南非都開(kāi)始流行沖浪,并且逐步發(fā)展為有世界級(jí)沖浪錦標(biāo)賽的運(yùn)動(dòng)沖浪是以海浪為動(dòng)力的極限運(yùn)動(dòng),沖浪者在海邊有適當(dāng)海浪的地方俯臥休息或在沖浪板上等待海浪,當(dāng)有適當(dāng)海浪時(shí),海浪的動(dòng)力會(huì)使沖浪板運(yùn)動(dòng)沖浪者通過(guò)俯臥調(diào)整沖浪板方向和劃水的方式獲得更多的動(dòng)力,當(dāng)動(dòng)力足夠時(shí)沖浪者起身,保持站立,且雙腿微屈,讓其獲得更多的重心在身上。沖浪可以讓人們暫時(shí)忘掉自己的不愉快,體驗(yàn)與大自然力量的接觸,與海浪搏擊,體驗(yàn)在一下別在海上實(shí)現(xiàn)水上漂的快感,這也許也是許多人為了尋找一處沖浪勝地而到處奔波的理由吧。隨著時(shí)代的進(jìn)步人們因?yàn)楣ぷ鞯仍?,許多人無(wú)法好好地休息放松一下自己,所以人們開(kāi)始在網(wǎng)絡(luò)中尋找放松,2000年后隨著最初紅白機(jī)等游戲的過(guò)時(shí)網(wǎng)絡(luò)游戲開(kāi)始盛行,如今許多網(wǎng)絡(luò)游戲發(fā)展迅速,成為當(dāng)今游戲產(chǎn)業(yè)中規(guī)模最大的一類(lèi),然而這些也開(kāi)始隨著時(shí)間的發(fā)展被人們玩膩,大多數(shù)的RPG類(lèi)和刷副本類(lèi)闖關(guān)游戲過(guò)于豐滿人們開(kāi)始研究新的游戲類(lèi)型,如3D極限飛車(chē)和3D競(jìng)技類(lèi)運(yùn)動(dòng)游戲開(kāi)始盛行,開(kāi)發(fā)商開(kāi)始尋找新的突破口,向各類(lèi)運(yùn)動(dòng)類(lèi)游戲進(jìn)行開(kāi)放。隨著一些設(shè)備和硬件、軟件的日益增強(qiáng),人們的娛樂(lè)范圍也開(kāi)始從PC端向移動(dòng)端擴(kuò)展。3D互動(dòng)娛樂(lè)游戲也開(kāi)始在手機(jī)領(lǐng)域盛行,由于移動(dòng)端的操作系統(tǒng)較多如Android、IOS等,為了保證開(kāi)放的軟件有較強(qiáng)的移植性,許多的開(kāi)放引擎都逐步拓展自己的適用范圍,從最開(kāi)始的PC端開(kāi)始向其他平臺(tái)發(fā)展,如今最為突出的開(kāi)發(fā)引擎便是Unity3D,該引擎適用多個(gè)平臺(tái),移植性強(qiáng)。但國(guó)內(nèi)的跨平臺(tái)技術(shù)仍然處于較低的階段,通過(guò)該引擎可以實(shí)現(xiàn)較快的跨平臺(tái)實(shí)現(xiàn)。論文組織結(jié)構(gòu)論文從最初構(gòu)思到游戲的分析實(shí)踐,結(jié)合專業(yè)3D開(kāi)發(fā)資料,設(shè)計(jì)一款沖浪的游戲,其中具體介紹了游戲制作的基本步驟以及游戲的系統(tǒng)功能設(shè)計(jì)和功能代碼編寫(xiě)等。論文分為六章,各章節(jié)安排如下:?第一部分:緒論,主要闡述了該畢業(yè)設(shè)計(jì)制作的背景、國(guó)內(nèi)外對(duì)相關(guān)課題的研究現(xiàn)狀以及本設(shè)計(jì)的大概介紹;?第二部分:介紹了本文制作游戲使用的各類(lèi)開(kāi)發(fā)工具和Unity3D的大致介紹;第三部分:詳細(xì)介紹游戲的各個(gè)模塊的制作,清晰明確游戲內(nèi)部關(guān)系,采用由下到上的順序?qū)訉硬鹞霾襟E;第四部分:沖浪游戲的系統(tǒng)功能設(shè)計(jì)和界面設(shè)計(jì);?第五部分:運(yùn)行游戲進(jìn)行測(cè)試,打包封裝;第六部分:結(jié)論以及游戲不足和游戲今后改進(jìn)。

開(kāi)發(fā)工具介紹Unity3D游戲引擎Unity3D軟件介紹游戲引擎提供了足夠的功能,這些功能在許多不同的游戲中都很有用。因此,通過(guò)使用該引擎,只要添加自定義的藝術(shù)資源并添加自己的游戲代碼,就可以輕松獲得這些功能,從而實(shí)現(xiàn)一款游戲。Unity3D包括物理模擬、普通地圖、屏幕空間環(huán)境光照明暗處理、動(dòng)態(tài)陰影等。許多游戲引擎都為自己的許多功能感到驕傲,但Unity3D與其他尖端游戲開(kāi)發(fā)工具相比有兩個(gè)主要優(yōu)勢(shì):提供極為高效的視覺(jué)工作流和多維跨平臺(tái)支持??梢暬ぷ髁魇且环N非常獨(dú)特的設(shè)計(jì),它不同于其他大多數(shù)游戲開(kāi)發(fā)環(huán)境。由于其他游戲開(kāi)發(fā)工具通常會(huì)將不可避免會(huì)引起爭(zhēng)議的無(wú)關(guān)部分混合在一起,或者需要建立自己的編程類(lèi)庫(kù)、構(gòu)建鏈等舊的集成開(kāi)發(fā)環(huán)境設(shè)計(jì),因此Unity3D中的開(kāi)發(fā)工作流是通過(guò)精心設(shè)計(jì)的可視化編輯器來(lái)定位的。這些編輯器用于布局游戲中的場(chǎng)景,將藝術(shù)資源綁定在一起,并對(duì)交互式對(duì)象進(jìn)行編碼。這些編輯器的優(yōu)點(diǎn)在于,它們可以讓您快速高效地構(gòu)建專業(yè)和高質(zhì)量的游戲。當(dāng)你需要在視頻游戲中使用大量的新技術(shù)時(shí),它們將為你提供難以置信的高效工具。編譯器對(duì)于快速迭代和在原型和測(cè)試周期中優(yōu)化游戲非常有用。您可以在編譯器中調(diào)整動(dòng)物對(duì)象,甚至在游戲運(yùn)行時(shí)移動(dòng)對(duì)象。此外,Unity3D允許您通過(guò)腳本自定義編輯器,因此可以向界面添加一些新功能或菜單。除了編譯器的優(yōu)點(diǎn)外,Unity3D的工具集成還提供了高度的跨平臺(tái)支持。它不僅在部署目標(biāo)上是跨平臺(tái)的(可以部署到PC、wed、移動(dòng)設(shè)備或游戲機(jī)上),還包括跨平臺(tái)開(kāi)發(fā)工具(可以在windows或MacOS上開(kāi)發(fā)游戲)。API接口API接口Unity3D中有豐富的API接口可以幫助你完成各種需要的功能,API是預(yù)定義的函數(shù),應(yīng)用程序和開(kāi)發(fā)人員都可以使用這些函數(shù)來(lái)訪問(wèn)基于某些軟件或硬件的代碼功能使用,而不需要在源代碼中尋找,這樣會(huì)十分耗時(shí),或者用于了解其中的工作機(jī)制,由于Unity自己的用戶量較多,許多人會(huì)提供自己優(yōu)質(zhì)的API函數(shù)方法,便于多數(shù)Unity初學(xué)者或找不到實(shí)現(xiàn)方法的人使用,這也使得Unity擁有一套完整的API函數(shù)庫(kù),開(kāi)發(fā)人員可以通過(guò)函數(shù)庫(kù)便捷的實(shí)現(xiàn)項(xiàng)目的一些初始化工作,而不需要自己打基礎(chǔ)的函數(shù)代碼,API函數(shù)庫(kù)中有許多功能模塊,如碰撞檢測(cè)的基本用法,音效播放的基本實(shí)現(xiàn)、人物動(dòng)畫(huà)配置函數(shù),觸發(fā)區(qū)和非觸發(fā)區(qū)等判定方法,Unity開(kāi)發(fā)的各種功能的基礎(chǔ)調(diào)用都有。物理引擎不管什么游戲,其設(shè)計(jì)都是需要使對(duì)象特征合理,讓游戲更為真實(shí),實(shí)現(xiàn)身臨其境的效果,Unity中提供了各種各樣的組件和插件,目的就是為了可以讓游戲的對(duì)象通過(guò)渲染和色彩的變化、平行光、、點(diǎn)光源的擺放、游戲貼圖使用、文字、動(dòng)畫(huà)加入、聲音的配置、材質(zhì)更換等,這些組件都可以增加游戲的真實(shí)性,為玩家?guī)?lái)視覺(jué)效果的真實(shí),為人物、地圖、障礙物金幣等游戲?qū)ο筇砑咏M織實(shí)現(xiàn)阻力,碰撞檢測(cè)、碰撞阻礙及改變?nèi)宋镞\(yùn)動(dòng)路線等,讓玩家有更真實(shí)地體驗(yàn),讓你覺(jué)得這是一個(gè)真實(shí)存在的物體。其中比較常用的組件如AudioSource、collider等Unity常用生命周期的函數(shù)Unity3D游戲開(kāi)發(fā)引擎和常規(guī)程序開(kāi)發(fā)不同在Main函數(shù)的入口運(yùn)行,它是在內(nèi)部實(shí)現(xiàn)Unity的生命周期事件,通過(guò)給各個(gè)生命周期賦予方法來(lái)實(shí)現(xiàn)游戲的基本生命周期,在Update中可以不斷地更新迭代這些生命周期函數(shù),從而實(shí)現(xiàn)游戲地不斷判定。下面介紹一些Unity中比較常用的事件函數(shù)。OnGUI():當(dāng)游戲結(jié)束失敗或勝利時(shí)通過(guò)該函數(shù)實(shí)現(xiàn)勝利或失敗地標(biāo)志顯示。Start():在游戲開(kāi)始時(shí)運(yùn)行的事件如游戲暫停獲取其他物體參數(shù)為初始參數(shù)賦值等。Update():游戲幀事件,在其中寫(xiě)入的方法和事件會(huì)不斷進(jìn)行無(wú)法被停止。OnClick():Unity自帶腳本功能,用于Button上的檢測(cè)實(shí)現(xiàn)游戲的物體隱藏和顯示,實(shí)現(xiàn)游戲的點(diǎn)擊場(chǎng)景跳轉(zhuǎn)和游戲菜單實(shí)現(xiàn)。OnEnable():在Start事件后調(diào)用,只有被激活的時(shí)候才會(huì)執(zhí)行。OnTriggerEnter():游戲碰撞檢測(cè)函數(shù),用于檢測(cè)游戲金幣及人物等碰撞的檢測(cè)。OnDestroy():在游戲中對(duì)游戲?qū)ο筮M(jìn)行銷(xiāo)毀通??梢詫?xiě)在物體本身身上用于自身的銷(xiāo)毀,同時(shí)也可以對(duì)碰撞物體的銷(xiāo)毀,這種一般寫(xiě)在角色身上。Unity3D中腳本多數(shù)是繼承Mono行為基類(lèi),通常不需要繼承該類(lèi)來(lái)編寫(xiě)一些工具類(lèi)因?yàn)榇蠖鄶?shù)類(lèi)都已經(jīng)實(shí)現(xiàn),在Unity運(yùn)行的過(guò)程中都會(huì)存在,除非開(kāi)發(fā)人員需要自己釋放內(nèi)存,否則不需要人為編寫(xiě)工具類(lèi)。GUI(圖形用戶界面)該項(xiàng)目中使用Unity自帶的UI開(kāi)發(fā)工具即GUI。Unity的GUI系統(tǒng)稱為UnityGUI。UnityGUI使您能夠快速輕松地添加各種具有完整功能的界面元素,包括在創(chuàng)建GUI控件時(shí)的實(shí)例化、定位和功能定義。通過(guò)這種方式,您可以通過(guò)一次編寫(xiě)少量代碼同時(shí)創(chuàng)建一個(gè)GUI接口元素實(shí)例,并在屏幕上找到實(shí)例的位置,描述激活接口元素時(shí)要執(zhí)行的腳本。UGUI內(nèi)置于Unity中。與NGUI相比,它是一個(gè)UI插件,Unity本身自帶的UI開(kāi)發(fā)功能少了一些,因此可以導(dǎo)入NGUI的UnityUI的拓展插件,它可以提高開(kāi)發(fā)者的界面設(shè)計(jì)速度以及加快游戲開(kāi)發(fā)的進(jìn)程。3DsMax軟件3DsMax全稱是3DstudioMax,該軟件是由discreet公司開(kāi)發(fā)的,主要用于電腦端的一些三維動(dòng)畫(huà)制作以及三維模型制作,通常在游戲和一些設(shè)計(jì)領(lǐng)域使用較多,游戲開(kāi)發(fā)中許多模型的骨骼以及模型的畫(huà)質(zhì)等都可以通過(guò)該軟件實(shí)現(xiàn)提升與拓展,在一些設(shè)計(jì)物體形狀中有十分大的幫助,可以不斷地進(jìn)行修改模型的點(diǎn)線面等,以及對(duì)模型進(jìn)行各種渲染實(shí)現(xiàn)物體的平滑,該軟件最初的目的是實(shí)現(xiàn)電腦游戲動(dòng)畫(huà)的制作,然后再慢慢發(fā)展到如今,許多建造領(lǐng)域都或多或少需要了解,能為建造設(shè)計(jì)帶來(lái)許多便利而在這里只做簡(jiǎn)單的介紹,由于游戲模型制作相對(duì)耗時(shí),所以不選擇用3DsMax進(jìn)行建模,項(xiàng)目中的模型選自一些網(wǎng)上素材和Unity商城中,但為了保證模型在加載過(guò)程中不出現(xiàn)意外情況,將游戲模型導(dǎo)入該軟件中進(jìn)行核對(duì),保證模型不會(huì)有過(guò)大的漏洞C#開(kāi)發(fā)語(yǔ)言C#是當(dāng)今開(kāi)發(fā)軟件以及游戲系統(tǒng)等常用的開(kāi)發(fā)語(yǔ)言,是由微軟發(fā)布的高級(jí)編程語(yǔ)言,它與java語(yǔ)言的編寫(xiě)代碼類(lèi)似,但它有更強(qiáng)大的功能,因?yàn)閁nity軟件實(shí)現(xiàn)的是跨平臺(tái),而C#本身不是跨平臺(tái)的開(kāi)發(fā)語(yǔ)言,但在Unity中C#可以通過(guò)Mono的重實(shí)現(xiàn),使得該語(yǔ)言可以在Unity中跨平臺(tái)使用,而且C#有許多優(yōu)點(diǎn),相對(duì)其他開(kāi)發(fā)語(yǔ)言來(lái)說(shuō),C#的語(yǔ)法更明了且各種類(lèi)的庫(kù)使用方便,在Unity開(kāi)發(fā)中C#明顯是一種首選的開(kāi)發(fā)語(yǔ)言VisualStudio2017VisualStudio2017是現(xiàn)版本系統(tǒng)中較為常用的編程軟件,由微軟公司自主研發(fā),十分適合Unity的開(kāi)發(fā)只需用using加入U(xiǎn)nity本身的一些UI和UnityEngine便可以很快速地進(jìn)行代碼編寫(xiě),而且該軟件中支持集成開(kāi)發(fā),也支持開(kāi)發(fā)相應(yīng)的Windows程序,,VisualStudio中各種報(bào)錯(cuò)提示以及編寫(xiě)代碼的輔助功能都十分適合Unity開(kāi)發(fā)。

游戲設(shè)計(jì)場(chǎng)景設(shè)計(jì)系統(tǒng)包括場(chǎng)景1_menu和場(chǎng)景gameScene,場(chǎng)景gameScene為游戲的主場(chǎng)景,即玩家進(jìn)行游戲的場(chǎng)景。場(chǎng)景中的對(duì)象有:地形:對(duì)象都在這上面進(jìn)行活動(dòng),還包括一些水流和波浪。游戲?qū)ο螅杭慈宋铩_浪板和金幣。特殊道具:有排球,人物角色拾取可以獲得少許能量。其他物體:障礙物。場(chǎng)景的制作Unity商城中尋找需要的地圖類(lèi)型,由于考慮游戲本身在水中進(jìn)行,所以在商城中找到相應(yīng)的水流效果LowPolyWaterGPU,并導(dǎo)入進(jìn)項(xiàng)目中,通過(guò)網(wǎng)上教程制作游戲道路點(diǎn)擊EditDetails就可以為這些物體選擇相應(yīng)的貼圖。綜合運(yùn)用,就產(chǎn)生了本項(xiàng)目的地形,如圖3-1所示。圖3-1創(chuàng)建好的地形在游戲地圖中放置一些其他的游戲物體,用來(lái)豐富游戲場(chǎng)景,如金幣,障礙物,還有排球等,其中為水面上的金幣添加腳本使其旋轉(zhuǎn)便于玩家分辨和充實(shí)游戲了,只要玩家穿過(guò)金幣,就會(huì)獲得然后播放音效然后銷(xiāo)毀游戲?qū)ο?,如圖3-2所示。圖3-2添加了游戲物體的游戲場(chǎng)景人物和沖浪板創(chuàng)建游戲人物及物體并導(dǎo)入游戲項(xiàng)目中,實(shí)現(xiàn)人物的運(yùn)動(dòng)和人物跳躍管理導(dǎo)入模型首先將玩家控制的游戲?qū)ο笤O(shè)計(jì)出來(lái),即主角,人物模型在項(xiàng)目前期已進(jìn)行收集,U3D支持的模型類(lèi)型是fbx,所以在導(dǎo)入人物模型前可以將人物模型的格式確認(rèn),如果不是該類(lèi)型可以將其導(dǎo)進(jìn)3DMax中再將其轉(zhuǎn)換為fbx類(lèi)型格式,如此便可以導(dǎo)入到U3D中使用直接將模型拖入Project面板即完成導(dǎo)入,如圖3-3所示。圖3-3人物模型人物運(yùn)動(dòng)的實(shí)現(xiàn)Unity中導(dǎo)入游戲角色對(duì)象,調(diào)整角色大小,為角色添加相應(yīng)的剛體Rigidbody以及碰撞體Collider保證角色有真實(shí)的物理屬性以及讓它能夠被游戲中的其他物體檢測(cè)Unity默認(rèn)的腳本編輯器設(shè)置為VS2017。當(dāng)人物的基本配置實(shí)現(xiàn)時(shí),為它編寫(xiě)玩家控制角色的運(yùn)動(dòng)腳本moveController.cs,使玩家能夠控制角色的基本移動(dòng)如左右移動(dòng)和加速等,由于使用的方法類(lèi)型為Horizontal,因此人物的基本移動(dòng)可以通過(guò)鍵盤(pán)的上下左右和WADS控制,空格鍵對(duì)應(yīng)人物的跳躍人物無(wú)法進(jìn)行二次跳躍。移動(dòng)使用的方法是transform.Translate(),加速的方法是moveVSpeed+=0.1f。usingUnityEngine;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem;publicclassmoveController:MonoBehaviour{//攝像機(jī)位置publicTransformcameraTransform;//攝像機(jī)距離人物的距離publicfloatcameraDistance;//游戲管理器publicGameManagergameManager;//前進(jìn)移動(dòng)速度f(wàn)loatmoveVSpeed;//水平移動(dòng)速度publicfloatmoveHSpeed=5.0f;//跳躍高度publicfloatjumpHeight=5.0f;//動(dòng)畫(huà)播放器Animatorm_animator;//起跳時(shí)間doublem_jumpBeginTime;//跳躍標(biāo)志intm_jumpState=0;//最大速度publicfloatmaxVSpeed=8.0f;//最小速度publicfloatminVSpeed=5.0f;publicAudioClipimpact;AudioSourceaudioSource;//UsethisforinitializationvoidStart(){GetComponent<Rigidbody>().freezeRotation=true;m_animator=GetComponent<Animator>();if(m_animator==null)print("null");moveVSpeed=minVSpeed;audioSource=GetComponent<AudioSource>();} //Updateiscalledonceperframe voidUpdate(){//游戲結(jié)束if(gameManager.isEnd){Time.timeScale=0;}AnimatorStateInfostateInfo=m_animator.GetCurrentAnimatorStateInfo(0);if(stateInfo.fullPathHash==Animator.StringToHash("BaseLayer.run")){m_jumpState=0;if(Input.GetButton("Jump")){//起跳m_animator.SetBool("Jump",true);m_jumpBeginTime=m_animator.recorderStartTime;}else{//到地面}}else{doublenowTime=m_animator.recorderStartTime;doubledeltaTime=nowTime-m_jumpBeginTime;//掉下m_jumpState=1;m_animator.SetBool("Jump",false);}floath=Input.GetAxis("Horizontal");Vector3vSpeed=newVector3(this.transform.forward.x,this.transform.forward.y,this.transform.forward.z)*moveVSpeed;Vector3hSpeed=newVector3(this.transform.right.x,this.transform.right.y,this.transform.right.z)*moveHSpeed*h;Vector3jumpSpeed=newVector3(this.transform.up.x,this.transform.up.y,this.transform.up.z)*jumpHeight*m_jumpState;Vector3vCameraSpeed=newVector3(this.transform.forward.x,this.transform.forward.y,this.transform.forward.z)*minVSpeed;}}人物AI人物初始化運(yùn)動(dòng)速度為5f,人物碰撞障礙物會(huì)導(dǎo)致速度減少,但相對(duì)的攝像機(jī)離人物較近且無(wú)障礙時(shí),人物會(huì)加速行駛使其保持在屏幕中央。制作得分統(tǒng)計(jì)即Coins,在腳本中聲明一個(gè)公有數(shù)coins將它的初始值設(shè)為0,然后在賦予金幣的得分參數(shù),編寫(xiě)一個(gè)得分腳本讓其統(tǒng)計(jì)Coin的數(shù)量并使其顯示在游戲界面的上方usingUnityEngine;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem;publicclassmoveController:MonoBehaviour{//攝像機(jī)位置publicTransformcameraTransform;//攝像機(jī)距離人物的距離publicfloatcameraDistance;//游戲管理器publicGameManagergameManager;//前進(jìn)移動(dòng)速度f(wàn)loatmoveVSpeed;//水平移動(dòng)速度publicfloatmoveHSpeed=5.0f;//跳躍高度publicfloatjumpHeight=5.0f;//動(dòng)畫(huà)播放器Animatorm_animator;//起跳時(shí)間doublem_jumpBeginTime;//跳躍標(biāo)志intm_jumpState=0;//最大速度publicfloatmaxVSpeed=8.0f;//最小速度publicfloatminVSpeed=5.0f;publicAudioClipimpact;AudioSourceaudioSource;//UsethisforinitializationvoidStart(){GetComponent<Rigidbody>().freezeRotation=true;m_animator=GetComponent<Animator>();if(m_animator==null)print("null");moveVSpeed=minVSpeed;audioSource=GetComponent<AudioSource>();} //Updateiscalledonceperframe voidUpdate(){//游戲結(jié)束if(gameManager.isEnd){Time.timeScale=0;}AnimatorStateInfostateInfo=m_animator.GetCurrentAnimatorStateInfo(0);if(stateInfo.fullPathHash==Animator.StringToHash("BaseLayer.run")){m_jumpState=0;if(Input.GetButton("Jump")){//起跳m_animator.SetBool("Jump",true);m_jumpBeginTime=m_animator.recorderStartTime;}else{//到地面}}else{doublenowTime=m_animator.recorderStartTime;doubledeltaTime=nowTime-m_jumpBeginTime;//掉下m_jumpState=1;m_animator.SetBool("Jump",false);}floath=Input.GetAxis("Horizontal");Vector3vSpeed=newVector3(this.transform.forward.x,this.transform.forward.y,this.transform.forward.z)*moveVSpeed;Vector3hSpeed=newVector3(this.transform.right.x,this.transform.right.y,this.transform.right.z)*moveHSpeed*h;Vector3jumpSpeed=newVector3(this.transform.up.x,this.transform.up.y,this.transform.up.z)*jumpHeight*m_jumpState;Vector3vCameraSpeed=newVector3(this.transform.forward.x,this.transform.forward.y,this.transform.forward.z)*minVSpeed;this.transform.position+=(vSpeed+hSpeed+jumpSpeed)*Time.deltaTime;cameraTransform.position+=(vCameraSpeed)*Time.deltaTime;if(this.transform.position.x-cameraTransform.position.x<cameraDistance){moveVSpeed+=0.1f;if(moveVSpeed>maxVSpeed){moveVSpeed=maxVSpeed;}}//超過(guò)時(shí)讓攝像機(jī)趕上elseif(this.transform.position.x-cameraTransform.position.x>cameraDistance){moveVSpeed=minVSpeed;cameraTransform.position=newVector3(this.transform.position.x-cameraDistance,cameraTransform.position.y,cameraTransform.position.z);}//攝像機(jī)超過(guò)人物if(cameraTransform.position.x-this.transform.position.x>0.0001f){Debug.Log("你輸啦!?。。。。。。。?!");gameManager.isEnd=true;}//cameraTransform.position=newVector3(this.transform.position.x-cameraDistance,cameraTransform.position.y,cameraTransform.position.z);}voidOnGUI(){if(gameManager.isEnd){GUIStylestyle=newGUIStyle();style.alignment=TextAnchor.MiddleCenter;style.fontSize=40;style.normal.textColor=Color.red;GUI.Label(newRect(Screen.width/2-100,Screen.height/2-50,200,100),"你輸了~",style);}}voidOnTriggerEnter(Colliderother){//如果是抵達(dá)點(diǎn)if(.Equals("ArrivePos")){gameManager.changeRoad(other.transform);}//如果是透明墻elseif(other.tag.Equals("AlphaWall")){//沒(méi)啥事情}//如果是障礙物elseif(other.tag.Equals("Obstacle")){}}}沖浪板的設(shè)計(jì)與特效實(shí)現(xiàn)在Unity中創(chuàng)建長(zhǎng)方形cube在3DMax中進(jìn)行修飾將其修整成前方為尖嘴形狀,為其尋找相應(yīng)的游戲貼入在3DMax中導(dǎo)入貼圖,在Project面板中新建一個(gè)Prefabs的文件夾將預(yù)制體命名為Surfboard3。同時(shí),使用粒子系統(tǒng),制作出沖浪板的沖浪特效。在Hierarchy面板Create->CreateEmpty->ParticleSystem新建一個(gè)空對(duì)象命名為surfpoint,將該空對(duì)象放置在沖浪板尾部附近,調(diào)整好方向,如圖3-4所示。這里就是后面浪花產(chǎn)生的地方,將其位置稍微調(diào)高讓特效不至于被其他物體擋住而無(wú)法顯示。圖3-4設(shè)置浪花孵化點(diǎn)給沖浪的浪花添加音效,添加AudioSource組件,并使用AudioSource.Play()方法播放。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclasssurfAudio:MonoBehaviour{AudioSourceaudioData;voidStart(){audioData=GetComponent<AudioSource>();audioData.Play(0);Debug.Log("started");}voidOnGUI(){if(GUI.Button(newRect(10,70,150,30),"Pause")){audioData.Pause();Debug.Log("Pause:"+audioData.time);}if(GUI.Button(newRect(10,170,150,30),"Continue")){audioData.UnPause();}}}障礙物與角色對(duì)象不一樣的是障礙物,將障礙物的模型導(dǎo)入,并其調(diào)整大小,并給它添加Ridgybody和BoxCollider。然后編寫(xiě)腳本實(shí)現(xiàn)障礙物的阻礙功能。這里使用publicList<GameObject>objPrefabList=newList<GameObject>()列表來(lái)隨機(jī)初始化障礙物生成的位置,里面的參數(shù)表示在添加障礙物對(duì)象。publicList<Transform>arrivePosList=newList<Transform>();//障礙物列表publicList<GameObject>objPrefabList=newList<GameObject>();//目前的障礙物Dictionary<string,List<GameObject>>objDict=newDictionary<string,List<GameObject>>();

游戲中,當(dāng)攝像機(jī)距離小于人物離屏幕距離時(shí),即游戲失敗之時(shí),用Deastroy()方法控制地圖中越過(guò)的障礙物,同時(shí)障礙物數(shù)量進(jìn)行同步保證游戲的性能穩(wěn)定。voidinitRoad(intindex){stringroadName=roadList[index].name;//清空已有障礙物foreach(GameObjectobjinobjDict[roadName]){Destroy(obj);}objDict[roadName].Clear();//添加障礙物foreach(TransformposinbornPosList[index]){GameObjectprefab=objPrefabList[Random.Range(0,objPrefabList.Count)];Vector3eulerAngle=newVector3(0,Random.Range(0,360),0);GameObjectobj=Instantiate(prefab,pos.position,Quaternion.EulerAngles(eulerAngle))asGameObject;obj.tag="Obstacle";objDict[roadName].Add(obj);}使用Distance()方法判斷人物與屏幕之間的距離,當(dāng)距離大于0米且速度低于5時(shí),人物速度逐漸增加,并使人物運(yùn)動(dòng)到離攝像機(jī)距離為10時(shí)保持穩(wěn)定;當(dāng)人物運(yùn)動(dòng)速度穩(wěn)定為5時(shí)人物不做加速運(yùn)動(dòng);當(dāng)攝像機(jī)超過(guò)人物時(shí)即人物距離攝像機(jī)小于0時(shí)游戲判斷失敗,游戲暫停人物無(wú)法運(yùn)動(dòng)。if(this.transform.position.x-cameraTransform.position.x<cameraDistance){moveVSpeed+=0.1f;if(moveVSpeed>maxVSpeed){moveVSpeed=maxVSpeed;}}//超過(guò)時(shí)讓攝像機(jī)趕上elseif(this.transform.position.x-cameraTransform.position.x>cameraDistance){moveVSpeed=minVSpeed;cameraTransform.position=newVector3(this.transform.position.x-cameraDistance,cameraTransform.position.y,cameraTransform.position.z);}//攝像機(jī)超過(guò)人物if(cameraTransform.position.x-this.transform.position.x>0.0001f){Debug.Log("你輸啦?。。。。。。。。?!");gameManager.isEnd=true;}游戲中的碰撞檢測(cè)用OnTriggerEnter(Colliderother)方法檢測(cè)角色拾取金幣以及觸發(fā)金幣音效的互動(dòng),金幣同時(shí)也要檢測(cè)是否為人物拾取,增加角色的得分privatevoidOnTriggerEnter(Colliderother){if(other.tag=="Player"){moveControllercharacter=other.GetComponent<moveController>();source.PlayOneShot(OpenDoorSound,1F);//播放聲音if(character!=null){character.coins+=gems;Destroy(coin1);Destroy(c);Destroy(gameObject,1F);}}}游戲中當(dāng)人物拾取到金幣時(shí)通過(guò)OnTriggerEnter(Colliderother)方法做出相應(yīng)的得分變化,如果人物拾取到金幣則增加游戲得分,如果角色未拾取到金幣則不增加得分usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassScore:MonoBehaviour{TextscoreText;publicTextCoinNum;publicmoveControllermc;voidStart(){scoreText=this.GetComponent<Text>();Time.timeScale=0;}//UpdateiscalledonceperframevoidUpdate(){CoinNum.text=mc.coins+"coin";//scoreText.text="coins:"+moveController.coins.ToString();}publicvoidStartPlus(){Time.timeScale=1;}publicvoidWin(){if(mc.coins>=1000){GUIStylestyle=newGUIStyle();style.alignment=TextAnchor.MiddleCenter;style.fontSize=40;style.normal.textColor=Color.red;GUI.Label(newRect(Screen.width/2-100,Screen.height/2-50,200,100),"你贏了!",style);}Time.timeScale=0;}}地圖和地圖隨機(jī)生成通過(guò)GameManager將游戲中的地圖導(dǎo)入進(jìn)Unity中然后保存其prefab,編寫(xiě)地圖生成列表以及地圖prefab生成列表,除此還需要對(duì)走完的地圖進(jìn)行銷(xiāo)毀,因此需要道路的銷(xiāo)毀列表。

usingUnityEngine;usingSystem.Collections;usingSystem.Collections.Generic;publicclassGameManager:MonoBehaviour{//道路列表publicList<Transform>roadList=newList<Transform>();//抵達(dá)點(diǎn)列表publicList<Transform>arrivePosList=newList<Transform>();//目前的障礙物Dictionary<string,List<GameObject>>objDict=newDictionary<string,List<GameObject>>();publicintroadDistance;publicboolisEnd=false; //Usethisforinitialization voidStart(){foreach(TransformroadinroadList){List<GameObject>objList=newList<GameObject>();objDict.Add(,objList);}initRoad(0);initRoad(1);} //Updateiscalledonceperframe voidUpdate(){ }//切出新的道路publicvoidchangeRoad(TransformarrivePos){intindex=arrivePosList.IndexOf(arrivePos);if(index>=0){intlastIndex=index-1;if(lastIndex<0)lastIndex=roadList.Count-1;//移動(dòng)道路roadList[index].position=roadList[lastIndex].position+newVector3(roadDistance,0,0);initRoad(index);}else{Debug.LogError("arrivePosindexiserror");return;}}voidinitRoad(intindex){stringroadName=roadList[index].name;//清空已有障礙物foreach(GameObjectobjinobjDict[roadName]){Destroy(obj);}objDict[roadName].Clear();}}

添加背景音樂(lè)及游戲音效通過(guò)publicAudioSourceasource、publicSlidersd、Con_sound()方法給游戲添加背景音樂(lè)和游戲音效。金幣的音效通過(guò)source.PlayOneShot(OpenDoorSound,1F);表示該音效只播放一次usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassControl_sound:MonoBehaviour{publicAudioSourceasource;publicSlidersd;voidStart(){}//UpdateiscalledonceperframevoidUpdate(){}publicvoidCon_sound(){asource.volume=sd.value;}}

游戲界面設(shè)計(jì)菜單界面場(chǎng)景1為菜單界面,菜單界面包括開(kāi)始游戲界面和設(shè)置界面,均使用NGUI插件制作。菜單界面功能PLAY按鈕:點(diǎn)擊該按鈕可以進(jìn)入游戲難度選擇,其中有三個(gè)難度分別為EASY、Normal、Hard三種游戲難度點(diǎn)擊EASY進(jìn)入游戲場(chǎng)景1、Normal、Hard分別對(duì)應(yīng)游戲場(chǎng)景2和3.在游戲菜單界面,當(dāng)鼠標(biāo)經(jīng)過(guò)按鈕時(shí)會(huì)有相應(yīng)的互動(dòng)效果表示給玩家,且鼠標(biāo)點(diǎn)擊時(shí)也會(huì)有顏色的透明度互動(dòng)表示玩家點(diǎn)擊了該按鈕Option按鈕:點(diǎn)擊該按鈕進(jìn)入游戲的配置界面,玩家可以調(diào)整游戲本身的音效以保證適合自己,其中BACk按鈕即設(shè)置完成后回到主菜單。BACk按鈕:當(dāng)玩家設(shè)置完成時(shí)可以點(diǎn)擊Back按鈕返回主菜單設(shè)置的音效會(huì)同步玩家設(shè)置QUIT按鈕:點(diǎn)擊該按鈕退出游戲。圖4-1游戲開(kāi)始界面圖4-2游戲設(shè)置界面菜單界面的制作制作菜單界面時(shí),需要?jiǎng)?chuàng)建一個(gè)新的場(chǎng)景再Assets的Sence中創(chuàng)建新場(chǎng)景并命名為1_menu,再Unity的buildandsetting中可以將該場(chǎng)景設(shè)為場(chǎng)景0,導(dǎo)入菜單制作所需的素材和腳本,再點(diǎn)擊Create->UI->image,創(chuàng)建一張圖片作為界面的背景,如圖4-3所示。然后通過(guò)資源將背景圖片導(dǎo)入U(xiǎn)nity中并Inspector面板設(shè)置其屬性將它設(shè)置為sprite(2DandUI),如圖4-4所示。然后在Inspector面板上將導(dǎo)入的素材背景圖片拖入image中并調(diào)整圖片大小使其適合攝像機(jī)的范圍。圖4-3用UGUI創(chuàng)建的背景圖4-4背景設(shè)置然后點(diǎn)擊Create->UI->Button創(chuàng)建游戲按鈕由于游戲本身按鈕顏色為白色,通過(guò)調(diào)整顏色使其顏色相對(duì)較為適合游戲主題,添加按鈕文字在Button->Test中,修改文本信息,并調(diào)整文本大小進(jìn)行適當(dāng)?shù)募哟忠约拔谋敬笮≌{(diào)整,然后安裝文本插件TextMeshPro調(diào)整文本顏色使其更為鮮艷,其它的按鈕創(chuàng)建一樣。所有按鈕創(chuàng)建完后,把他們放進(jìn)一個(gè)新建的空對(duì)象中并命名為MainMenu。將其余按鈕通過(guò)按ALT鍵且點(diǎn)擊RectTransform面別中的AnchorPresets,使其居中再對(duì)三個(gè)按鈕位置進(jìn)行上下調(diào)整,使當(dāng)前三個(gè)按鈕都置于屏幕中央位置。圖4-5按鈕的創(chuàng)建創(chuàng)建一個(gè)新的空對(duì)象將其命名為Option,如上邊創(chuàng)建其他的一樣,然后再Create->UI中找到Slider創(chuàng)建,該UI自帶Slider滑動(dòng)條用于調(diào)節(jié)游戲音量。圖4-6設(shè)置面板然后創(chuàng)建腳本Control_sound.cs來(lái)處理玩家與游戲界面的交互。這里實(shí)現(xiàn)游戲音效有效變化。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassControl_sound:MonoBehaviour{publicAudioSourceasource;publicSlidersd;publicvoidCon_sound(){asource.volume=sd.value;}}這里使用Button自帶的腳本來(lái)實(shí)現(xiàn)菜單界面、難度選擇界面和游戲設(shè)置界面的切換,其中包括游戲進(jìn)行中的游戲暫停以及游戲設(shè)置和返回游戲等功能,使用OnButtonClick方法處理按鈕的點(diǎn)擊。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.SceneManagement;publicclassMainmenu:MonoBehaviour{publicvoidPlayGame(){SceneManager.LoadScene(1);}publicvoidPlayGame1(){SceneManager.LoadScene(2);}publicvoidPlayGame2(){SceneManager.LoadScene(3);}publicvoidresume(){Time.timeScale=1;}publicvoidBackMenu(){SceneManager.LoadScene(0);}publicvoidQuitGame(){Debug.Log("QUIT!");Application.Quit();}游戲結(jié)束界面游戲結(jié)束界面使用UnityUI制作。游戲結(jié)束界面功能玩家拾取目標(biāo)數(shù)金幣時(shí),判斷游戲勝利,UI上方的文本Text顯示為:你贏了。玩家被卡在屏幕外時(shí),判斷游戲失敗,UI上方的文本Text顯示為:你輸了~。重玩按鈕:點(diǎn)擊AGAIN按鈕,重新加載游戲。設(shè)置按鈕:點(diǎn)擊Option按鈕,進(jìn)入設(shè)置菜單。設(shè)置菜單用來(lái)調(diào)節(jié)游戲音效。菜單按鈕:點(diǎn)擊Quit按鈕,回到場(chǎng)景0,即菜單界面。圖4-7游戲結(jié)束界面游戲失敗界面制作通過(guò)Unity自帶的UI制作GUI界面在Create界面中創(chuàng)建UI->button,創(chuàng)建三個(gè)游戲按鈕分別用來(lái)實(shí)現(xiàn)游戲的再次進(jìn)行和游戲設(shè)置以及游戲返回主菜單,將三個(gè)Button的錨點(diǎn)居中然后再進(jìn)行上下調(diào)整,然后將創(chuàng)建好的按鈕以及文本等UI放置在新創(chuàng)建的空對(duì)象DeadMenu中方便管理創(chuàng)建publicGameObjectDead、Dead.SetActive(true)、publicGameObjectWin、Win.SetActive(true)方法通過(guò)添加相應(yīng)的DeadMenu、WinMeun來(lái)顯示游戲結(jié)束菜單,同樣的游戲勝利時(shí)分別調(diào)用。voidOnGUI(){if(gameManager.isEnd){GUIStylestyle=newGUIStyle();style.alignment=TextAnchor.MiddleCenter;style.fontSize=40;style.normal.textColor=Color.red;GUI.Label(newRect(Screen.width/2-100,Screen.height/2-50,200,100),"你輸了~",style);}}publicvoidWin(){if(mc.coins>=1000){GUIStylestyle=newGUIStyle();style.alignment=TextAnchor.MiddleCenter;style.fontSize=40;style.normal.textColor=Color.red;GUI.Label(newRect(Screen.width/2-100,Screen.height/2-50,200,100),"你贏了!",style);}Time.timeScale=0;}接下來(lái)給游戲結(jié)束界面添加相應(yīng)的效果以及音效使其有相對(duì)的氣氛。圖4-8游戲音效添加給重玩按鈕和菜單按鈕添加點(diǎn)擊事件。publicvoidPlayGame(){SceneManager.LoadScene(1);}publicvoidBackMenu(){SceneManager.LoadScene(0);}暫停界面游戲主界面均使用UGUI制作,左上方顯示游戲按鈕功能,中上方顯示獲得金幣數(shù)量中間部分顯示相應(yīng)的游戲繼續(xù)進(jìn)行以及游戲設(shè)置和游戲返回主菜單按鈕界面功能按P鍵游戲暫停當(dāng)玩家需要休息時(shí)以及要退出游戲時(shí)可以使用,暫停游戲圖4-9暫停界面暫停界面的制作首先如菜單一樣創(chuàng)建相應(yīng)的游戲按鈕Create->UI->Button創(chuàng)建三個(gè)按鈕修改按鈕文本以及調(diào)整按鈕的圖片樣式顏色選擇相對(duì)適合暫停界面的顏色,然后如圖4-10所示在按鈕中添加相應(yīng)的OnClick方法,實(shí)現(xiàn)有效的菜單跳轉(zhuǎn)以及場(chǎng)景跳轉(zhuǎn)。圖4-10暫停菜單按鈕配置usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.SceneManagement;publicclassPausemenu:MonoBehaviour{publicvoidPlayGame(){SceneManager.LoadScene(1);}publicvoidPlayGame1(){SceneManager.LoadScene(2);}publicvoidPlayGame2(){SceneManager.LoadScene(3);}publicvoidresume(){Time.timeScale=1;}publicvoidBackMenu(){SceneManager.LoadScene(0);}if(Input.GetKeyDown(KeyCode.P)){Time.timeScale=0;Menu.SetActive(true);}金幣金幣功能通過(guò)拾取地圖中的金幣獲得更多的得分和游戲的勝利金幣的制作在Unity商城中獲得所需要的Coins,游戲中Coins分為三種金幣、銀幣、銅幣對(duì)應(yīng)相應(yīng)的得分5、3、1。在GameManger中添加相應(yīng)的游戲金幣生成列表即bornCoinList,和對(duì)應(yīng)金幣類(lèi)型列表CoinPrefabList并且為金幣生成的點(diǎn)進(jìn)行排列使其生成在適合位置,然后在Inspector面板中加入三種金幣類(lèi)型具體如下圖:圖4-10添加金幣類(lèi)型//生成金幣列表publicList<Transform>bornCoinList=newList<Transform>();//金幣列表publicList<GameObject>CoinPrefabList=newList<GameObject>();//添加金幣foreach(TransformposinbornCoinList[index]){GameObjectprefab=CoinPrefabList[Random.Range(0,CoinPrefabList.Count)];Vector3eulerAngle=newVector3(0,Random.Range(0,360),0);GameObjectobj=Instantiate(prefab,pos.position,Quaternion.EulerAngles(eulerAngle))asGameObject;obj.tag="Obstacle";objDict[roadName].Add(obj);}在工程項(xiàng)目中創(chuàng)建一個(gè)空對(duì)象并且命名為GoldCoin,另外兩種金幣類(lèi)型分別命名為SilverCoin、CopperCoin,然后將游戲prefab的金幣進(jìn)行調(diào)試將其rotation的Z軸旋轉(zhuǎn)90度使其立起來(lái),同理另外兩中也是如此,然后將其保存在原來(lái)的prefab上調(diào)整金幣大小為100,然后添加金幣音效使角色拾取到金幣使觸發(fā),使人物

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論