




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
畢業(yè)論文(設(shè)計(jì))論文(設(shè)計(jì))題目:基于安卓系統(tǒng)的自選數(shù)量的手機(jī)賽車(chē)游戲姓名學(xué)號(hào)學(xué)院山東大學(xué)軟件學(xué)院專(zhuān)業(yè)數(shù)字媒體技術(shù)年級(jí)指導(dǎo)教師2016年5月18日基于安卓系統(tǒng)的自選數(shù)量的手機(jī)賽車(chē)游戲摘要隨著手機(jī)不斷發(fā)展,手機(jī)游戲已經(jīng)成為人們?nèi)粘I钪械囊徊糠种?手機(jī)賽車(chē)游戲是一種競(jìng)速類(lèi)手機(jī)游戲,其操作簡(jiǎn)單、畫(huà)面逼真、音效刺激等優(yōu)點(diǎn)吸引了無(wú)數(shù)賽車(chē)迷。本課題設(shè)計(jì)開(kāi)發(fā)一個(gè)基于安卓系統(tǒng)的自選數(shù)量的手機(jī)賽車(chē)游戲。在分析賽車(chē)游戲目前行業(yè)背景和需求的基礎(chǔ)上,對(duì)賽車(chē)游戲進(jìn)行規(guī)劃設(shè)計(jì)并用功能模塊圖詳細(xì)表示了實(shí)現(xiàn)的具體功能,特別添加了可自選數(shù)量的游戲功能。本論文在需求分析的基礎(chǔ)上,設(shè)計(jì)游戲的具體架構(gòu)。利用Unity3D等軟件具體實(shí)現(xiàn)這些需求,添加音效和部分玩家可自行修改的功能以保障游戲的多樣性和可玩性。本游戲最終在安卓模擬器上進(jìn)行測(cè)試和維護(hù)并最終應(yīng)用到手機(jī)上。游戲整體運(yùn)行狀況良好,游戲過(guò)程中沒(méi)有出現(xiàn)卡頓、閃退的現(xiàn)象,游戲功能能正確實(shí)現(xiàn),總體效果令人滿意。關(guān)鍵詞:賽車(chē)游戲、安卓、Unity3DABSTRACTWiththecontinuousdevelopmentofmobilephone,mobilephonegamehasbecomeapartofpeople’sdailylife.Mobileracinggameisaracingmobilegamecategory.Ithasattractednumerousracingfanssincesimpleoperation,vividimagesandstimulatingsound.ThistopicisbasedonthechoiceofthenumberofAndroidsystemmobileracinggame.Basedontheanalysisofthecurrentbackgroundandrequirementsoftheracinggameindustry,thispaperdesignstheracinggameandusesthefunctionblockdiagramtoshowthespecificfunction.Inordertodistinguishthedesignofotherstudents,itaddsafunctiontochoosethenumberofplayers.Onthebasisofthedemandanalysis,itdesignsthespecificstructureofthegame.ThispaperusesUnity3Dandothersoftwaretoachievetheserequirements,itaddssoundefftectandsomeotherfunctionswhichplayerscanmodifytoprotectthediversityandplayofthegame.ThisgameisfinallytestedandmaintainedontheAndroidsimulatorandeventuallyappliedtotheAndroidphone.Thistopicmainlyinspectsstudents’abilitytodiscoverthequestion,analysisthequestionandsolvethequestionandimprovesstudents’practicalability.Welldesignedracinggamecanbeputintothemarket.ProblemsencounteredinthesubjectcanbehelpfulforpeopletolearnUnity3D.Keywords:racinggame,Android,Unity3D第1章緒論1.1手機(jī)賽車(chē)游戲簡(jiǎn)介隨著手機(jī)不斷發(fā)展,手機(jī)早已經(jīng)不是當(dāng)初僅僅用來(lái)收發(fā)短信、撥打電話的通訊工具,越來(lái)越多的手機(jī)游戲出現(xiàn)在人們視野中,手機(jī)游戲也逐漸成為人們?nèi)粘I钪行蓍e娛樂(lè)的一種方式。手機(jī)游戲的出現(xiàn)極大地促進(jìn)了移動(dòng)終端的娛樂(lè)服務(wù)的發(fā)展,這也同時(shí)帶動(dòng)了手機(jī)產(chǎn)業(yè)的快速發(fā)展。近年來(lái),隨著移動(dòng)網(wǎng)絡(luò)2G、3G、4G以及手機(jī)性能不斷提升,特別是智能手機(jī)的出現(xiàn),手機(jī)游戲的發(fā)展呈快速增長(zhǎng)的趨勢(shì),目前手機(jī)游戲產(chǎn)業(yè)已經(jīng)成為游戲產(chǎn)業(yè)不可缺少的組成部分。手機(jī)游戲特點(diǎn)是其他游戲類(lèi)型難以比擬的:龐大的用戶人數(shù)——據(jù)統(tǒng)計(jì)全球使用手機(jī)的用戶已經(jīng)超過(guò)10億人,并且這個(gè)數(shù)字每年都在不斷增加,如此龐大的潛在手機(jī)游戲用戶正是手機(jī)游戲不斷發(fā)展的動(dòng)力;手機(jī)的便攜性和移動(dòng)性——相比于電腦、游戲機(jī)等游戲設(shè)備,手機(jī)方便攜帶移動(dòng),這位人們消磨時(shí)間提供了很好的機(jī)會(huì);支持網(wǎng)絡(luò)——隨著不斷發(fā)展,手機(jī)游戲支持網(wǎng)絡(luò)連接,越來(lái)越多的手機(jī)游戲支持聯(lián)網(wǎng)對(duì)戰(zhàn),人們可以和好友進(jìn)行游戲?qū)Q,這也促進(jìn)了手機(jī)游戲的發(fā)展。自從汽車(chē)出現(xiàn),人們就想到利用汽車(chē)進(jìn)行比賽,賽車(chē)也就在這種情況下應(yīng)運(yùn)而生。不同于普通汽車(chē),賽車(chē)更快、動(dòng)力更強(qiáng)、賽車(chē)相互碰撞,這些都極大地刺激了人們的視覺(jué)體驗(yàn)。從賽車(chē)運(yùn)動(dòng)出現(xiàn)以來(lái),賽車(chē)運(yùn)動(dòng)就一直吸引了無(wú)數(shù)人的視線。甚至還有許多賽車(chē)題材的電影:《速度與激情》系列、《的士速遞》系列、《非常人販》系列等。自從手機(jī)游戲的出現(xiàn),游戲開(kāi)發(fā)商就試圖開(kāi)發(fā)手機(jī)賽車(chē)游戲,讓玩家可以在手機(jī)上體驗(yàn)真實(shí)賽車(chē)運(yùn)動(dòng)的快感。早期的賽車(chē)游戲在現(xiàn)在看來(lái)是非常幼稚的,游戲開(kāi)發(fā)商受技術(shù)限制不能設(shè)計(jì)出逼真的畫(huà)面,游戲更像是一些像素堆積起來(lái)的圖形,同時(shí)賽車(chē)的碰撞、漂移特效受技術(shù)的限制也不能完美的表現(xiàn)出來(lái),當(dāng)然這帶來(lái)的是玩家的游戲體驗(yàn)不盡如人意,后來(lái),手機(jī)不斷手機(jī)換代,手機(jī)處理能力不斷增強(qiáng)、內(nèi)存不斷增大,特別是智能手機(jī)的出現(xiàn),手機(jī)逐漸演變成掌上迷你電腦,這也為復(fù)雜真實(shí)的手機(jī)賽車(chē)游戲提供了發(fā)展的契機(jī)。此時(shí),手機(jī)賽車(chē)游戲畫(huà)面逼真,音效帶感,賽車(chē)的漂移、碰撞特效真實(shí),玩家能確實(shí)體驗(yàn)到飆車(chē)的快感。由于手機(jī)賽車(chē)游戲操作簡(jiǎn)單、畫(huà)面逼真、音效獨(dú)特、每局游戲耗時(shí)少,玩家不需要太多的操作和時(shí)間就能體驗(yàn)真實(shí)飆車(chē)的快感,因此手機(jī)賽車(chē)游戲吸引了無(wú)數(shù)賽車(chē)迷,如今手機(jī)賽車(chē)游戲已成為手機(jī)游戲行業(yè)一個(gè)重要組成部分。1.2國(guó)內(nèi)外研究背景賽車(chē)游戲主要是在比賽環(huán)境下進(jìn)行的,目前賽車(chē)游戲在游戲產(chǎn)業(yè)占有很大比重享有盛譽(yù),愛(ài)好競(jìng)速的賽車(chē)迷都對(duì)賽車(chē)游戲著迷,他們以體驗(yàn)速度為樂(lè)趣,這類(lèi)游戲的目的只有一個(gè)——更快。賽車(chē)游戲的操作極其簡(jiǎn)單,玩家只需要控制賽車(chē)前后左右移動(dòng)、漂移、加速即可,技術(shù)性方面不是特別強(qiáng),每局游戲時(shí)間也較短一般只有幾分鐘。由于賽車(chē)游戲操作簡(jiǎn)單,再加上逼真的畫(huà)面、獨(dú)特的音效,一直備受玩家們的追捧。最早的賽車(chē)游戲可以追溯到1984年,Konami開(kāi)發(fā)了一款模擬賽車(chē)游戲——《公路戰(zhàn)士》,這是最早的賽車(chē)游戲之一。玩家通過(guò)左右移動(dòng)躲過(guò)賽道上的障礙物并且要在規(guī)定時(shí)間內(nèi)到達(dá)終點(diǎn)。當(dāng)時(shí)的游戲畫(huà)面粗糙、音效一般并且都是單機(jī)游戲并不提供玩家聯(lián)網(wǎng)對(duì)戰(zhàn)的功能。隨著手機(jī)技術(shù)的發(fā)展以及開(kāi)發(fā)商技術(shù)的提高,賽車(chē)模型越來(lái)越逼真,游戲場(chǎng)景越來(lái)越逼真,游戲音效也穩(wěn)步提高,游戲中的漂移特效也為游戲增色不少。說(shuō)到賽車(chē)游戲,就不得不提兩款賽車(chē)游戲巨頭:《極品飛車(chē)》、《狂野飆車(chē)》?!稑O品飛車(chē)》是由美國(guó)藝電游戲公司出品研發(fā)的一款賽車(chē)游戲,第一款發(fā)行于1994年,這是該系列游戲的處女座,從1994年到2012年一共出品了13代17個(gè)作品。該款游戲試圖在快速賽車(chē)游戲和逼真場(chǎng)景之間找到平衡點(diǎn)?!稑O品賽車(chē)》的出現(xiàn)徹底改變了過(guò)去粗糙的賽車(chē)游戲的格局,其他賽車(chē)游戲開(kāi)發(fā)商為了與其抗衡,便不斷提高游戲品質(zhì)增加游戲體驗(yàn),也正是在這一時(shí)期,賽車(chē)游戲有了長(zhǎng)足的進(jìn)步,毫不夸張的說(shuō),《極品飛車(chē)》是賽車(chē)游戲史上的一座里程碑?!稑O品飛車(chē)》起初實(shí)在電腦端運(yùn)行,后來(lái)隨著該游戲不斷發(fā)展壯大,開(kāi)發(fā)商把它移植到各種游戲平臺(tái),現(xiàn)在PS3、X360、GBA、PSP、3DS、手機(jī)各個(gè)游戲終端都能見(jiàn)到《極品飛車(chē)》,其火熱程度可見(jiàn)一斑。圖1-1是《極品飛車(chē)》游戲畫(huà)面。圖1-1極品飛車(chē)《狂野飆車(chē)》Gameloft開(kāi)發(fā)的一款賽車(chē)游戲,于2004年發(fā)布第一代作品《狂野飆車(chē)GT》。作為手機(jī)賽車(chē)游戲的后起之秀,狂野飆車(chē)極大地吸收了其他優(yōu)秀賽車(chē)游戲的特點(diǎn)并加以融合并添加自己獨(dú)特的元素??褚帮j車(chē)在游戲中添加了部分夸張的功能很好地增加了游戲的樂(lè)趣。2013年8月,《狂野飆車(chē)》發(fā)布了最新的版本狂野飆車(chē)8,該款游戲加入了數(shù)百輛頂級(jí)賽車(chē)以及數(shù)十條充滿異國(guó)風(fēng)情的賽道,這些都為游戲增色不少。玩家可以完成基礎(chǔ)賽道累計(jì)金幣購(gòu)買(mǎi)高級(jí)賽車(chē)解鎖更高難度的賽道,同時(shí)游戲每周還有杯賽供玩家們相互切磋。游戲有競(jìng)速、漂移、碰撞、淘汰、對(duì)決、傳染等不同比賽模式供玩家們選擇。游戲中玩家可控制賽車(chē)進(jìn)行加速、漂移、撞擊、飛躍、水平螺旋、桶滾等操作。豐富的賽車(chē)和地圖多樣的玩法讓《狂野飆車(chē)》在賽車(chē)游戲行業(yè)站穩(wěn)腳跟,如今已經(jīng)和《極品飛車(chē)》成為賽車(chē)游戲界的兩大龍頭。圖1-2是《狂野飆車(chē)》游戲畫(huà)面。圖1-2狂野飆車(chē)《極品飛車(chē)》和《狂野飆車(chē)》都追求逼真的畫(huà)面、極致的音效,極大地刺激了玩家的感官,真實(shí)還原了飆車(chē)的刺激。但在追求真實(shí)的同時(shí)帶來(lái)的卻是游戲安裝包過(guò)大以及手機(jī)系統(tǒng)配置要求過(guò)高等缺點(diǎn),這也是不可避免的問(wèn)題。復(fù)雜的場(chǎng)景設(shè)計(jì)、逼真的賽車(chē)、眾多的游戲動(dòng)畫(huà)和特效必然導(dǎo)致游戲內(nèi)容增多安裝包變大同時(shí)對(duì)手機(jī)配置的要求也更高。這讓許多手機(jī)配置較低的玩家望而卻步。2013年國(guó)產(chǎn)賽車(chē)游戲《天天飛車(chē)》由國(guó)內(nèi)巨頭騰訊制作發(fā)行,定位于3D寫(xiě)實(shí)閃避類(lèi)賽車(chē)手游。游戲犧牲掉了真實(shí)的畫(huà)面感,壓縮了包體大小,減少了配置要求,同時(shí)還加入了簡(jiǎn)單的互動(dòng)元素,玩家可以與好友互比積分,而且其操作非常簡(jiǎn)單,只需要左右閃避,上下跳躍,弱化了賽車(chē)游戲操作的刺激體驗(yàn)。同時(shí),弱聯(lián)網(wǎng)的《天天飛車(chē)》缺乏真實(shí)的聯(lián)網(wǎng)競(jìng)技互動(dòng),并且其操作形式更像是跑酷游戲的變形,而非尋求速度、激情的賽車(chē)游戲。圖1-3是《天天飛車(chē)》游戲畫(huà)面圖1-3天天飛車(chē)1.3解決的問(wèn)題基于安卓的手機(jī)賽車(chē)游戲是在安卓平臺(tái)上運(yùn)行的自選數(shù)量的賽車(chē)類(lèi)游戲,該課題要求設(shè)計(jì)一款玩家控制賽車(chē)和電腦賽車(chē)進(jìn)行競(jìng)賽比賽并且玩家能選擇比賽人數(shù)的能在安卓平臺(tái)上運(yùn)行的手機(jī)游戲。在需求方面,根據(jù)市面上流行的賽車(chē)游戲分析用戶需要的游戲功能,包括游戲設(shè)計(jì)時(shí)自帶的功能和玩家可自行修改的功能。主要需要解決這些游戲性能問(wèn)題:賽車(chē)前后左右的運(yùn)動(dòng)控制、賽車(chē)漂移、相機(jī)平滑跟隨賽車(chē)移動(dòng)、電腦賽車(chē)自動(dòng)完成賽道、系統(tǒng)計(jì)時(shí)等,此外還要解決以下玩家使用問(wèn)題:用戶名記錄、選擇賽車(chē)賽道、選擇游戲人數(shù)、退出游戲等玩家可以選擇的功能。在設(shè)計(jì)方面,基于真實(shí)賽車(chē)的運(yùn)動(dòng)特性和物理原理,真實(shí)模擬現(xiàn)實(shí)中賽車(chē)的運(yùn)動(dòng),必須滿足玩家對(duì)賽車(chē)游戲的基本要求??梢越o游戲添加適當(dāng)?shù)目浯蠊δ埽^(guò)科幻的功能是不可取的。游戲設(shè)計(jì)時(shí)賽車(chē)模型應(yīng)當(dāng)造型適當(dāng)比例合適不能太過(guò)浮夸,賽車(chē)的運(yùn)動(dòng)特性要符合真實(shí),賽車(chē)要具備前后左右運(yùn)動(dòng)以及漂移加速減速等操作,此外還要給賽車(chē)添加漂移時(shí)的輪印以及車(chē)尾氣等特效。此外,還要設(shè)計(jì)計(jì)時(shí)系統(tǒng),系統(tǒng)以此來(lái)判斷游戲的勝負(fù)。在實(shí)現(xiàn)方面,根據(jù)之前分析的需求,具體實(shí)現(xiàn)設(shè)計(jì)內(nèi)容,盡量保證符合現(xiàn)實(shí)不違反物理原理。重點(diǎn)解決賽車(chē)的運(yùn)行問(wèn)題、電腦賽車(chē)運(yùn)行問(wèn)題以及系統(tǒng)判定勝負(fù)的問(wèn)題。通過(guò)查看相關(guān)視頻、教程、資料逐步完成游戲的開(kāi)發(fā),最終對(duì)游戲進(jìn)行性能測(cè)試修改相關(guān)數(shù)據(jù)。1.4論文研究?jī)?nèi)容本課題主要實(shí)現(xiàn)基于安卓系統(tǒng)的自選數(shù)量的手機(jī)賽車(chē)游戲,具體需要實(shí)現(xiàn)以下操作:前進(jìn)、后退、轉(zhuǎn)向、漂移(減速)、加速。此外還必須設(shè)計(jì)電腦賽車(chē)來(lái)和玩家賽車(chē)進(jìn)行競(jìng)賽,并且系統(tǒng)還能判斷賽車(chē)之間、賽車(chē)和障礙物之間的碰撞、勝負(fù)判定等。另外,還要給賽車(chē)添加漂移時(shí)的輪印特效以及車(chē)尾氣特效,給游戲添加適當(dāng)?shù)谋尘耙魳?lè)。這些都是本課題需要著重解決的問(wèn)題。本課題利用unity3D游戲引擎進(jìn)行游戲的初期開(kāi)發(fā),最終在安卓游戲平臺(tái)上進(jìn)行測(cè)試、運(yùn)行、修改參數(shù)等。本文首先介紹了手機(jī)賽車(chē)游戲以及目前國(guó)內(nèi)外賽車(chē)游戲行業(yè)的情況,詳細(xì)分析了該課題的需求以及該游戲可提供的游戲功能,然后介紹了完成該課題的游戲開(kāi)發(fā)平臺(tái)Unity3D和Android,重點(diǎn)分析了設(shè)計(jì)游戲過(guò)程中使用的幾個(gè)關(guān)鍵技術(shù),隨后闡述了游戲的設(shè)計(jì)方法和設(shè)計(jì)原則以及游戲的總體框架和概念模型。在概念模型的基礎(chǔ)上,逐步實(shí)現(xiàn)之前各個(gè)功能,其中重點(diǎn)實(shí)現(xiàn)賽車(chē)的運(yùn)行、碰撞、計(jì)時(shí)功能。設(shè)計(jì)完成的游戲?qū)氲紸ndroidSDK中,在安卓模擬器上模擬游戲在安卓系統(tǒng)中的運(yùn)行情況,不斷調(diào)試修改游戲參數(shù)直至達(dá)到滿意效果。1.5論文結(jié)構(gòu)本文將按照以下結(jié)構(gòu)安排:編寫(xiě)緒論,對(duì)本課題研究?jī)?nèi)容進(jìn)行闡述。簡(jiǎn)單介紹了手機(jī)賽車(chē)游戲,國(guó)內(nèi)外目前在手機(jī)賽車(chē)游戲方面的研究狀況,實(shí)現(xiàn)本課題需要解決的問(wèn)題,以及對(duì)實(shí)現(xiàn)本課題的工具進(jìn)行簡(jiǎn)介。對(duì)本課題進(jìn)行需求分析。主要描述了手機(jī)賽車(chē)游戲的背景、根據(jù)目前市場(chǎng)上流行的手機(jī)賽車(chē)游戲具體分析玩家對(duì)手機(jī)賽車(chē)游戲的基本要求,并分析一些可添加的可選功能。具體進(jìn)行系統(tǒng)設(shè)計(jì),規(guī)劃如何實(shí)現(xiàn)第二章提出的需求。對(duì)具體的游戲系統(tǒng)進(jìn)行詳細(xì)的規(guī)劃設(shè)計(jì)。本章介紹了開(kāi)發(fā)游戲使用的平臺(tái)、游戲中的關(guān)鍵技術(shù)、設(shè)計(jì)方法和原則以及游戲的概念模型。第四章講述根據(jù)第二、三章的要求實(shí)現(xiàn)的系統(tǒng)。按照第三章的對(duì)手機(jī)賽車(chē)游戲系統(tǒng)的詳細(xì)設(shè)計(jì)利用unity3D具體實(shí)現(xiàn)手機(jī)賽車(chē)游戲。第五章對(duì)已完成的手機(jī)賽車(chē)游戲在安卓模擬器上進(jìn)行性能測(cè)試,對(duì)不滿足設(shè)計(jì)要求的方面進(jìn)行改進(jìn)。最后是對(duì)此次課題研究的總結(jié)。
第2章需求分析2.1手機(jī)賽車(chē)游戲概述為了設(shè)計(jì)一款合格、耐玩的手機(jī)游戲,耐玩性是頭等問(wèn)題,為此必須注意許多方面的問(wèn)題。手機(jī)賽車(chē)游戲?yàn)榱四芪嗳耍?huà)面不能太過(guò)粗糙,同時(shí)必須添加一些富有激情的音樂(lè)和富有沖擊力的畫(huà)面,充分刺激玩家的視覺(jué)、聽(tīng)覺(jué)體驗(yàn)。手機(jī)賽車(chē)游戲必須符合日常的物理規(guī)律,太過(guò)逆天的功能,如“飛天”、“潛水”只會(huì)適得其反影響玩家的體驗(yàn)。該款手機(jī)賽車(chē)游戲和市場(chǎng)上的賽車(chē)游戲一樣,操作不能太過(guò)復(fù)雜,簡(jiǎn)單的操作和刺激的感官體驗(yàn)才是該類(lèi)型游戲所追求的。游戲的關(guān)卡難度一定要循序漸進(jìn),讓新手可以多練習(xí)低難度的關(guān)卡提高自身水平,然后再去挑戰(zhàn)更高難度的關(guān)卡。玩家也可以依據(jù)自身水平選擇合適的難度進(jìn)行游戲。每局游戲游戲時(shí)間不能太長(zhǎng),手游不同于端游,過(guò)長(zhǎng)的游戲時(shí)間會(huì)讓玩家產(chǎn)生厭倦情緒。必要時(shí),還可以設(shè)計(jì)保存當(dāng)局游戲的功能。為了保持耐玩性,可以設(shè)計(jì)多輛賽車(chē)和多條跑道。玩家可以自由選擇使用的賽車(chē)和進(jìn)行比賽的賽道以及游戲人數(shù)。
2.2手機(jī)賽車(chē)游戲需要解決的問(wèn)題如何設(shè)計(jì)一輛逼真的賽車(chē)是首當(dāng)其沖的問(wèn)題,越是真實(shí)的賽車(chē)越能吸引玩家的視線。逼真的賽車(chē)能讓玩家有身臨其境的感覺(jué),同時(shí)玩家也能在虛擬游戲中體驗(yàn)駕駛高級(jí)賽車(chē)的感覺(jué)。因此,這是本課題設(shè)計(jì)方面的重點(diǎn)。賽車(chē)跑道的設(shè)計(jì)也是不可忽視的問(wèn)題。設(shè)計(jì)良好、逼真的跑道能滿足玩家的游戲體驗(yàn)。設(shè)計(jì)完賽車(chē)后便要對(duì)賽車(chē)設(shè)計(jì)按鍵控制,如何實(shí)現(xiàn)用按鍵控制賽車(chē),達(dá)到轉(zhuǎn)向、漂移(減速)、加速的目的是需要解決的,同時(shí)還要判斷賽車(chē)碰撞。此外,賽車(chē)運(yùn)動(dòng)時(shí)的尾氣以及漂移車(chē)痕能增加玩家的游戲體驗(yàn)。為了達(dá)到比賽的目的,需要設(shè)計(jì)一些電腦賽車(chē)和玩家賽車(chē)進(jìn)行競(jìng)速,如何設(shè)計(jì)不需玩家控制可自動(dòng)跑完賽道的賽車(chē)也是需要解決的問(wèn)題。為了判定游戲的勝負(fù),需要設(shè)計(jì)計(jì)時(shí)系統(tǒng),用來(lái)正確計(jì)算賽車(chē)從起點(diǎn)開(kāi)始到通過(guò)終點(diǎn)的時(shí)間,以此為基準(zhǔn)來(lái)判斷各輛賽車(chē)的名次。游戲系統(tǒng)的設(shè)計(jì)也有不小難度,具體需要解決一下幾個(gè)主要問(wèn)題:賽車(chē)之間以及賽車(chē)和障礙物之間的碰撞判定、賽車(chē)移動(dòng)的正反向判定、最終的勝負(fù)判定等。最后是游戲界面的設(shè)計(jì),需要設(shè)計(jì)合理美觀的游戲界面,指引玩家進(jìn)行操作2.3手機(jī)賽車(chē)游戲可實(shí)現(xiàn)的功能根據(jù)上一節(jié)提出的問(wèn)題,該手機(jī)賽車(chē)游戲可實(shí)現(xiàn)以下這些功能:輸入用戶名功能:用戶輸入用戶名,系統(tǒng)自動(dòng)記錄,當(dāng)用戶再次打開(kāi)游戲是會(huì)顯示上次輸入的用戶名,節(jié)省用戶時(shí)間。賽車(chē)運(yùn)動(dòng)功能:為了完成賽道,設(shè)計(jì)的賽車(chē)必須能進(jìn)行前進(jìn)、后退、左右轉(zhuǎn)向等基本操作。相機(jī)跟隨功能:設(shè)計(jì)相機(jī)能平滑跟隨在賽車(chē)后移動(dòng),保證玩家視角能正常完成比賽。選擇功能:玩家能根據(jù)自身水平選擇使用的賽車(chē)和比賽的跑道,以及進(jìn)行比賽的賽車(chē)數(shù)量。碰撞功能:系統(tǒng)能判斷賽車(chē)之間以及賽車(chē)與障礙物、賽道邊緣之間的碰撞以此來(lái)模擬真實(shí)賽車(chē)運(yùn)動(dòng)。特效功能:給賽車(chē)添加運(yùn)動(dòng)尾氣特效和漂移痕跡特效,是游戲更加真實(shí),增加玩家的游戲體驗(yàn)。電腦賽車(chē)自動(dòng)運(yùn)行功能:給電腦賽車(chē)添加腳本使其能根據(jù)賽道環(huán)境自動(dòng)完成賽道,從而達(dá)到和玩家比賽的目的。計(jì)時(shí)功能:為了能區(qū)分名次需要系統(tǒng)能計(jì)算賽車(chē)從開(kāi)始到結(jié)束用時(shí),根據(jù)用時(shí)來(lái)區(qū)分名次。幫助功能:玩家如對(duì)游戲有疑問(wèn)可以去“幫助”選項(xiàng)中查找相關(guān)內(nèi)容。以上功能可表示為圖2-1所示。游戲游戲幫助功能計(jì)時(shí)功能電腦賽車(chē)功能特效功能用戶名功能賽車(chē)運(yùn)動(dòng)功能相機(jī)跟隨功能選擇功能碰撞功能幫助功能計(jì)時(shí)功能電腦賽車(chē)功能特效功能用戶名功能賽車(chē)運(yùn)動(dòng)功能相機(jī)跟隨功能選擇功能碰撞功能圖2-1游戲系統(tǒng)功能在該賽車(chē)游戲中玩家可以使用的功能有:輸入用戶名功能、開(kāi)始游戲功能、退出游戲功能、選擇賽車(chē)賽道功能、對(duì)賽車(chē)進(jìn)行前后左右控制功能、賽車(chē)漂移功能、返回功能、幫助功能。這些功能可表示為圖2-2所示。玩家玩家?guī)椭δ芊祷毓δ芷乒δ苜愜?chē)控制功能選擇功能退出游戲功能開(kāi)始游戲功能用戶名功能幫助功能返回功能漂移功能賽車(chē)控制功能選擇功能退出游戲功能開(kāi)始游戲功能用戶名功能圖2-2玩家可使用功能2.4本章小結(jié)本章主要介紹了有關(guān)手機(jī)賽車(chē)游戲的描述,其次給出了本課題需要解決的具體設(shè)計(jì)問(wèn)題以及游戲中系統(tǒng)帶有的功能和玩家可以使用的功能,為以后開(kāi)發(fā)游戲打下了堅(jiān)實(shí)的基礎(chǔ)。
第3章系統(tǒng)設(shè)計(jì)3.1開(kāi)發(fā)平臺(tái)基于安卓系統(tǒng)的自選數(shù)量的手機(jī)賽車(chē)游戲開(kāi)發(fā)平臺(tái)是Unity3D4.6,模擬運(yùn)行測(cè)試平臺(tái)是AndroidSDK。3.1.1Unity3DUnity3D是由UnityTechnologies公司開(kāi)發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫(huà)等類(lèi)型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)工具,是一個(gè)全面整合的專(zhuān)業(yè)游戲引擎。Unity允許用戶開(kāi)發(fā)2D、3D的游戲。Unity類(lèi)似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化開(kāi)發(fā)環(huán)境為首要方式的軟件,其編輯器運(yùn)行在Windows或MacOSX下,可發(fā)布游戲至Windows、Mac、Wii、iPhone和Android平臺(tái)。也可以利用Unitywebplayer插件發(fā)布網(wǎng)頁(yè)游戲,支持Mac和Windows系統(tǒng)的網(wǎng)頁(yè)瀏覽。Unity3D是目前使用最廣泛的游戲開(kāi)發(fā)引擎,據(jù)統(tǒng)計(jì),大部分的游戲開(kāi)發(fā)者都是用Unity3D引擎開(kāi)發(fā)制作。使用Unity3D進(jìn)行游戲開(kāi)發(fā)的優(yōu)勢(shì)是開(kāi)發(fā)周期短,因?yàn)閁nity3D簡(jiǎn)單容易上手、功能強(qiáng)大,有編程基礎(chǔ)的只需要一兩個(gè)月就能入門(mén)。Unity3D另一大優(yōu)勢(shì)是跨平臺(tái)性,用Unity3D開(kāi)發(fā)的游戲可以發(fā)布至Window、Mac、Android等平臺(tái)上并且能完美運(yùn)行,這也是眾多游戲開(kāi)發(fā)商選擇Unity3D作為游戲開(kāi)發(fā)引擎的原因。Unity3D主要支持C#、JavaScript、Boo等語(yǔ)言。本課題選擇C#語(yǔ)言進(jìn)行游戲開(kāi)發(fā)。C#特點(diǎn)是嚴(yán)謹(jǐn)、安全、容易調(diào)試、容易讀、原生面向?qū)ο笠埠軓?qiáng)大,而且非常容易學(xué)。編寫(xiě)的代碼越多,C#的優(yōu)勢(shì)就越明顯。
3.1.2AndroidAndroid是Google公司開(kāi)發(fā)的基于Linux平臺(tái)的、開(kāi)源的、主要支持手機(jī)的操作系統(tǒng)。2008年9月Google公司發(fā)布了第一款安卓系統(tǒng)Android1.1,由于當(dāng)時(shí)技術(shù)不成熟,發(fā)布的系統(tǒng)只能支持基本操作,目前最先進(jìn)的版本是Android5.1,新系統(tǒng)更加穩(wěn)定,同時(shí)支持多張SIM卡,也加強(qiáng)了設(shè)備保護(hù)。相比于其他手機(jī)系統(tǒng),Android有其獨(dú)到的優(yōu)勢(shì):開(kāi)放性——Android平臺(tái)允許任何移動(dòng)產(chǎn)商加入到安卓聯(lián)盟中,強(qiáng)大的開(kāi)放性有利于前期增加人氣吸引優(yōu)秀開(kāi)發(fā)商的加入,這也是為什么Android平臺(tái)能在短幾年中成為手機(jī)平臺(tái)巨頭,此外,顯著的開(kāi)發(fā)性增加了開(kāi)發(fā)商之間的競(jìng)爭(zhēng),手機(jī)用戶能體驗(yàn)到豐富的軟件資源。不受運(yùn)營(yíng)商的限制——過(guò)去,手機(jī)的使用往往受到運(yùn)營(yíng)商的限制,如加入網(wǎng)絡(luò)、使用某些功能等都很大程度上受到運(yùn)營(yíng)商的限制,自從iPhone、Android這些手機(jī)平臺(tái)出現(xiàn),用戶使用手機(jī)已擺脫了運(yùn)營(yíng)商的限制,連接網(wǎng)絡(luò)使用功能早已不是運(yùn)營(yíng)商能限制的。開(kāi)發(fā)商不受限制——Android平臺(tái)對(duì)開(kāi)發(fā)商沒(méi)用限制,它提供了一個(gè)開(kāi)放、自由、靈活的環(huán)境,沒(méi)有了條條框框的限制各種奇思妙想都在應(yīng)用中出現(xiàn),豐富的軟件可供手機(jī)用戶體驗(yàn),然而這同時(shí)也讓暴力、色情、血腥等不良因素涌入到應(yīng)用軟件中。開(kāi)源性——Android平臺(tái)許多系統(tǒng)的源代碼都是對(duì)外開(kāi)放的,用戶可以自由查看使用這些代碼,新手可以查閱代碼學(xué)習(xí),專(zhuān)業(yè)人士可在源代碼的基礎(chǔ)上進(jìn)行二次開(kāi)發(fā)。硬件選擇豐富——由于Android的開(kāi)放性,開(kāi)發(fā)商會(huì)推出各種各樣、功能獨(dú)特的軟件,但這卻完全不會(huì)影響數(shù)據(jù)同步甚至軟件的兼容性,軟件的轉(zhuǎn)移是很方便沒(méi)多大風(fēng)險(xiǎn)的。AndroidSDK即AndroidSoftwareDevelopmentKit,安卓軟件開(kāi)發(fā)工具,它是被開(kāi)發(fā)商用來(lái)在Windows、Linux、Mac平臺(tái)上開(kāi)發(fā)特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)的安卓軟件開(kāi)發(fā)工具。該工具集不僅包括了Android模擬器和用于Eclipse的Android開(kāi)發(fā)工具插件(ADT),而且包括了各種用于測(cè)試、打包和在模擬器上安裝應(yīng)用的工具。AndroidSDK是以Java語(yǔ)言為主,因此在安裝AndroidSDK之前需要安裝JDK。安裝完成AndroidSDK之后有SDKManager和AVDManager2個(gè)應(yīng)用程序可使用。SDKManager主要是用來(lái)下載用戶需要的Android版本,AVDManager則是用來(lái)創(chuàng)建Android模擬器,讓用戶在電腦上模擬軟件在安卓手機(jī)上的使用和運(yùn)行效果。3.2關(guān)鍵技術(shù)3.2.1WheelColliderWheelollider(車(chē)輪碰撞器)是Unity3D自帶的功能強(qiáng)大的組件。它是一個(gè)特殊的地面車(chē)輪碰撞器。它是一個(gè)具有自動(dòng)進(jìn)行碰撞檢測(cè)功能、車(chē)輪物理引擎和輪胎摩擦模型。在設(shè)計(jì)賽車(chē)運(yùn)動(dòng)時(shí),可以給WheelCollider一個(gè)力就能實(shí)現(xiàn)它進(jìn)行物理滾動(dòng)的效果,同時(shí),可以用代碼得到WheelCollider的轉(zhuǎn)動(dòng)速度,這為計(jì)算顯示賽車(chē)速度打下了基礎(chǔ)。通過(guò)給賽車(chē)模型的四個(gè)車(chē)輪添加WheelCollider組件可以驅(qū)動(dòng)賽車(chē)的運(yùn)動(dòng)。圖3-1是WheelCollider插件的屬性圖。圖3-1WheelCollider屬性設(shè)計(jì)游戲時(shí)主要用到的是前三個(gè)屬性:Mass、Radius、SuspensionDistance。Mass屬性是車(chē)輪質(zhì)量選項(xiàng),這里采用默認(rèn)選項(xiàng)1kg。Radius屬性是指WheelCollider的半徑,這里必須修改參數(shù)使得WheelCollider的半徑和賽車(chē)模型的半徑一致,這樣才能根據(jù)WheelCollider的速度得到賽車(chē)的真實(shí)速度。SuspensionDistance是懸掛距離指的是車(chē)輪懸掛伸縮的最大距離,通過(guò)調(diào)試參數(shù),使賽車(chē)運(yùn)行通過(guò)凹凸路面時(shí)車(chē)輛有上下調(diào)整的緩沖效果,否則車(chē)輛會(huì)顯得僵硬不真實(shí)。通過(guò)修改以上三個(gè)屬性就能實(shí)現(xiàn)賽車(chē)的運(yùn)動(dòng)、懸掛功能,這是本課題設(shè)計(jì)中最重要的技術(shù)。3.2.2CarWayPoint顧名思義,CarWayPoint插件是專(zhuān)門(mén)用來(lái)做賽車(chē)游戲的插件。這款插件功能強(qiáng)大,可以實(shí)現(xiàn)如圈數(shù)判斷、復(fù)位操作、反向判斷、計(jì)算賽道長(zhǎng)度等功能。本課題使用該款插件主要是用來(lái)解決電腦賽車(chē)的自動(dòng)運(yùn)行問(wèn)題。CarWayPoint插件優(yōu)勢(shì)明顯:設(shè)置路標(biāo)點(diǎn)、可擴(kuò)展性強(qiáng)、Xml儲(chǔ)存路標(biāo)點(diǎn)數(shù)據(jù)、可視化編輯、多平臺(tái)支持、自動(dòng)對(duì)齊路面、支持單圈和多圈編輯、支持路徑讀取和數(shù)據(jù)讀取兩種方式等。使用該款插件可以節(jié)省開(kāi)發(fā)時(shí)間減少開(kāi)發(fā)工作量,同時(shí)也為實(shí)現(xiàn)電腦賽車(chē)自動(dòng)運(yùn)行打下基礎(chǔ)。電腦不是玩家不能根據(jù)賽道情況臨時(shí)決定如何控制賽車(chē)的運(yùn)動(dòng),必須給電腦提供路標(biāo)來(lái)指引賽車(chē)的運(yùn)動(dòng)。通過(guò)在賽道上設(shè)置相互連接的路標(biāo),賽車(chē)運(yùn)動(dòng)到一個(gè)路標(biāo)用函數(shù)計(jì)算出下一個(gè)應(yīng)該到達(dá)的路標(biāo),如此賽車(chē)就能實(shí)現(xiàn)自動(dòng)運(yùn)行的功能。3.2.3NGUINGUI,即Next-GenUIkit,是用C#語(yǔ)言編寫(xiě)的Unity3D插件,它提供了強(qiáng)大的UI系統(tǒng),是游戲開(kāi)發(fā)過(guò)程中用來(lái)實(shí)現(xiàn)界面設(shè)計(jì)的重要工具。程序員可以很容易地?cái)U(kuò)充和調(diào)節(jié)現(xiàn)有功能,這為游戲開(kāi)發(fā)帶來(lái)了方便,意味著用戶可以用更少的時(shí)間更少的代碼來(lái)實(shí)現(xiàn)更多的功能。NGUI使用時(shí)不需要編輯復(fù)雜的代碼,它自帶的許多按鈕已經(jīng)能實(shí)現(xiàn)普通游戲開(kāi)發(fā)的所有要求,通過(guò)對(duì)按鈕設(shè)置事件就能控制界面操作。NGUI提供了許多輔助腳本如修改按鈕顏色、大小、拖拽物體、添加圖片和音樂(lè)等,這都為設(shè)計(jì)游戲界面節(jié)省了大量時(shí)間。為了游戲的穩(wěn)定,本課題采用之前的版本NGUI3.6.8。NGUI功能強(qiáng)大,開(kāi)發(fā)過(guò)程中,只使用了PrefabToolbar工具,如圖3-2所示。圖3-2PrefabToolbar設(shè)計(jì)過(guò)程中只需要選用Background和Button按鈕即可設(shè)計(jì)出美觀簡(jiǎn)潔的游戲界面。通過(guò)在Background屬性中添加text文本和texture紋理即可實(shí)現(xiàn)游戲界面上的文字和圖片。3.3設(shè)計(jì)方法和原則由于本課題是設(shè)計(jì)賽車(chē)游戲,因此游戲必須符合常識(shí),科幻的賽車(chē)操作如飛天、潛水等只會(huì)讓玩家感到空虛,無(wú)法真正體驗(yàn)到賽車(chē)漂移的快感。所以,本課題設(shè)計(jì)的首要原則就是符合現(xiàn)實(shí)。游戲里所有的賽車(chē)運(yùn)動(dòng)都必須在現(xiàn)實(shí)中有跡可循,只需給賽車(chē)添加前進(jìn)、后退、轉(zhuǎn)向、漂移、加速、減速等基本操作即可。為了設(shè)計(jì)可玩性高的賽車(chē)游戲,游戲畫(huà)面、賽車(chē)模型、賽道模型不能太過(guò)粗糙,賽車(chē)的模型必須美觀合理符合人們的現(xiàn)實(shí)認(rèn)知,不能是那種由方塊堆積出來(lái)的玩具車(chē)。此外,賽道可以增加不同的路況如急彎、懸崖、跳板、隧道等增加游戲的趣味。游戲畫(huà)面應(yīng)該做到盡量美觀簡(jiǎn)潔,太粗糙的畫(huà)面或者太凌亂的畫(huà)面都會(huì)影響玩家的游戲體驗(yàn)。適當(dāng)?shù)奶匦Э梢栽黾佑螒虻娜の?。《極品飛車(chē)》和《狂野飆車(chē)》都為賽車(chē)加速、漂移添加了酷炫的特效,這為它們的成功提供了不少幫助。本課題給賽車(chē)添加了漂移時(shí)的車(chē)痕特效以及賽車(chē)運(yùn)動(dòng)時(shí)的尾氣特效,以此來(lái)滿足玩家的游戲體驗(yàn)。每局游戲時(shí)間應(yīng)當(dāng)合理控制,一般在幾分鐘為最佳。游戲僅僅是供玩家消遣娛樂(lè)的手段,太長(zhǎng)的游戲時(shí)間只會(huì)適得其反,反而會(huì)讓玩家產(chǎn)生厭倦情緒。因此,在游戲設(shè)計(jì)階段必須充分考慮該因素,對(duì)賽車(chē)的速度,賽道的長(zhǎng)度進(jìn)行控制,從而控制游戲時(shí)間。電腦賽車(chē)以之前介紹的CarWayPoint插件來(lái)進(jìn)行控制,實(shí)現(xiàn)控制時(shí)必須參照玩家賽車(chē)的游戲參數(shù),必須能實(shí)現(xiàn)電腦賽車(chē)和玩家的對(duì)戰(zhàn),不能出現(xiàn)一邊倒的局面,玩家賽車(chē)的速度和電腦賽車(chē)的速度要保持同一數(shù)量級(jí)的水平,必要時(shí)電腦賽車(chē)性能可以比玩家賽車(chē)優(yōu)越,這可以激發(fā)玩家通過(guò)操作技巧來(lái)?yè)魯‰娔X賽車(chē)。如之前所述,《極品飛車(chē)》和《狂野飆車(chē)》在追求極致畫(huà)面和酷炫特效的同時(shí),不可避免的帶來(lái)了游戲安裝包過(guò)大和手機(jī)系統(tǒng)配置要求過(guò)高的缺點(diǎn)。本課題在開(kāi)發(fā)時(shí)受電腦配置限制以及為了確保游戲包容量不大,犧牲了部分畫(huà)質(zhì)以及特效,以此保證游戲的流暢運(yùn)行。以上這些原則在游戲設(shè)計(jì)過(guò)程中都必須充分考慮,只有符合這些設(shè)計(jì)原則的設(shè)計(jì)出來(lái)的游戲才是用戶友好、游戲體驗(yàn)良好的游戲。3.4游戲概念模型游戲的概念模型如圖3-3所示圖3-3游戲概念模型上面的是該款手機(jī)賽車(chē)游戲的概念模型圖。首先,當(dāng)玩家打開(kāi)游戲時(shí)系統(tǒng)會(huì)加載游戲資源,隨后出現(xiàn)主菜單界面。主菜單界面對(duì)面有3個(gè)選項(xiàng):用戶名輸入按鈕、游戲簡(jiǎn)介按鈕以及退出游戲按鈕。點(diǎn)擊游戲簡(jiǎn)介按鈕進(jìn)入游戲簡(jiǎn)介界面,這里主要簡(jiǎn)單介紹游戲的內(nèi)容、操作以及問(wèn)題反饋的聯(lián)系方式等。點(diǎn)擊退出游戲按鈕會(huì)退出游戲。點(diǎn)擊用戶名輸入按鈕會(huì)進(jìn)行用戶名輸入界面,該界面有一個(gè)文本框用于讓玩家輸入用戶名,系統(tǒng)會(huì)自動(dòng)記錄上一次輸入的用戶名,輸入完成點(diǎn)擊確定按鈕會(huì)進(jìn)入選擇界面。選擇界面有多個(gè)選項(xiàng),其中之一是用來(lái)進(jìn)行游戲設(shè)置,該設(shè)置可以修改游戲過(guò)程中的音量。選擇界面其余按鈕是用來(lái)區(qū)分不同賽車(chē)以及不同賽道的,選擇其中一個(gè)按鈕就會(huì)進(jìn)入對(duì)應(yīng)的賽車(chē)和賽道進(jìn)行游戲。當(dāng)游戲完成后會(huì)進(jìn)入一個(gè)完成界面,可以顯示玩家的名次、時(shí)間等內(nèi)容。完成界面有一個(gè)返回按鈕,點(diǎn)擊可以返回到選擇界面重新選擇繼續(xù)游戲。3.5游戲總體結(jié)構(gòu)游戲的總體結(jié)構(gòu)如圖3-4所示。數(shù)據(jù)模塊特效模塊聲音模塊畫(huà)面模塊系統(tǒng)數(shù)據(jù)模塊特效模塊聲音模塊畫(huà)面模塊系統(tǒng)控制調(diào)度模塊邏輯運(yùn)算模塊控制調(diào)度模塊邏輯運(yùn)算模塊圖3-4游戲總體結(jié)構(gòu)各部分功能模塊介紹如下:(1)畫(huà)面模塊該模塊主要負(fù)責(zé)繪制游戲的可視化界面,包括:菜單界面、簡(jiǎn)介界面、用戶名界面、選擇界面、設(shè)置界面、游戲界面、完成界面等。這些界面都是用Unity3D的NGUI插件繪制完成,通過(guò)搜集合適圖片和添加button按鈕即可實(shí)現(xiàn)游戲可視化界面的繪制。(2)聲音模塊該模塊主要負(fù)責(zé)游戲進(jìn)行過(guò)程中的聲音播放功能,包括:游戲背景音樂(lè)、賽車(chē)加速引擎聲音、賽車(chē)漂移聲音等。通過(guò)給賽車(chē)添加AudioSource插件即可給賽車(chē)添加以上音樂(lè)。(3)特效模塊該模塊主要負(fù)責(zé)賽車(chē)加速的尾氣煙霧特效和賽車(chē)漂移的輪印特效。在設(shè)計(jì)賽車(chē)時(shí)給賽車(chē)添加尾氣煙霧效果以及輪印效果并通過(guò)代碼控制這些效果的開(kāi)啟和關(guān)閉即可實(shí)現(xiàn)賽車(chē)運(yùn)動(dòng)產(chǎn)生尾氣、賽車(chē)漂移出現(xiàn)輪印等效果。(4)數(shù)據(jù)模塊該模塊主要負(fù)責(zé)記錄游戲過(guò)程中產(chǎn)生的數(shù)據(jù),包括:用戶名、游戲完成時(shí)間、游戲最佳時(shí)間。當(dāng)玩家輸入一個(gè)用戶名時(shí),系統(tǒng)會(huì)自動(dòng)記錄該數(shù)據(jù),玩家下次進(jìn)入游戲時(shí)系統(tǒng)會(huì)自動(dòng)顯示該用戶名節(jié)省玩家輸入用戶名的時(shí)間。當(dāng)玩家完成賽道時(shí),系統(tǒng)會(huì)記錄玩家完成賽道的時(shí)間并和最佳時(shí)間進(jìn)行比較,較小者會(huì)被重新記錄為游戲最佳時(shí)間,而另一個(gè)數(shù)據(jù)會(huì)被刪除。(5)邏輯運(yùn)算模塊該模塊主要負(fù)責(zé)控制游戲的進(jìn)行,具體功能:利用手機(jī)的重力感應(yīng)正確的對(duì)賽車(chē)進(jìn)行轉(zhuǎn)向操作、根據(jù)玩家對(duì)屏幕的觸碰決定游戲界面的跳轉(zhuǎn)、保證電腦賽車(chē)能根據(jù)賽道情況正確的完成賽道等。(6)控制調(diào)度模塊該模塊是游戲的核心模塊,它將其他幾個(gè)模塊連接起來(lái)成為一個(gè)整體,起到控制調(diào)度的作用。該模塊主要負(fù)責(zé)協(xié)調(diào)各模塊的正確運(yùn)行,為游戲正確運(yùn)行提供了保障。3.6本章小結(jié)本章主要介紹了有關(guān)游戲的開(kāi)發(fā)平臺(tái)Unity3D和AndroidSDK的描述,其次介紹了游戲設(shè)計(jì)過(guò)程中使用的關(guān)鍵技術(shù)、設(shè)計(jì)方法和手機(jī)原則,然后描述了游戲的概念模型以及游戲總體結(jié)構(gòu),為實(shí)際設(shè)計(jì)游戲提供了理論基礎(chǔ)。
第4章系統(tǒng)實(shí)現(xiàn)4.1賽車(chē)屬性實(shí)現(xiàn)本課題使用的賽車(chē)都是從網(wǎng)上找到的賽車(chē)模型,通過(guò)對(duì)模型的修改和優(yōu)化來(lái)滿足游戲的需求。圖4-1是修改使用的賽車(chē)模型。圖4-1賽車(chē)模型4.1.1賽車(chē)碰撞優(yōu)化該賽車(chē)模型過(guò)于精細(xì),直接使用該模型進(jìn)行碰撞檢測(cè),會(huì)太過(guò)復(fù)雜。因此,使用Collider-Bottom和Collider—Top2個(gè)模型來(lái)近似代表賽車(chē)模型,用這個(gè)簡(jiǎn)化模型來(lái)代替賽車(chē)模型進(jìn)行碰撞檢測(cè)會(huì)實(shí)現(xiàn)系統(tǒng)的優(yōu)化。圖4-2是Collider-Bottom和Collider—Top模型。圖4-2簡(jiǎn)化賽車(chē)模型為了實(shí)現(xiàn)碰撞檢測(cè)需要給Collider-Bottom和Collider-Top兩個(gè)個(gè)部分添加MeshCollider組件并勾選Convex以及SmoothSphereCollider選項(xiàng),這樣,用于碰撞檢測(cè)的賽車(chē)模型得到了簡(jiǎn)化,系統(tǒng)判定更加簡(jiǎn)單。4.1.2賽車(chē)渲染優(yōu)化陰影是影響渲染效果以及渲染時(shí)間的一個(gè)重要因素,把細(xì)節(jié)部分的陰影渲染關(guān)閉能優(yōu)化系統(tǒng)。賽車(chē)的內(nèi)部、賽車(chē)的玻璃以及車(chē)輪內(nèi)部的剎車(chē)板不需要產(chǎn)生陰影,所以把這些賽車(chē)部件的MeshRender組件中的CastShadows(導(dǎo)致陰影)選項(xiàng)關(guān)閉。同時(shí),賽車(chē)的內(nèi)部、賽車(chē)的玻璃不需要接受陰影,甚至車(chē)輪這種細(xì)節(jié)部分的陰影也可以選擇不接收,因此把這些部件的MeshRender組件中的ReceiveShadows(接收陰影)選項(xiàng)關(guān)閉。圖4-3是MeshRender組件。圖4-3MeshRender4.1.3車(chē)底陰影實(shí)現(xiàn)車(chē)底部由于車(chē)的原因會(huì)顯得比較暗,所以需要給它添加陰影。在Car物體下創(chuàng)建一個(gè)名為shadow的子物體。給shadow添加一個(gè)Projector組件,在Material屬性中選擇已經(jīng)制作好的車(chē)底部陰影貼圖,并且設(shè)置IgnoreLayers是除了路面的所有層,這樣就能保證陰影只會(huì)投影在路面上。圖4-4是Projector組件。圖4-4Projector為了控制shadow的位置和旋轉(zhuǎn),創(chuàng)建一個(gè)CarShadow腳本,具體實(shí)現(xiàn)代碼如下:usingUnityEngine;usingSystem.Collections;publicclassCarShadow:MonoBehaviour{ voidStart(){ } voidUpdate(){ this.transform.position=transform.parent.position+Vector3.up*5; this.transform.localEulerAngles=newVector3(90,0,0); }}該代碼設(shè)置了陰影的位置始終與車(chē)的位置保持一致,只是在Y軸上相差5個(gè)單位,無(wú)論車(chē)如何旋轉(zhuǎn),投影器始終在X軸上旋轉(zhuǎn)90度,即始終保證向地面投影。通過(guò)這段代碼就實(shí)現(xiàn)了車(chē)陰影的實(shí)現(xiàn)。4.1.4車(chē)輪懸掛效果車(chē)輪和車(chē)體之間的位置不是固定不變的,它們之間有彈簧連接,隨著路況的起伏,彈簧會(huì)壓縮,車(chē)輪和車(chē)體之間的距離也在不斷改變。因此,需要保證車(chē)輪和WheelCollider的伸縮情況保持一致,具體代碼如下: RaycastHithit; if(Physics.Raycast(collider.transform.position,Vector3.down,outhit,collider.radius+collider.suspensionDistance)){ transform.position=hit.point+Vector3.up*collider.radius; }else{ transform.position=collider.transform.position-collider.transform.up*collider.suspensionDistance; }同時(shí)修改WheelCollider組件中的SuspensionSpring中的Spring參數(shù)暫時(shí)為5000,后期調(diào)試運(yùn)行時(shí)在進(jìn)行修改。4.2賽車(chē)運(yùn)動(dòng)實(shí)現(xiàn)賽車(chē)的運(yùn)動(dòng)必須由WheelCollider來(lái)控制實(shí)現(xiàn),創(chuàng)建四個(gè)和四個(gè)車(chē)輪位置匹配的WheelCollider來(lái)代替車(chē)輪進(jìn)行賽車(chē)的控制,并且WheelCollider的Radius半徑必須和車(chē)輪半徑一致,這樣才能根據(jù)WheelCollider轉(zhuǎn)速計(jì)算得到賽車(chē)的速度。由于賽車(chē)是個(gè)真實(shí)物體,因此需要給它賦予一個(gè)重量,在Car下添加一個(gè)RigidBody組件,設(shè)置Mass(質(zhì)量)為1500kg,圖4-5是RigidBody組件。圖4-5RigidBody這里先采用在電腦端按鍵控制,最后再修改為手機(jī)端的重力感應(yīng)控制,在Car物體下添加一個(gè)Driving腳本,用來(lái)控制賽車(chē)的運(yùn)動(dòng),具體包括了賽車(chē)的前后運(yùn)動(dòng)、轉(zhuǎn)向、漂移、漂移時(shí)的煙霧特效、車(chē)運(yùn)動(dòng)的尾氣、音樂(lè)的播放等,這是賽車(chē)運(yùn)動(dòng)的核心代碼。voidSkid(){//漂移 if(currentSpeed>40&&Mathf.Abs(flWheelCollider.steerAngle)>5){ boolisGround=false; WheelHithit; if(flWheelCollider.GetGroundHit(outhit)){ isGround=true; leftEmitter.emit=true; if(lastFLSkidPos.x!=0&&lastFLSkidPos.y!=0&&lastFLSkidPos.z!=0){ Vector3pos=hit.point; pos.y+=0.05f; Quaternionrotation=Quaternion.LookRotation(hit.point-lastFLSkidPos); GameObject.Instantiate(skidMark,pos,rotation); } lastFLSkidPos=hit.point; }else{ lastFLSkidPos=Vector3.zero; leftEmitter.emit=false; } if(frWheelCollider.GetGroundHit(outhit)){ isGround=true; rightEmitter.emit=true; if(lastFRSkidPos.x!=0&&lastFRSkidPos.y!=0&&lastFRSkidPos.z!=0){ Vector3pos=hit.point; pos.y+=0.05f; Quaternionrotation=Quaternion.LookRotation(hit.point-lastFRSkidPos); GameObject.Instantiate(skidMark,pos,rotation); } lastFRSkidPos=hit.point; }else{ lastFRSkidPos=Vector3.zero; rightEmitter.emit=false; } if(skidAudio.isPlaying==false&&isGround==true){ skidAudio.Play(); } elseif(skidAudio.isPlaying&&isGround==false){ skidAudio.Stop(); } }else{ if(skidAudio.isPlaying){ skidAudio.Stop(); } leftEmitter.emit=false; rightEmitter.emit=false; } }}4.2.1得到賽車(chē)速度Update函數(shù)定義了賽車(chē)的運(yùn)動(dòng),currentSpeed用來(lái)表示賽車(chē)的當(dāng)前速度,它通過(guò)下面公式得出:currentSpeed=flWheelCollider.rpm*(flWheelCollider.radius*2*Mathf.PI)*60/1000;flWheelCollider.rpm指WheelCollider每分鐘的轉(zhuǎn)速用它乘其周長(zhǎng)得到每分鐘轉(zhuǎn)動(dòng)的長(zhǎng)度,再講該數(shù)值換算為千米每小時(shí)就得到賽車(chē)的速度。4.2.2剎車(chē)定義剎車(chē)的定義是當(dāng)currentSpeed為正即賽車(chē)正在向前運(yùn)動(dòng)而此時(shí)給賽車(chē)一個(gè)向后運(yùn)動(dòng)的力或者當(dāng)currentSpeed為負(fù)即賽車(chē)正在向后運(yùn)動(dòng)而此時(shí)給賽車(chē)一個(gè)向前運(yùn)動(dòng)的力,當(dāng)這兩種情況發(fā)生時(shí)就判斷賽車(chē)進(jìn)行剎車(chē)操作。brakeTorque參數(shù)是WheelCollider中用來(lái)表示剎車(chē)的參數(shù),當(dāng)剎車(chē)判斷成立后,把預(yù)先定義好的剎車(chē)數(shù)值賦值給賽車(chē)。這里預(yù)先定義了剎車(chē)數(shù)值為100,后期測(cè)試時(shí)會(huì)對(duì)該數(shù)值進(jìn)行測(cè)試修改。4.2.3運(yùn)動(dòng)定義motorTorque是用來(lái)表示賽車(chē)運(yùn)動(dòng)的數(shù)值,這里預(yù)先定義了運(yùn)動(dòng)數(shù)值為40,賽車(chē)運(yùn)動(dòng)時(shí)規(guī)定了賽車(chē)最大速度為140,最小速度為-30即倒車(chē)速度,當(dāng)currentSpeed介于這兩個(gè)數(shù)值時(shí),能把該數(shù)值賦值給賽車(chē)進(jìn)行運(yùn)動(dòng),否則規(guī)定賽車(chē)自身的motorTorque參數(shù)為0,這樣就限制了賽車(chē)速度的范圍,當(dāng)然后期測(cè)試時(shí)可以對(duì)速度修改。4.2.4旋轉(zhuǎn)定義steerAngel用來(lái)表示賽車(chē)的轉(zhuǎn)向,預(yù)先定義了數(shù)值為10,數(shù)值越大賽車(chē)的轉(zhuǎn)動(dòng)幅度就越大,當(dāng)按鍵輸入左右時(shí),賽車(chē)就是根據(jù)輸入的長(zhǎng)短來(lái)對(duì)賽車(chē)轉(zhuǎn)向幅度進(jìn)行控制。4.2.5重心設(shè)置賽車(chē)的重心需要設(shè)置在賽車(chē)底部,如果不設(shè)置重心,賽車(chē)旋轉(zhuǎn)時(shí)很容易造成側(cè)翻,通過(guò)創(chuàng)建一個(gè)centerOfMass的對(duì)象,并把它的位置信息賦值給賽車(chē)重心即可。
4.2.6車(chē)輪模型轉(zhuǎn)動(dòng)的實(shí)現(xiàn)實(shí)現(xiàn)該方法需要使用兩個(gè)函數(shù)RotateWheel和SteerWheel,其中RotateWheel實(shí)現(xiàn)四個(gè)車(chē)輪的前后轉(zhuǎn)動(dòng),SteerWheel實(shí)現(xiàn)前面兩個(gè)車(chē)輪轉(zhuǎn)向時(shí)的左右轉(zhuǎn)動(dòng)。RotateWheel函數(shù)根據(jù)WheelCollider每分鐘的轉(zhuǎn)速rpm計(jì)算出模型每秒鐘應(yīng)該轉(zhuǎn)動(dòng)的角度,然后對(duì)四個(gè)模型進(jìn)行Rotate操作就能實(shí)現(xiàn)車(chē)輪轉(zhuǎn)動(dòng)。SteerWheel函數(shù)首先得到當(dāng)前WheelCollider的轉(zhuǎn)向,然后將該轉(zhuǎn)向賦值給WheelModel進(jìn)行Y軸方向上的轉(zhuǎn)動(dòng)就能實(shí)現(xiàn)趁亂轉(zhuǎn)向。由于同時(shí)對(duì)WheelModel進(jìn)行RotateWheel和SteerWheel操作,渲染時(shí)車(chē)輪會(huì)出現(xiàn)模糊顯示不完全,因此,RotateWheel的轉(zhuǎn)動(dòng)對(duì)向修改為剎車(chē)板DiscBrake,這樣游戲運(yùn)行時(shí)車(chē)輪顯示就不會(huì)出現(xiàn)問(wèn)題。具體實(shí)現(xiàn)代碼如下: voidRotateWheel(){//控制車(chē)輪前后轉(zhuǎn)動(dòng) flDiscBrake.Rotate(flWheelCollider.rpm*6*Time.deltaTime*Vector3.right);frDiscBrake.Rotate(frWheelCollider.rpm*6*Time.deltaTime*Vector3.right);rlWheelModel.Rotate(rlWheelCollider.rpm*6*Time.deltaTime*Vector3.right);rrWheelModel.Rotate(rrWheelCollider.rpm*6*Time.deltaTime*Vector3.right); } voidSteerWheel(){//控制車(chē)輪左右轉(zhuǎn)向 Vector3localEulerAngles=flWheelModel.localEulerAngles; localEulerAngles.y=flWheelCollider.steerAngle; flWheelModel.localEulerAngles=localEulerAngles; frWheelModel.localEulerAngles=localEulerAngles; }4.3攝像機(jī)實(shí)現(xiàn)4.3.1攝像機(jī)平滑設(shè)置賽車(chē)運(yùn)動(dòng)時(shí)需要有攝像機(jī)平滑地跟隨在賽車(chē)后面,確保玩家游戲時(shí)能得到足夠多的賽道情況,具體是代碼如下: Vector3targetForward=target.forward; targetForward.y=0; Vector3currentForward=transform.forward; currentForward.y=0; Vector3forward=Vector3.Lerp(currentForward.normalized,targetForward.normalized,smoothSpeed*Time.deltaTime); Vector3targetPos=target.position+Vector3.up*height-forward*distance; this.transform.position=targetPos; transform.LookAt(target);攝像機(jī)的位置是固定的,它在X軸方向上和賽車(chē)保持一致,Y軸方向上在賽車(chē)后面7個(gè)單位,Z軸方向上在賽車(chē)上面3.5個(gè)單位,唯一需要控制的就是攝像機(jī)的旋轉(zhuǎn)。該代碼首先得到賽車(chē)的位置信息然后將該信息Y軸上減少7個(gè)單位,Z軸上增加3.5個(gè)單位得到攝像機(jī)的位置,這就保證了攝像機(jī)始終和賽車(chē)保持相對(duì)的位置。但采用這種方式是不夠的,攝像機(jī)的運(yùn)動(dòng)會(huì)顯得僵硬,當(dāng)賽車(chē)轉(zhuǎn)向時(shí),攝像機(jī)應(yīng)該能看到賽車(chē)的側(cè)面,但目前只能看到賽車(chē)的尾部。所以,要對(duì)攝像機(jī)進(jìn)行平滑跟隨。smoothSpeed參數(shù)用來(lái)表示攝像機(jī)平滑跟隨的速度,這里設(shè)置為1,數(shù)值越大則攝像機(jī)跟隨越快,后期測(cè)試時(shí)可以進(jìn)行調(diào)試。具體實(shí)現(xiàn)方法是使用差值運(yùn)算算法,它得到攝像機(jī)當(dāng)前的旋轉(zhuǎn)角度、賽車(chē)當(dāng)前的旋轉(zhuǎn)角度以及差值時(shí)間,規(guī)定在差值時(shí)間內(nèi)攝像機(jī)從當(dāng)前角度旋轉(zhuǎn)到賽車(chē)的角度,這樣就實(shí)現(xiàn)了攝像機(jī)的平滑跟隨。4.3.2攝像機(jī)切換玩家可以通過(guò)“V”鍵來(lái)選擇游戲視角,分別是第一人稱(chēng)視角和第三人稱(chēng)視角,第三人稱(chēng)視角是上面定義的攝像機(jī)視角,第一人稱(chēng)視角是玩家直接駕駛賽車(chē)的視角,切換代碼如下: if(Input.GetKeyDown(KeyCode.V)){ if(isFirstView){ mainCamera.SetActive(true); firstViewCamera.SetActive(false); isFirstView=false; }else{ mainCamera.SetActive(false); firstViewCamera.SetActive(true); isFirstView=true; } }
4.4游戲音效實(shí)現(xiàn)4.4.1賽車(chē)引擎聲音引擎聲音的控制在Driving代碼中的EngineSound函數(shù)中實(shí)現(xiàn)。引擎的聲音播放速度應(yīng)該隨著速度的增大而增大,并且由于換擋,引擎的速度應(yīng)該出現(xiàn)鋸齒狀上下波動(dòng)。EngineSound函數(shù)創(chuàng)建了一個(gè)6元素的int數(shù)組,元素分別為0,30,60,90,120,140,代表了賽車(chē)速度,在任意兩個(gè)相鄰元素之間賽車(chē)引擎聲音播放速度逐漸增大,在每個(gè)元素出引擎聲音播放速度變?yōu)樽钚?,這就實(shí)現(xiàn)了模擬賽車(chē)加速換擋時(shí)引擎聲音的效果。具體實(shí)現(xiàn)代碼如下:voidEngineSound(){ intindex=0; for(inti=0;i<speedArray.Length-2;i++){ if(currentSpeed>=speedArray[i]){ index=i; } } intminSpeed=speedArray[index]; intmaxSpeed=speedArray[index+1]; carEngineAudio.pitch=0.1f+(currentSpeed-minSpeed)/(maxSpeed-minSpeed)*0.8f; }
4.4.2賽車(chē)漂移聲音漂移聲音的控制在Driving代碼中的Skid函數(shù)中實(shí)現(xiàn)。當(dāng)賽車(chē)漂移判斷成立時(shí),如果漂移聲音沒(méi)有播放就把聲音播放,當(dāng)賽車(chē)漂移判斷不成立時(shí),如果漂移使用正在播放就把聲音關(guān)閉。4.4.3賽車(chē)碰撞聲音當(dāng)賽車(chē)碰撞到賽道邊緣時(shí),就會(huì)發(fā)出碰撞聲音,具體代碼如下: voidOnCollisionEnter(Collisioncollision){ if(collision.collider.tag=="Wall"){ crashSound.Play(); } }4.5UI界面實(shí)現(xiàn)本部分主要包括顯示賽車(chē)的速度、速度儀表盤(pán)、游戲開(kāi)始倒計(jì)時(shí)、游戲總計(jì)時(shí)。最終實(shí)現(xiàn)如圖4-6所示。左上角顯示賽車(chē)的速度、中間是游戲開(kāi)始時(shí)的倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束后隱藏,右上角用來(lái)記錄游戲總時(shí)間。圖4-6UI界面4.5.1賽車(chē)速度顯示和速度儀表盤(pán)顯示賽車(chē)速度顯示和速度儀表盤(pán)的具體實(shí)現(xiàn)代碼如下: currentSpeed=flWheelCollider.rpm*(flWheelCollider.radius*2*Mathf.PI)*60/1000; currentSpeed=Mathf.Round(currentSpeed); label.text=currentSpeed.ToString(); if(currentSpeed<=0){ currentSpeed=0; } floatnewZRotation=zRotation-currentSpeed*(270/140f); pointContainer.eulerAngles=newVector3(0,0,newZRotation); currentSpeed按照之前的方法得到,通過(guò)Mathf.Round方法四舍五入,再將數(shù)值轉(zhuǎn)化為字符串賦值給文本即可在UI界面顯示賽車(chē)的速度。當(dāng)速度小于0時(shí),顯示賽車(chē)的速度為0。開(kāi)始時(shí)把速度指針指向0,按照速度儀表盤(pán)上0-140之間的角度計(jì)算出對(duì)應(yīng)的速度應(yīng)該旋轉(zhuǎn)的角度,最后指針旋轉(zhuǎn)該角度就能實(shí)現(xiàn)速度儀表盤(pán)的顯示。4.5.2游戲倒計(jì)時(shí)顯示游戲倒計(jì)時(shí)是從5開(kāi)始倒數(shù),倒數(shù)過(guò)程中玩家無(wú)法控制賽車(chē)的運(yùn)動(dòng),當(dāng)?shù)褂?jì)時(shí)結(jié)束后玩家才能開(kāi)始游戲。首先設(shè)置數(shù)字5,每隔1s遞減1,每個(gè)數(shù)字存在1s,數(shù)字0存在0.1s,這些數(shù)字都被轉(zhuǎn)化為字符串類(lèi)型在UI界面上顯示,具體實(shí)現(xiàn)代碼如下: IEnumeratorCount(){ timeCount.text=startCount.ToString(); while(startCount>0){ yieldreturnnewWaitForSeconds(1f); startCount--; timeCount.text=startCount.ToString(); } yieldreturnnewWaitForSeconds(0.1f);4.5.3游戲總時(shí)間顯示游戲總時(shí)間顯示是用來(lái)記錄賽車(chē)從開(kāi)始到結(jié)束一共使用的時(shí)間,其中還會(huì)顯示歷史記錄,如果本次游戲時(shí)間比歷史記錄慢,那么上面顯示本次游戲時(shí)間,下面顯示歷史記錄,如果本次游戲時(shí)間比歷史紀(jì)錄快,那么歷史紀(jì)錄就會(huì)被更新為本次游戲時(shí)間。具體實(shí)現(xiàn)代碼如下:floatnowTotalTime=timeCount.totalTime; floatoldTotalTime=999; if(PlayerPrefs.HasKey("bestTime")){ oldTotalTime=PlayerPrefs.GetFloat("bestTime"); } timeCount.label.text="本次時(shí)間:"+nowTotalTime+"s\n"+"個(gè)人記錄:"+oldTotalTime+"s\n"; if(nowTotalTime<oldTotalTime){ oldTotalTime=nowTotalTime; } PlayerPrefs.SetFloat("bestTime",oldTotalTime);
4.5.4游戲界面設(shè)計(jì)實(shí)現(xiàn)制作游戲界面使用NGUI3.6.8插件,使用PrefabToolBar插件中的Background和Botton兩個(gè)選項(xiàng)即可實(shí)現(xiàn)簡(jiǎn)單的界面開(kāi)發(fā)。圖4-7是游戲開(kāi)始的界面。圖4-7游戲開(kāi)始界面Background主要用作設(shè)計(jì)界面背景,把網(wǎng)上找到的圖片添加進(jìn)去即可設(shè)計(jì)出背景。Botton按鈕是用來(lái)出發(fā)點(diǎn)擊事件的,當(dāng)點(diǎn)擊Button按鈕時(shí)會(huì)根據(jù)代碼跳轉(zhuǎn)到相應(yīng)的場(chǎng)景。具體流程是:打開(kāi)“File—BuildSetting”把設(shè)計(jì)好的不同場(chǎng)景按順序添加進(jìn)去,右側(cè)會(huì)標(biāo)示出每個(gè)場(chǎng)景的層數(shù),如圖4-8所示。圖4-8游戲場(chǎng)景分層隨后就能使用按鈕跳轉(zhuǎn)到相應(yīng)層,具體代碼如下,其中n是想要跳轉(zhuǎn)的層n。 publicvoidOnButtonSureClick(){ Application.LoadLevel(n); }
4.6游戲特效實(shí)現(xiàn)4.6.1車(chē)尾氣實(shí)現(xiàn)直接采用已經(jīng)做好的煙霧粒子系統(tǒng),將其添加到賽車(chē)模型下,擺放在兩邊排氣口的位置,這樣尾氣的位置已經(jīng)固定好只需要控制尾氣的顯示和關(guān)閉即可。尾氣的開(kāi)啟關(guān)閉在Driving代碼中的Skid函數(shù)中實(shí)現(xiàn),它規(guī)定了當(dāng)賽車(chē)的速度超過(guò)40km/h并且車(chē)輪的轉(zhuǎn)動(dòng)超過(guò)5個(gè)單位并且賽車(chē)接觸地面時(shí),系統(tǒng)就判斷賽車(chē)目前處于漂移狀態(tài),此時(shí)尾氣粒子系統(tǒng)開(kāi)啟,否則就關(guān)閉,這樣就實(shí)現(xiàn)了漂移是尾氣的特效。4.6.2車(chē)尾燈實(shí)現(xiàn)當(dāng)賽車(chē)正在倒車(chē)時(shí),車(chē)尾燈應(yīng)當(dāng)亮起起到警示作用。首先創(chuàng)建兩個(gè)light物體作為車(chē)尾燈,將其放在車(chē)尾燈的位置。車(chē)尾燈的開(kāi)關(guān)控制在Driving代碼中的ControlLight中實(shí)現(xiàn),它規(guī)定了當(dāng)賽車(chē)的倒車(chē)速度達(dá)到3km/h時(shí),車(chē)尾燈就會(huì)亮起,否則,車(chē)尾燈就會(huì)關(guān)閉。實(shí)現(xiàn)代碼如下所示 voidControlLight(){ if(currentSpeed<-3){ leftLight.SetActive(true); rightLight.SetActive(true); }else{ leftLight.SetActive(false); rightLight.SetActive(false); } }
4.6.3漂移車(chē)痕特效創(chuàng)建一個(gè)Quad物體,材質(zhì)設(shè)置為網(wǎng)上查找的合適的車(chē)痕,修改Quad的大小、位置信息保證它在車(chē)輪頂部并且它的寬度和車(chē)輪寬度相一致。車(chē)痕Z軸的位置不需要和路面保持一致,最好是車(chē)痕位置比路面位置高一點(diǎn),這樣渲染出來(lái)的車(chē)痕才是清晰完整的。一開(kāi)始,車(chē)痕不需要實(shí)例化,當(dāng)賽車(chē)漂移判斷成立時(shí),車(chē)痕開(kāi)始實(shí)例化,車(chē)痕的長(zhǎng)度不能太短,否則產(chǎn)生的車(chē)痕不連續(xù)。車(chē)痕會(huì)依據(jù)上一個(gè)車(chē)痕的旋轉(zhuǎn)角度來(lái)保證車(chē)痕的平滑產(chǎn)生。4.7游戲結(jié)束實(shí)現(xiàn)創(chuàng)建一個(gè)名為Finish的物體,添加BoxCollider組件設(shè)置為T(mén)rigger。BoxCollider必須足夠大能夠覆蓋賽車(chē)通過(guò)終點(diǎn)時(shí)的所有可能的位置,以免覆蓋范圍不足導(dǎo)致游戲無(wú)法結(jié)束。當(dāng)賽車(chē)碰撞到BoxCollider時(shí),系統(tǒng)就會(huì)判定游戲結(jié)束。4.8電腦賽車(chē)實(shí)現(xiàn)電腦賽車(chē)的實(shí)現(xiàn)主要通過(guò)CarWayPoint插件完成,通過(guò)在賽道上標(biāo)示連續(xù)、互相連接的點(diǎn)就能控制賽車(chē)自動(dòng)完成賽道。當(dāng)電腦賽車(chē)運(yùn)動(dòng)到某個(gè)點(diǎn)時(shí),系統(tǒng)會(huì)計(jì)算出賽車(chē)下個(gè)應(yīng)該移動(dòng)到的點(diǎn),然后賽車(chē)移動(dòng)到該點(diǎn)并重復(fù)以上操作直至賽車(chē)通過(guò)終點(diǎn)。
4.9移植到安卓平臺(tái)實(shí)現(xiàn)4.9.1腳本優(yōu)化Driving代碼定義了許多public對(duì)象,在前面添加“[HideInInspector]”可以簡(jiǎn)化代碼賦值操作,通過(guò)Driving代碼最后的InitProperty函數(shù)使用Find操作就可找到對(duì)象所對(duì)應(yīng)的各個(gè)部件。這樣,其他賽車(chē)模型就能直接使用Driving代碼而無(wú)需重新綁定對(duì)象。4.9.2賽車(chē)控制方式轉(zhuǎn)變電腦上游戲控制采用按鍵方式,而手機(jī)端采用重力感應(yīng)控制。重力感應(yīng)需要水平方向的一個(gè)力以及左右的一個(gè)傾斜角度,因此只需要在Driving代碼中添加下面幾段:privatefloatvertical=1;privatefloathorizontal=0;horizontal=Input.acceleration.x;然后再用vertical替換代碼中所有的Input.GetAxis(“Vertical”),這樣就能實(shí)現(xiàn)游戲轉(zhuǎn)變?yōu)橹亓Ω袘?yīng)控制。4.9.3轉(zhuǎn)變平臺(tái)場(chǎng)景優(yōu)化將場(chǎng)景由電腦平臺(tái)轉(zhuǎn)變?yōu)榘沧科脚_(tái)后,場(chǎng)景渲染會(huì)出現(xiàn)問(wèn)題,最主要問(wèn)題還是安卓平臺(tái)和電腦平臺(tái)的LightMaping不能通用,此外安卓平臺(tái)和電腦平臺(tái)對(duì)陽(yáng)光的敏感度不一樣。修改措施是,把LightMaping去除,然后修改Light中的亮度屬性,直至得到合適的光照效果。
4.9.4游戲發(fā)布將所有繪制好的場(chǎng)景添加到BuildSetting中,然后修改PlayerSettings選項(xiàng)中的OtherSettings,如圖4-9所示。圖4-9OtherSettings修改MinimumAPILevel為Android4.2版本以及InstallLocation改為Automatic。修改完成后就可以點(diǎn)擊Build發(fā)布成APK。4.10本章小結(jié)本章主要介紹了有關(guān)賽車(chē)游戲的具體實(shí)現(xiàn),給出了各開(kāi)發(fā)階段的實(shí)現(xiàn)方法。首先給出了賽車(chē)屬性的實(shí)現(xiàn),然后實(shí)現(xiàn)賽車(chē)的運(yùn)動(dòng)、游戲音效、游戲特效、UI界面設(shè)計(jì)等問(wèn)題,最后將游戲?qū)С鰹锳PK文件為后續(xù)測(cè)試使用。
第5章系統(tǒng)測(cè)試和總結(jié)5.1系統(tǒng)測(cè)試打開(kāi)AVDManager創(chuàng)建一個(gè)Android4.2版本的模擬器,將第4章導(dǎo)出的APK文件導(dǎo)入后就能模擬游戲在手機(jī)終端上的運(yùn)行效果。首先是對(duì)游戲的設(shè)置測(cè)試,經(jīng)過(guò)多次測(cè)試后,游戲選擇橫屏演示,游戲分辨率選擇854*480,這是安卓手機(jī)的一般分辨率。其次是游戲內(nèi)部各參數(shù)的測(cè)試,多次測(cè)試后,賽車(chē)的motorTorque設(shè)置為40最佳,攝像機(jī)的平滑速度SmoothSpeed設(shè)置為2,其余參數(shù)就采用游戲開(kāi)發(fā)過(guò)程中默認(rèn)的參數(shù)。結(jié)果后期測(cè)試,游戲整體運(yùn)行狀況良好,游戲過(guò)程中沒(méi)有出現(xiàn)卡頓、閃退的現(xiàn)象,游戲功能能正確實(shí)現(xiàn),總體效果令人滿意。5.2本文總結(jié)本文的主要內(nèi)容是基于安卓系統(tǒng)的自選數(shù)量的手機(jī)賽車(chē)游戲的研究與實(shí)現(xiàn),提出一種實(shí)現(xiàn)玩家控制賽車(chē)運(yùn)行以及實(shí)現(xiàn)賽車(chē)自動(dòng)完成賽道的算法,并給出了在安卓模擬器上游戲運(yùn)行狀況的實(shí)驗(yàn)結(jié)果。此方法運(yùn)用了改進(jìn)的CarWayPoint插件,充分考慮了賽車(chē)自身屬性以及賽道情況,并且進(jìn)行了在安卓模擬器上模擬游戲運(yùn)行的測(cè)試。本文的實(shí)驗(yàn)測(cè)試環(huán)境是在AndroidSDK上運(yùn)行測(cè)試的,提高了游戲體驗(yàn)和游戲流暢運(yùn)行,具有一定的參考價(jià)值。本文研究的主要工作有:本文對(duì)玩家的需求分析進(jìn)行了基礎(chǔ)的總結(jié)和分析,根據(jù)這些設(shè)計(jì)游戲具體的功能,具有較好的效果。本文在設(shè)計(jì)電腦賽車(chē)時(shí),提出了用CarWayPoint插件標(biāo)識(shí)賽道路段,同時(shí)指引電腦賽車(chē)正確完成賽道。5.3下一步的研究工作在本文已有的研究成果的基礎(chǔ)上,還要從一下幾個(gè)方向做進(jìn)一步的研究:本文對(duì)賽車(chē)的漂移控制只是一種簡(jiǎn)易算法,如何設(shè)計(jì)出更加合理、人性化的漂移功能是下一步需要解決的。本文中的賽車(chē)無(wú)法實(shí)現(xiàn)漂移后的加速功能,這影響了玩家的游戲體驗(yàn),所以下一步需要設(shè)計(jì)能實(shí)現(xiàn)漂移后加速的功能來(lái)增加游戲樂(lè)趣。本文中的賽車(chē)都是玩家根據(jù)需要自己選擇的,并沒(méi)有賺金幣買(mǎi)好車(chē)的過(guò)程,這在短時(shí)間內(nèi)可能會(huì)讓玩家直接體驗(yàn)高檔車(chē)的樂(lè)趣,但當(dāng)玩家全部體驗(yàn)完后,玩家很容易厭倦游戲,所以下一步需要設(shè)計(jì)游戲的金幣機(jī)制,部分高檔賽車(chē)需要玩家使用金幣購(gòu)買(mǎi),這樣可以保證游戲的可玩性。同樣的,游戲中的部分賽道也可以設(shè)置為需要玩家用某種方式來(lái)解鎖。謝辭本課題能夠順利完成,首先要感謝我的畢業(yè)設(shè)計(jì)導(dǎo)師張彩明。在畢業(yè)設(shè)計(jì)期間,張老師一直給予了我很大的幫助。從選題、分析、設(shè)計(jì)、實(shí)現(xiàn)、檢測(cè)各個(gè)階段,張老師都給予了我悉心指導(dǎo)。張老師求真務(wù)實(shí)、認(rèn)真嚴(yán)謹(jǐn)?shù)淖黠L(fēng)是我今后學(xué)習(xí)的榜樣。其次,我還要感謝李雪梅老師。在編寫(xiě)論文的階段,李老師一直對(duì)我的論文詳細(xì)修改,不斷指出我的不足和問(wèn)題,讓我能按時(shí)、正確完成論文。四年的大學(xué)生活馬上就要結(jié)束,回憶過(guò)去四年,有失敗,有淚水,但也有成功,有喜悅。通過(guò)這次畢業(yè)設(shè)計(jì),我學(xué)到了課堂上沒(méi)有的知識(shí),感受到了之前從未接觸過(guò)的理念,不斷的修改調(diào)試最終完成了畢業(yè)設(shè)計(jì)。相信這次畢業(yè)設(shè)計(jì)的經(jīng)歷會(huì)對(duì)我以后的人生有很大幫助。最后,我要再次感謝對(duì)我畢設(shè)期間給予幫助的老師、同學(xué)以及被我引用的文獻(xiàn)作者。參考文獻(xiàn)[1]張利國(guó),代聞,龔海平Android移動(dòng)開(kāi)發(fā)案例詳解北京:人民郵電出版社2009[2]LaurenDarcey,ShaneConderAndroidWirelessApplicationDevelopmentAddison-WesleyProfessional2009[3]胡紹民游戲設(shè)計(jì)概論北京:清華大學(xué)出版社2008[4]郭宏志Android應(yīng)用開(kāi)發(fā)詳解北京:電子工業(yè)出版社2010[5]韓超,梁泉Android系統(tǒng)原理及開(kāi)發(fā)要點(diǎn)詳解北京:電子工業(yè)出版社2010[6]路朝龍Unity3D游戲開(kāi)發(fā)從入門(mén)到精通北京:中國(guó)鐵道出版社2013[7](英)WillGoldstone著,張檢閱譯Unity3.x游戲開(kāi)發(fā)經(jīng)典教程2013[8]楊文志GoogleAndroid程序設(shè)計(jì)指南北京:電子工業(yè)出版社2009[9]余志龍GoogleAndroidSDK開(kāi)發(fā)范例大全北京:人民郵電出版社2009[10](美)席爾瓦著,王恒等譯精通Android游戲開(kāi)發(fā)北京:人民游戲出版社2011[11]吳亞峰Android核心技術(shù)與實(shí)例詳解北京:電子工業(yè)出版社2003[12]李佐彬等Android開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)體驗(yàn)北京:機(jī)械工業(yè)出版社2011[13]靳巖,姚尚朗GoogleAndroid開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)北京:人民郵電出版社2009[14]張波,高朝勤,楊越譯著GoogleAndroid基礎(chǔ)教程北京:人民郵電出版社2009[15](美)羅杰等著,李耀亮譯Android應(yīng)用開(kāi)發(fā)北京:人民郵電出版社2010[16](美)布金,西曼著OReillyTaiwan公司譯游戲開(kāi)發(fā)中的人工智能南京:東南大學(xué)出版社2006附錄1論文原文iDome:ImmersivegamingwiththeUnitygameengineWrittenby
PaulBourkeProceedingsoftheComputerGames&AlliedTechnology09(CGAT09),ResearchPublishingServices,ISBN:978-981-08-3165-3,pp265-272.
PresentedatComputerGames&AlliedTechnology09,Singapore,May12,2009
AbstractInmanygames,notablyfirstpersonshooters,theplayerinhabitsa3Dvirtualworldsimilartotheuserexperienceinavirtualrealityapplicationortrainingsimulator.Itisgenerallyacceptedthatinsuchenvironmentsthereisaheightenedsenseofimmersionandengagement
[1]
iftheplayerissurroundedbythevirtualimagery,thatis,thevirtualworldoccupiestheirentirevisualfield.HowevertraditionalrealtimegraphicsAPIsonlys
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 系統(tǒng)架構(gòu)設(shè)計(jì)師業(yè)務(wù)理解能力試題及答案
- 考生關(guān)注的系統(tǒng)規(guī)劃與管理師備考問(wèn)題試題及答案
- 職業(yè)道德標(biāo)準(zhǔn)試題及答案
- 藥劑學(xué)主要概念理解的試題及答案
- 歷史上最大規(guī)模的G8峰會(huì)
- 系統(tǒng)規(guī)劃與管理師備考中的常見(jiàn)誤區(qū)試題及答案
- 藥物臨床應(yīng)用評(píng)估試題及答案
- 核心知識(shí)梳理計(jì)算機(jī)二級(jí)試題及答案
- 育嬰師的情景模擬培訓(xùn)方法考題試題及答案
- 藥物研發(fā)的管理與協(xié)作模式試題及答案
- 2025年開(kāi)封文化藝術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案
- 2025-2030年中國(guó)手工紙制造行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- 【滬教】期中模擬卷02【U1~U4】
- 衛(wèi)生事業(yè)管理學(xué)期末題庫(kù)(84題)
- 地方特色美食節(jié)活動(dòng)策劃
- 2024年平頂山職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2025年北師大版數(shù)學(xué)六年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- 2025社保政策培訓(xùn)
- 2025年蘇州工業(yè)園區(qū)國(guó)企招聘筆試參考題庫(kù)含答案解析
- 2025年上海市規(guī)劃和國(guó)土資源管理局所屬事業(yè)單位工作人員招考高頻重點(diǎn)提升(共500題)附帶答案詳解
- 資產(chǎn)管理崗管理制度內(nèi)容
評(píng)論
0/150
提交評(píng)論