基于Unity3D的汽車駕駛游戲的設計與實現(xiàn)(畢業(yè)論文)_第1頁
基于Unity3D的汽車駕駛游戲的設計與實現(xiàn)(畢業(yè)論文)_第2頁
基于Unity3D的汽車駕駛游戲的設計與實現(xiàn)(畢業(yè)論文)_第3頁
基于Unity3D的汽車駕駛游戲的設計與實現(xiàn)(畢業(yè)論文)_第4頁
基于Unity3D的汽車駕駛游戲的設計與實現(xiàn)(畢業(yè)論文)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

頁眉內容頁眉內容頁眉內容目錄TOC\o"1-2"\h\z\u摘要 IAbstract II一、 緒論 1(一) 研究背景和研究意義 1(二) 國內外研究現(xiàn)狀 1(三) 論文組織結構 2二、 3D游戲技術的知識系統(tǒng) 2(一) 3D圖形庫 2(二) 物理引擎 5(三) Unity3D 8三、 車輛駕駛游戲的設計 11(一) 游戲創(chuàng)意 11(二) 游戲框架結構設計 13(三) 游戲層次結構設計 14四、 車輛駕駛游戲的實現(xiàn) 15(一) 場景渲染實現(xiàn) 15(二) 場景物理仿真實現(xiàn) 21(三) 汽車動力學模擬 22(四) 用戶圖形界面實現(xiàn) 24(五) 網(wǎng)絡聯(lián)機模塊實現(xiàn) 27五、 游戲展示與性能分析 28(一) 游戲展示 28(二) 性能分析 30六、 項目總結 32(一) 總結 32(二) 下一步工作的展望 33參考文獻 34摘要隨著計算機技術的發(fā)展,電子游戲的形式越來越豐富,用戶對于電子游戲的娛樂性需求也越來越高,追求更加真實的感官體驗成為電子游戲的一條發(fā)展趨勢。作為虛擬現(xiàn)實領域的一項的綜合應用,3D游戲已經(jīng)在電腦、手機、機頂盒等多平臺得到了普及,相對于傳統(tǒng)的2D游戲,3D游戲讓用戶感覺更融入,更加享受,但所依賴的計算機技術也更加復雜,計算機圖形學、物理仿真等都成為3D游戲開發(fā)所需要的重點研究方向。我國在電子游戲領域的發(fā)展與領先國家還具有一定的差距,為了振興本國電子游戲行業(yè),對這一項綜合應用所涉及的技術進行整體的梳理是完全有必要的。論文按照從設計到實現(xiàn),從理論到應用。首先介紹了3D游戲的一般技術框架,之后圍繞一款基于Unity3D的小型的汽車駕駛游戲,使用Unity3D支持多個平臺,可方便引入各方面插件。在游戲設計和實現(xiàn)階段,先簡單介紹了游戲的創(chuàng)意,接著設計了整個游戲的的整體結構,并將游戲系統(tǒng)主要分為圖形渲染、物理仿真、網(wǎng)絡同步等模塊,圖形渲染使用Unity3D中OpenGL插件,使得游戲可以運行到手機平臺,為了更精確、更快速處理汽車的物理仿真,使用了PhysX來對車身及場景進行物理設計,著重涉及到碰撞檢測、車身剛體及輪胎的懸掛系統(tǒng)的概念及算法,并且增加界面設計及網(wǎng)絡模塊使得用戶增加互動性。論文的最后對游戲做了一定的分析,在執(zhí)行效率及可玩性做出了改進展望。整個游戲系統(tǒng)各模塊之間接口靈活且耦合性低,且運行效率高,雖然屬于小型游戲,但涉及的技術點較為全面,可以為同類問題提供參考。關鍵字:Unity3D,游戲,圖形引擎,物理引擎,PhysX,汽車駕駛AbstractWiththedevelopmentoftheelectronicscience,formsofelectronicgamesarebecomingricherandricher,meanwhilethatusersneedtomorerealsensejudgmenthasbeenanimportantprogresstrend.Asanapplicationofthevirtualreality,3Dgamesisavailableonallthemajorcomputer,mobileplatforms,set-topboxesandsoon.3Dgamesmakeuserseasierimmerseinenjoyingitcomparedwith2Dgames,butrequiremorecomplextechnique,sothatComputerGraphicandColliderdetectionhavebeenkeyresearchfields.Theindustrylevelof3DgamesfallsbehindinChinaatpresent,itisameaningworktogothroughthetechnologyofthecomprehensiveapplication.Thethesisisorderfromtheorytoapplication.Firstlythispaperintroducesthebaseframeworkof3Dgames,andthendevelopavehiclegamebyUnity3D,whichsupportsmultipleplatformsandeasiertodevelopbytheplugin.Inthespecificgame,introducetheideaofthisgameanddiscusstheoveralldesignoftheintegralstructure.Thisgameisbrokendownintomodulessuchasgraphicrending,physicalsimulationandnetwork.GraphicrenderingusesOpenGLplugininUnity3D,whichmakesgameruninmobilephone.PhysicalsimulationdependsonPhysXwhichcanobtainmoreaccurateresultstodesigntherigidbodyofthecar,thesuspensionofthewheelsandthescene.InordertoaddinteractivityweaddnetworkandUImodule.Intheend,thispaperanalysisthisgametoputforwardthenextimprovement.Thisvehiclegameismini,butownssomeadvantagessuchasflexiblemoduleinterfaces,lowcouplingandfastexecuting.Mostimportantlythispaperreferstomostaspectsofa3Dgameandprovideareferencefordeveloperswhohasasimilarrequirement.Keywords:Unity3D,game,graphicengine,physicalengine,PhysX,automobilism緒論研究背景和研究意義這幾年,中國經(jīng)濟以8%左右的速度持續(xù)平穩(wěn)的增長,而在剛剛過去的2012年中國游戲市場實際銷售收入602.8億元,同比增長率為35.1%,首次突破600億規(guī)模[1]。游戲產(chǎn)業(yè)己經(jīng)成為經(jīng)濟市場中增長速度最快的熱點,是眾所關注的焦點。游戲是文化創(chuàng)意產(chǎn)業(yè)里的一部分,創(chuàng)意經(jīng)濟是知識經(jīng)濟的核心內容,更是其經(jīng)濟的重要表現(xiàn)形式,沒有創(chuàng)意就沒有新經(jīng)濟。游戲設計是文化藝術創(chuàng)意和商品生產(chǎn)的結合,游戲產(chǎn)業(yè)的發(fā)展在中國的經(jīng)濟發(fā)展中具有十分重要的意義[2]:1.有利于保護民族的文化傳統(tǒng)和價值觀,抵制文化入侵;2.推動創(chuàng)意產(chǎn)業(yè)的快速發(fā)展,提升我國經(jīng)濟產(chǎn)業(yè)發(fā)展水平;3.提供健康快樂的大眾娛樂方式,提升消費者的休閑體驗感受。游戲的發(fā)展從表現(xiàn)方法上經(jīng)歷了2D游戲和3D游戲兩個階段。游戲設計,特別是3D游戲開發(fā)綜合運用了計算機圖形學、物理仿真和網(wǎng)絡通訊等技術,并且移動平臺技術在這幾年得到迅猛發(fā)展,輕量級、微創(chuàng)新、時間碎片化一直是移動游戲的發(fā)展趨勢,如《憤怒的小鳥》、《頑皮鱷魚愛洗澡》、《神廟逃亡》的用戶數(shù)都已經(jīng)過億。論文通過一個簡單的“碰碰車”創(chuàng)意予以實現(xiàn),涵蓋了3D游戲涉及到的一些基本技術,能深入理解這些領域的底層技術并熟練掌握成熟的引擎使用,對于將來開發(fā)具有自主知識產(chǎn)權的游戲提供了參考。國內外研究現(xiàn)狀國外的3D游戲起步在90年代初,美國的卡馬克的《重返德軍總部3D》是第一部3D第一人稱射擊游戲,由其開發(fā)的Doom引擎也成為最早3D游戲引擎。國內首款自主研發(fā)的3D游戲始于2003年,到目前為止,國內在3D游戲已經(jīng)有了很多的研究,但由于3D游戲開發(fā)的復雜性及經(jīng)濟效益的考慮,國內只有屈指可數(shù)的互聯(lián)網(wǎng)公司擁有自主研發(fā)的3D游戲引擎,中小型公司還是使用國外較為成熟的游戲引擎和工具,如虛幻,Unity3D,寒霜。雖然近年來國內涌現(xiàn)一些優(yōu)秀的3D網(wǎng)游諸如《劍俠情緣3》、《九陰真經(jīng)》,但一直無法像產(chǎn)出世界級的3D游戲大作,大部分游戲公司還是以代理國外優(yōu)秀產(chǎn)品為主,導致資金外流及本土文化缺失。隨著移動硬件設備的日益強大,移動平臺上的游戲也出現(xiàn)了驚人的增長,3D互動娛樂在手機領域的應用也逐漸增加。而移動領域存在諸多的操作系統(tǒng),常用的有Android、WindowsMobile、iOS等,而在各個平臺上的移植和實現(xiàn)對于開發(fā)商來說是不經(jīng)濟的,而目前國外優(yōu)秀的成熟引擎已經(jīng)成功解決這類需求,最為突出的要數(shù)Unity3D引擎,Unity3D中使用虛擬機技術使游戲編譯結果獨立于平臺執(zhí)行。國內對于跨平臺引擎技術的研究還處于起步階段,但熟練掌握和理解這些引擎的使用依然具有一定意義。論文組織結構論文按照從設計到實現(xiàn),從理論到應用,主要圍繞一款基于Unity3D的小型的汽車駕駛游戲,對一些3D游戲設計的技術進行相關的研究,并予以設計實現(xiàn)。本文共分為六章,各章節(jié)安排如下:第一部分:緒論,闡述了論文的研究背景和意義、國內外研究現(xiàn)狀以及本文主要研究內容;第二部分:介紹了3D游戲開發(fā)的一般技術框架,及相關的第三方引擎,主要有圖形渲染庫、物理引擎及Unity3D的概述;第三部分:汽車駕駛游戲的創(chuàng)意以及游戲系統(tǒng)的整體設計,并根據(jù)Unity3D框架規(guī)范設計了一種MVC層次結構;第四部分:討論游戲中各模塊的技術研究和實現(xiàn)過程,主要的核心模塊是場景渲染和物理仿真;第五部分:展示當前的游戲并對效率、玩法等方面做一定分析;第六部分:結論,對該設計進行總結并指出其中的不足,提出下一步展望。3D游戲技術的知識系統(tǒng)3D圖形庫3D圖形庫簡介3D圖形庫被定義為顯卡與應用程序直接的接口。編程人員只要調用3D圖形庫中的API(ApplicationProgrammingInterface)函數(shù),從而與硬件的驅動程序溝通,啟動3D芯片內強大的3D圖形處理功能,制作具有3D圖形效果的軟件。3D圖形庫的執(zhí)行具有非常快速的特點,并且具有高度的可移植性,其中的API函數(shù)定義為獨立于任何程序設計語言的一組規(guī)范,在特定語言中的實現(xiàn)描述由國際標準化組織來制定。嚴格按照計算機圖形學原理設計而成,符合光學和視覺原理,編程人員只要用這些API函數(shù)定義點、線、面的三維特征,如位置坐標、頂點顏色、法向向量、紋理坐標等就可以創(chuàng)建極其逼真的3D圖像。許多三維演示系統(tǒng)都用3D圖形庫作為三維圖形生成和控制的編程接口。目前主要應用的3D函數(shù)庫有DirectX和OpenGL。DirectX:微軟公司專為PC游戲開發(fā)的API,與Windows操作系統(tǒng)兼容性好,可繞過圖形顯示接口(GDI)直接進行支持該API的各種硬件的底層操作,大大提高了游戲的運行速度,而且目前基本上是免費使用的。由于要考慮與各方面的兼容性,DirectX用起來比較麻煩、在執(zhí)行效率上也未見得最優(yōu)。OpenGL:(開放式圖形接口)由SiliconGraphics公司開發(fā),能夠在Windows95、WindowsNT、Macos、Beos、OS/2、以及Unix上應用的API。由于OpenGL起步較早,一直用于高檔圖形工作站,其3D圖形功能很強,超過DirectX,能最大限度地發(fā)揮3D芯片的巨大潛力。在Windows中已經(jīng)全面支持DirectX和OpenGL。在OpenGL的1.2版中還增加了對3DNow!標準的支持。3D圖形庫的渲染管線絕大多數(shù)3D圖形庫實現(xiàn)都有相似操作順序,一系列相關的處理階段叫做3D圖形的渲染管線,如圖2-1顯示了這些順序,它是3D圖形庫處理數(shù)據(jù)的方法[3]。圖2-13D圖形庫渲染管線下面詳細介紹其中幾個比較重要的階段:基于頂點的操作與基本裝配:這個過程包括本地空間-世界空間-視圖空間-背面揀選,主要是根據(jù)編程人員設置的攝像機位置、視錐屬性和頂點索引對頂點數(shù)據(jù)進行一系列的數(shù)學運算,使3D圖形的形狀及位置得以正確顯示。像素操作:該過程主要根據(jù)編程人員傳入顯卡的紋理及頂點的紋理坐標以及光照信息進行顏色計算、混合,并對線、面采用線性插值、二次線性插值等算法最終進行出像素的顏色。這個過程的計算一般由顯卡固定管線的計算公式完成,如想得到更真實、更多樣的效果,可采用可編程管線技術實現(xiàn)。3D程序基本工作流程前面提到了調用3D圖形庫中的API函數(shù)來設計3D應用程序,現(xiàn)在更為詳細的介紹這樣的應用程序的一般工作流程,如圖2-2所示:圖2-23D圖形庫渲染管線在程序主入口main函數(shù)中,首先調用ApplicationInitial函數(shù)進3D圖形庫的一些初始化工作:如通知顯卡存儲頂點、顏色、燈光、紋理等信息,接下來進入主循環(huán)不斷調用ApplicationUpdate函數(shù),ApplicationUpdate調用每一個渲染物體的ObjectUpdate函數(shù),更新其在顯存中的信息,并通知顯存進行一次渲染管線流動,這樣新的一幀3D圖形就被渲染出來并產(chǎn)生動畫。最后在應用程序結束時調用ApplicationDestory來進行清理工作。當然,復雜的3D應用框架還會利用多線程技術來處理邏輯運算和事件回調等內容。物理引擎物理引擎簡介在游戲這項綜合應用中中,除了華麗的畫面渲染外,作為表現(xiàn)虛擬世界系統(tǒng)內在物理規(guī)律的計算是必不可少的。當被模擬的剛體的運動比較簡單,我們可以在一定程度上通過編程或編寫腳本來實現(xiàn),如簡單的加速和減速牛頓物理運動。但當模擬比較復雜的物體的碰撞、滾動、滑動或者彈跳的時候,通過編寫底層算法會造成工程延誤,這顯然不符合軟件工程的思想。成熟的物理引擎能夠允許更復雜的物理模擬,像球形關節(jié)、輪子、氣缸或者鉸鏈,有些也支持非剛性體的物理屬性,比如流體和布料。物理引擎接受的輸入是由外界調用模塊傳遞過來的場景信息以及場景中物體的位置信息。根據(jù)調用模塊的不同,可能輸出三種計算結果:場景與物體以及物體之間是否發(fā)生碰撞、碰撞發(fā)生的具體位置以及發(fā)生碰撞后物體的具體位置,并將計算結果傳送給調用模塊。如圖2-3所示:圖2-3物理引擎功能示意圖物理引擎基本架構[4]物理引擎一般分為兩個重要部分,即碰撞檢測和物理學世界。如圖2-4所示:圖2-4物理引擎基本架構碰撞檢測模塊是物理引擎的核心模塊,建立在物理學世界的基礎上的[5]。其由初步碰撞檢測、精確碰撞檢測和精確求交三個基本模塊組成,各模塊的執(zhí)行順序如圖2-5所示:圖2-5碰撞檢測模塊流程圖在初始化階段,碰撞檢測模塊給虛擬世界每個物體建立包圍盒,比較常用的包圍盒算法有AABB(Axis-alignedboundingbox)、包圍球、膠囊體等。逐步求精階段將整個虛擬世界進行空間劃分,主要用到數(shù)據(jù)結構有八叉樹、k-d樹和BSP樹等,通過自頂向下的層次結構不斷判斷物體是否可能發(fā)生碰撞。最后再精確求交模塊中使用凸體算法和射線檢測算法得到精確的碰撞信息[6]。物理學世界模塊,是現(xiàn)實世界的抽象模型。物理學世界包含兩個部分,一個是剛體物理學世界,一個是柔體物理學世界。在力的作用下,體積和形狀都不發(fā)生改變的物體稱作剛體。剛體按照其運動特征可以分為平動、定軸轉動、平面運動、定點運動和一般運動等形式。在一般情況下,運動剛體上各點的軌跡、速度和加速度是各不相同的,但彼此之間存在著一定的關系。體積和形狀在力的作用下能夠發(fā)生變化的物體稱作柔體,如流體、布料等。因此,物理學世界的模塊結構如圖2-6所示。圖2-6物理學世界模塊結構圖Havok和PhysX的比較物理引擎中需要大量的計算,并且不同物理引擎針對特定顯卡有3D加速功能,因此,開發(fā)3D游戲前選擇一款合適的物理引擎是及其重要的,否則會極大影響游戲的性能。目前在游戲市場占重要地位的有Intel的Havok和Nvidia的PhysX。Havok,全稱為HavokGameDynamicsSDK,譯作Havok游戲動力開發(fā)包,主要分為Physics、FX、Animation、Behavior、Cloth、Destruction、AI幾大組件。Havok成立于1998年,總部位于愛爾蘭首都都柏林。引擎基于C/C++語言而成,2000年在22.htm"游戲開發(fā)者大會上發(fā)布了Havok1.0,最新版本為5.5,2007年9月,Intel宣布收購Havok。在全平臺上,共有353種游戲使用Havok引擎,超過了PhysX的309種,使用Havok的著名游戲有:《極品飛車:亡命天涯》、《星際爭霸2》、《暗黑破壞神3》、《上古卷軸4》等,圖為Havok的展示Demo:圖2-7Havok引擎展示(左為HavokPhysics,右為HavokCloth)PhysX物理運算引擎由五名年輕的技術人員開發(fā),他們成立了AGEIA公司。由于PhysX物理引擎在設計上就并不適合用CPU去計算,因此AGEIA公司還為PhysX引擎設計了專門的運算硬件,PhysX物理加速卡,其中的運算核心被稱為PPU(PhysicsprocessingUnit)。圖2-8為AGEIA當初設想的未來PC組成部分。圖2-8AGEIA當初設想的未來PC組成部分2008年,Nvdia收購了AGEIA,物理加速卡停止開發(fā),而是將PhysX物理加速功能移植到NvdiaGPU中,用戶不必額外購買PhysX物理加速卡就能享受到PhysX物理加速功能。在PC平臺上,共有269種游戲采用PhysX引擎,而Havok為163種。表4-1Havok和PhysX在各方面的比較物理引擎:HavokPhysX物理加速多線程加速只支持NvdiaGPU加速執(zhí)行效率快不開啟GPU加速下略遜一籌跨平臺性全平臺全平臺是否開源是否游戲引擎集成寒霜Unity3D主要游戲平臺Wii、Xbox360、PS3PCUnity3DUnity3D簡介Unity3D是由UnityTechnologies開發(fā)的一款全面整合的專業(yè)"游戲引擎,其具有的功能使得開發(fā)人員可專注于游戲的設計而忽略底層的技術實現(xiàn),達到快速開發(fā)的目的。Unity類似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件其編輯器運行在Windows和MacOSX下。其主要的特色有[7]:圖形動力:內部封裝了DirectX和OpenGL圖形渲染庫,并附帶一些常用的渲染組件及著色器腳本。物理仿真:Unity3d不但整合了NvidiaPhysX物理引擎,并在其基礎上封裝了游戲中常會用到的物理組件,如碰撞體、連接體等。跨平臺性:可發(fā)布游戲至Windows、Mac、iOS、Android、Xbox、Wii或PS3平臺,也可以利用Unitywebplayer或者Flash插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽。資源商城:開發(fā)人員可在資源商城中購買其他人開發(fā)的資源(代碼、模型等),進行高效復用。資源服務器:Unity資源服務器是一個附加的版本控制的產(chǎn)品,但比起SVN更適合游戲團隊中不同職位的人員共同使用(程序、策劃、美術)。性能分析器:引擎中自帶一個Profiler分析器,開發(fā)人員可在編輯器或者設備連線進行性能分析CPU和GPU不同階段的效率。Unity3D基本概念一個完整的lJnity3d程序是由若干個場景(Scene)組合起來的,每個場景中又包含有許多游戲對象(GameObject),每個對象可以具有若干組件(Component),其中的繼承自MonoBehavior的腳本組件進行初始化、更新等操作,而我們在場景所看到的內容是由攝像頭(Camera)來呈現(xiàn)并控制的。場景(Scene):場景是Unity3D程序的基本組成單位,任何一個Unity3D程序都是由若干場景組合而成,程序通過腳本在這些場景之間跳轉。場景通過場景圖的形式組織,場景圖實際上是一種樹形結構,其中每個節(jié)點就是一個游戲對象。對象與對象之間存在父子關系,即當父級對象移動、旋轉、縮放時,子級對象也跟著一起變換[8],如圖2-9所示:圖2-9旋轉一個父節(jié)點同時它的子節(jié)點也跟著旋轉游戲對象(GameObject):在場景中按照場景圖形式組織,場景圖實際上是一種樹形結構,如圖。樹形層次結構中的節(jié)點,加入的特定組件后就成了有實際功能的對象,如可渲染網(wǎng)格、攝像機、光源等,游戲對象可以打包成.prefab格式的文件方便復用。組件(Component):組件可以是網(wǎng)格(Mesh)、光源(Light)、攝像機(Camera)、粒子系統(tǒng)(Particle)、物理碰撞體(Collider)、布料(Cloth)、連接體(Joint)、聲音(Audio)、動畫(Animation)以及最重要的腳本(Script)。Unity3D的設計是以面向對象理論為基礎,Unity3D支持C#、JavaScript和Boo三種腳本語言,如果對象繼承自MonoBehavior腳本對象,生命周期將交給Unity3D來管理,如圖2-10所示:圖2-10MonoBehavior的生命周期車輛駕駛游戲的設計游戲創(chuàng)意隨著移動硬件設備的日益強大,并且移動平臺技術在這幾年得到迅猛發(fā)展,移動平臺上的游戲也出現(xiàn)了驚人的增長,輕量級、微創(chuàng)新、時間碎片化一直是移動游戲的發(fā)展趨勢?!稇嵟男▲B》、《頑皮鱷魚愛洗澡》等幾款創(chuàng)意游戲都得到了巨大的成功,這些游戲的共同特點有:1.操作簡單,游戲目的簡單。不論是高級游戲玩家還是不常玩游戲的用戶群,很容易知道如何操作并理解游戲的目的。如《憤怒的小鳥》只需一只手指調整彈弓的角度和力度最終將豬擊飛,《頑皮鱷魚愛洗澡》只要用手指刮開泥土將水引導進鱷魚的浴缸;2.真實的物理規(guī)律。游戲中充分考慮到現(xiàn)實生活中的物理規(guī)律,如《憤怒的小鳥》中飛行的速度、重力的考慮,《頑皮鱷魚愛洗澡》中水流的流體走向;3.多樣化的設計。別出心裁的設計不僅使玩家產(chǎn)生興趣繼續(xù)挑戰(zhàn),也會更加開動玩家的腦筋。如《憤怒的小鳥》中小鳥不同的技能、會蕩秋千的豬、冰雪的場景和會引燃的炸藥,《頑皮鱷魚愛洗澡》中清水、污水、泥石流產(chǎn)生的不同效果,以及風扇、噴槍的設計等;圖3-1左為《憤怒的小鳥》游戲截圖,右為《頑皮鱷魚愛洗澡》游戲截圖筆者按照這些思路產(chǎn)生了將游樂場中“碰碰車”這一游樂項目搬上有游戲的想法,游戲同樣遵從以上三個特點,下面是簡單的游戲策劃:游戲名稱:《瘋狂碰碰車》游戲類型:3D休閑益智類游戲游戲平臺:PC、Android、iOS游戲模式:多人聯(lián)機模式,單人AI練習模式游戲玩法:玩家通過操作車輛,在競技場中與其他玩家操作的車輛進行娛樂,玩家應該盡量操作車輛的前部去撞其他車輛的背部,這樣可以搶奪對方的游戲積分,同樣的,應該通過躲避盡量避免自己的背部遭到襲擊。達到游戲時間后進行積分結算,確定本場游戲排名。游戲操作:前、后、左、右,在移動設備上可映射為重力感應和滑動操作。游戲可玩性:1.多樣的車輛,不同車輛具有不同的外形、速度以及技能等屬性,如加速快的豪華跑車、碰撞效果驚人的火車頭等,玩家通過勝過獲得游戲幣來購買夢寐以求的車輛;2.多樣的地形,可以繪制不同地域風情的競技場,并且不同的競技場應該有不同的物理屬性增加車輛駕駛趣味,如冰川、泥濘的森林,以及適合車輛躲避的樹、草、坡度等布置;3.真實的物理仿真,如前兩個特性所列,不同的設計會帶來豐富的物理仿真效果。游戲框架結構設計如前文所述,一個游戲包含多個場景,玩家根據(jù)當前的游戲進度和選項進入不同場景。而游戲模塊為游戲提供了一些必須用到的功能,這些功能,都是完全獨立與所有的場景存在的,它們并不知道到底有多少關卡,關卡的內容是什么,它們的主要工作,就是與游戲的控制單元進行信息的交換,從而支持游戲的進行。游戲框架設計必須符合游戲的玩法需求和所使用的工具,不同于大型的MMO(MassiveMultiplayerOn-Line)Game,《瘋狂碰碰車》沒有復雜的游戲系統(tǒng),更加側重于游戲可玩性的設計,并且由于使用Unity3D引擎,省去了許多底層模塊的設計,其中核心的模塊為:圖形渲染、物理仿真、網(wǎng)絡聯(lián)機。圖3-2為游戲系統(tǒng)的框架結構圖:圖3-2游戲框架結構游戲層次結構設計前文提到Unity3D中每個場景按照樹形層次結構組織游戲對象,并且每個游戲對象可以擁有若干組件。所以整個游戲系統(tǒng)的實現(xiàn)必須遵守這種規(guī)范,在這種規(guī)范下為了符合軟件設計的高內聚、低耦合的原則,使用MVC模型設計了一套游戲的層次結構,這樣的好處是使游戲的結構清晰簡單,三層之間互相隔離、互不影響,日后功能的擴展方便。如圖3-3所示:圖3-3游戲層次結構圖 游戲系統(tǒng)分為三個層來設計,分別是: 視圖層:主要為加入到場景層次結構的游戲對象,這些對象常常是渲染對象或攝像機。 控制層:在主攝像機或者空對象中加入的管理腳本組件,這些腳本主要是針對對應的功能模塊的進行控制及與其他功能模塊進行通信,如界面管理類、網(wǎng)絡聯(lián)機管理類。 模型層:主要是在渲染對象中加入的邏輯腳本組件,這些腳本對游戲對象進行邏輯處理。車輛駕駛游戲的實現(xiàn)場景渲染實現(xiàn)考慮到游戲的需求,整個場景主要包括幾類渲染對象,如天空盒、水面、地形、外部導入的3D模型、投影、粒子系統(tǒng)等,如圖4-1所示:圖4-1游戲場景中的渲染對象下面主要介紹一些重要渲染模塊的具體實現(xiàn):天空盒所謂天空盒,就是用一個作為遠景貼圖的立方體。在立方體的前后左右上五個面貼上紋理(需要時底面也可以帖)。在簡單的天空盒實現(xiàn)中,只需要填寫好六個面的24個頂點,并設置立方體隨著視點的移動而移動,這樣就會給玩家?guī)硖炜帐窃跇O遠處的錯覺。但在較為復雜的應用中,還需要使用天空盒的紋理來生成CubeMap,并用之來做水面倒影、云影等特效的貼圖。圖4-2天空盒由六個面映射而成在Unity3D中對天空盒有很好的支持,開發(fā)人員只需要幾個簡單的步驟:1.創(chuàng)建一個材質;2.并設置Shader為Unity3D自帶的RenderFX->Skybox;3.為天空的各個面選擇貼圖;4.在RenderSetting中設置天空材質為前面創(chuàng)建的材質。圖4-3為實現(xiàn)的效果圖:圖4-3實現(xiàn)的天空效果水面水面的本質即按照流體規(guī)律動態(tài)更新頂點位置的網(wǎng)格,Unity3D中的自帶有水的對象,但為了使得水面具有更真實的表現(xiàn)力,還要為水面加入反射、折射等效果,這些效果主要是通過渲染到紋理(Render-to-Texture,RTT)來實現(xiàn)。渲染到紋理,簡單來說就是把當前場景的一部分或者全部渲染成一個可以使用的紋理上面,然后再另外一次渲染中把它當作普通的紋理使用。光穿過水面,但被水面改變傳播方向又返回水面之上叫做反射。如圖4-4所示,向量I被稱為入射光線(incidentray),從眼睛射到物體表面,當I到達表面的時候,它會根據(jù)表面的法向量N被從R方向反射出去,第二條光線是被反射光線(reflectedray),所以可以根據(jù)向量I和N用公式4-1計算被反射的向量R:圖4-4光線反射圖公式4-1折射與反射不同的是,光線雖然改變角度但依然進入水面,斯涅耳定律描述了兩種媒介之間的分界面光發(fā)生了什么,如圖4-5所示,折射向量被表示為T,代表“transmitted”。斯涅耳定律在數(shù)學上可以用公式4-2表示。圖4-5斯涅耳折射定律公式4-2具體代碼實現(xiàn)中,我們以折射為例,我們首先將要被折射的物體加入到一個層——m_RefractLatyer中,然后設置一個攝像機用于渲染這個層上的所有物體,得到紋理_RefractionTex并傳給shader,然后在水面進行紋理混合計算。以下為實現(xiàn)折射效果的關鍵代碼和水面效果截圖:代碼清單4-6折射RTT關鍵代碼圖4-7帶有折射、反射的水面效果地形[9]在Unity3D中通過高度圖來實現(xiàn)地形,高度圖實際上是一張矩形的灰度圖,在灰度模式中,顏色通過0~255來表示,0代表黑色,255代表白色,像素越亮代表地勢越高,255的像素代表此次頂點最高,反之亦然,所以像素灰度值和頂點的高度可以用公式4-3表示,其中L為像素的灰度值,yheight、y公式4-3y=程序在需要渲染地形時通過讀取這張圖片,并按照灰度生成頂點高度不一的矩形網(wǎng)格。這樣大大減少了游戲模型體積。Unity3D中的地形模塊不但可以導入高度圖,還可以用筆刷為繪制地形紋理、樹、草和巖石,所見即所得,大大減少了開發(fā)人員的工作量。圖4-8為小島的效果圖:圖4-8小島地形效果圖光照和投影在一般3D應用程序中,光照和投影是各自獨立的計算過程,光照既可以使用固定管線、也可以再Shader自定光照模型實現(xiàn)。投影則是一個雙過程的技術[10]:1.首先,場景以光源的位置為視點被渲染。每個渲染圖像的像素的深度值被記錄在一個“深度紋理”中,被稱為陰影貼圖。2.然后,場景從眼睛的位置渲染,但是用標準的投影紋理把陰影貼圖從燈的位置通過投影矩陣運算混合到場景中。在每個像素,深度采樣值(從被投影的深度紋理中)與片段到燈的距離進行比較。如果后者小,這意味著這個片段不是陰影,不需要和投影紋理進行混合。圖4-9舉例說明了陰影的深度比較。在圖的左邊,正要被著色的點P在陰影中,因為這個點的深度值(ZB)比記錄的陰影貼圖的深度值(ZA)大。相反,在圖的右邊顯示了點P的深度值與在陰影貼圖中記錄的值相同的情況。這意味著在在P和燈源之間沒有任何物體,因此P不再陰影中。圖4-9投影的深度比較對于靜態(tài)物體的投影渲染的第一過程計算,可以在游戲開發(fā)過程中進行。Unity內置的光照貼圖烘培工具是IlluminateLabs的Beast,其主要原理是對場景中所有靜態(tài)物體的光照和投影進行計算,并利用特殊的.exr光照貼圖格式用以記錄光照和投影兩種信息,在游戲運行時用光照貼圖對模型原有材質進行混合渲染,即可得到正確的光照和投影效果。這樣大大減少了游戲運行過程中計算量,提高游戲效率。如圖4-10所示,進行一些參數(shù)設置(實際上是設置光照模型和投影過程二的陰影紋理),選擇“BakeScene”即可為場景生成光照貼圖。圖4-10光照貼圖烘焙窗口場景物理仿真實現(xiàn)如前文提到,Unity3D內置對NvidiaPhysX支持,其實際工作就是封裝了一些游戲中常用的組件以及腳本中調用的類,只要將這些碰撞體組件賦予游戲對象,就被加入PhysX虛擬世界進行運算。下面主要介紹常用組件:剛體(Rigid):在PhysX的基本概念中,兩個碰撞體發(fā)生碰撞必須要求其中至少有一個剛體。所以對運動的物體要賦予剛體屬性,剛體可設置質量、重力計算、碰撞檢測頻率等屬性。網(wǎng)格碰撞體(MeshCollider):根據(jù)游戲玩法,玩家通過車身前部撞擊其他車的后部進行游戲,在車身前部和后部各加入一個網(wǎng)格碰撞體,網(wǎng)格碰撞體可通過網(wǎng)格數(shù)據(jù)定義凸體形狀,比起基本碰撞體更加精確。地形碰撞體(TerrainCollider):通過地形模塊生成的地形可以選擇加入地形碰撞體,就這樣就可以不需要定義網(wǎng)格數(shù)據(jù)來定義網(wǎng)格碰撞體,其本質就是根據(jù)高度圖生成的網(wǎng)格碰撞體。輪胎碰撞體(WheelCollider):汽車經(jīng)常在陡峭的地形上行走,如果將輪胎定義為一般碰撞體則容易造成碰撞而導致車身飛起,輪胎碰撞體具有阻尼彈性和摩擦力的屬性,不同類型的車輛可以使用不同的輪胎碰撞體參數(shù),模擬出各種效果。彈簧連接體(SpringJoint):物體之間如果通過連接有力的作用,可通過設置連接體來實現(xiàn)。彈簧連接體能夠模擬物體之間的阻尼作用。如圖4-11所示,場景中需要進行物理計算的主要有三種:地形、一些3D模型(如柵欄)和汽車,其中地形和3D模型為靜態(tài)物體,只要為其增加靜態(tài)碰撞體組件即可。而汽車的構造較為復雜,首先在游戲中前車身和后車身為不同的積分部位,因此要定義為兩個網(wǎng)格碰撞體,并且為了得到真實的物理效果,需要將輪胎定義為車輪碰撞體并通過彈簧連接體與車身相連,如圖4-12所示。圖4-11物理仿真模塊實現(xiàn)圖4-12汽車物理仿真的構造汽車動力學模擬進行了汽車的物理組件裝配之后,還要實現(xiàn)汽車動力學模型。由于汽車在駕駛過程中影響其運動情況的因素錯綜復雜,操縱機構對汽車的行駛存在著多輸入、多藕合、非線性的控制作用,而實時渲染游戲要求動力學仿真計算快速,要在精確度與計算速度之間折中,需要簡化動力學模型[11]。為了簡化模型,作如下假設:所有車輛都是剛體,不考慮多節(jié)車廂的情況。汽車在行駛過程中,因速度的變化受到引擎的驅動力和阻力(動摩擦力、空氣阻力),如果汽車在轉彎還會收到輪胎的側摩擦力,汽車行駛過程中的基本受力圖如4-13所示:圖4-13車輛行駛受力圖 假設汽車當前正在轉彎且速度為v,且由于轉彎輪胎和車身的z軸并不重合,速度v在輪胎x軸方向的分量為v.x,k為阻力系數(shù),根據(jù)公式4-4可得出汽車受得的阻力f和輪胎側摩擦力f側: 公式4-4 f=k× f 汽車當前引擎提供的驅動力決定于汽車當前的檔位,檔位由當前速度大小決定,不同的車輛有不同的檔位設計,為了控制汽車能達到的最大速度,使用二次線性增量法,vtop表示汽車能達到的最大速度,n表示該車當前的檔位,vn表示達到該檔位的最低速度,F(xiàn)n表示n檔位收到的驅動力,k為公式4-4中的阻力系數(shù),這樣,速度、檔位、驅動力之間關系可用公式4-5表示: 公式4-5 v v Fn F根據(jù)以上得出的汽車動力學模型,需要在Unity3D中通過腳本組件實現(xiàn),首先為汽車對象增加一個繼承自MonoBehavior的Car.js腳本,在其中重寫兩個更新函數(shù)Update()和FixedUpdate(),Update()函數(shù)在每幀繪制之前調用一次,F(xiàn)ixedUpdate()通過一個計時器定時調用,時間間隔可在工程中設置。然后在這兩個更新函數(shù)進行動力學計算。以下為兩個更新函數(shù)的代碼及各個函數(shù)的作用,其中的計算公式中使用了大量的常量因子,不同的汽車可配置不同的參數(shù)以產(chǎn)生逼真的效果:代碼清單4-14Car.js的更新函數(shù)GetInput():得到當前玩家的輸入,如前進、后退、左轉、右轉;Check_If_Car_Is_Flipped():判斷汽車是否被撞翻,如果是的話,使汽車被翻正;UpdateWheelGraphics():根據(jù)汽車瞬時速度旋轉輪胎;UpdateGear():根據(jù)汽車瞬時速度變換檔位;UpdateFriction():如果汽車在轉彎狀態(tài),輪胎會受到的側摩擦力,側摩擦力和瞬時速度的x軸分量的平方成正比,如公式4-4;UpdateDrag():計算當前受到的阻力,阻力和速度的平方成正比,如公式4-4;CalculateEnginePower():根據(jù)當前檔位計算引擎提供的動力,如公式4-5;ApplyThrottle():根據(jù)引擎動力使汽車剛體獲得向前力模擬油門效果;ApplySteering():根據(jù)引擎動力和玩家的轉向輸入使汽車剛體獲得側向力模擬轉彎效果。用戶圖形界面實現(xiàn)Unity3D的另一個便利就是強大的插件功能,開發(fā)人員可以定制自己功能的菜單欄選項、組件并注冊到編輯器中使用。這種設計方式產(chǎn)生了很多第三方插件,使用這些插件可以使開發(fā)人員更快速開發(fā)需要的功能。NGUI是Unity3D中最著名的界面插件,其提供了強大的界面組件和相應的類,下面主要介紹一些NGUI概念:UIRoot:任何一個場景中界面根節(jié)點,其中至少包括一個UICamera。UICamera:其本質是一個具有UICamera腳本組件的攝像機,腳本中封裝了對其子游戲對象的渲染等功能。Anchor:用于偏移子游戲對象的布局,如上、下、左、右、中。 Panel:NGUI中的窗口。 Button:按鈕元素,可執(zhí)行OnClick、OnPress、OnRelease等回調函數(shù) Label:標簽元素,用于顯示文字。 Atlas:為了節(jié)省內存中圖片和字體的占用量,NGUI可以將字體和小圖片生成一張大圖片,Atlas中保存小圖的坐標信息,可用于索引到小圖Sprite,如圖4-15所示:圖4-15左圖為一張Atlas部分截圖,右圖為一個Sprite的坐標索引 Sprite:其中有兩種特殊的類型,同樣起到減少資源占用量的目的。UISlicedSprite將Sprite分為九個切片,每個切片可自由縮放,適合制作邊框;UITiledSprite可以進行平鋪擴展,如圖4-16所示:圖4-16左圖為UISlicedSprite,右圖為UITiledSprite本游戲中要開發(fā)主要有兩類界面:一類是主菜單界面,例如玩家在啟動游戲后需要進入一個登陸界面,可以進行汽車選擇,游戲選項設置,進入競技場開始游戲等操作。另一類是HUD(HeadUpDisplay)界面,即游戲進行過程中的界面,這個界面需要在碰撞到其他車輛時進行“冒分”,以及顯示玩家當前游戲積分和排名等。前文已經(jīng)介紹了NGUI的一些基本概念,下圖4-17為登陸界面的層次結構,接下來就是布置界面元素的位置,以及實現(xiàn)相關回調函數(shù):圖4-17游戲登陸界面實現(xiàn)HUD的實現(xiàn)與主界面略有區(qū)別,由于要保證總是顯示最前,所以要較現(xiàn)有的3D場景之后渲染。Unity3D中會按照場景中攝像機深度值排列渲染順序,所以要將UICamera的深度值設置的比主攝像機大。圖4-18游戲HUD界面實現(xiàn)網(wǎng)絡聯(lián)機模塊實現(xiàn)要實現(xiàn)多人模式下的玩家對戰(zhàn),還需要加入網(wǎng)絡模塊,現(xiàn)有的個人計算機網(wǎng)絡主要通過套接字(socket)進行消息傳遞,套接字可以選擇兩種主要協(xié)議:傳輸控制協(xié)議(TransmissionControlProtocol,簡稱TCP)和用戶數(shù)據(jù)報協(xié)議(UserDatagramProtocol,簡稱UDP)。TCP是一種面向連接的、可靠的通信協(xié)議,UDP是一種面向無連接的傳輸層協(xié)議,更為快速但數(shù)據(jù)包可能丟失[12]。在游戲開發(fā)過程中會根據(jù)需要選擇不同的協(xié)議,如在局域網(wǎng)大廳中,顯示房間信息和用戶聊天都可以選用UDP,在需要實時保存的玩家信息(如裝備、財寶等)必須使用可靠的TCP傳輸。Unity3DRPC(RemoteProcedureCallProtocol)是Unity3D封裝的一套網(wǎng)絡應用層套件,跨越了傳輸層和應用層,使得聯(lián)網(wǎng)的服務器、客戶端之間可以用過RPC函數(shù)進行遠端函數(shù)調用,使得開發(fā)包括網(wǎng)絡游戲更加容易。其中可設置可靠(reliable)和不可靠(unreliable)兩種調用方式,分別對應于TCP和UDP。網(wǎng)絡的層次結構如圖4-19所示:圖4-19網(wǎng)絡傳輸層次圖根據(jù)游戲設計,減少玩家的繁瑣的操作,第一個進入游戲的玩家會自動成為房主,并定時用UDP方式在局域網(wǎng)中廣播自己的ip地址,后面進入游戲的玩家如果收到這個ip地址,就自動連接這個ip地址進入游戲。作為局域網(wǎng)游戲,汽車信息的更新是頻繁的,所以為了提高游戲效率,可以使用不可靠的RPC調用方式。游戲系統(tǒng)主要實現(xiàn)了NetworkManger.cs和NetworkHandle.cs兩個類,前者主要管理進入和退出房間的UDP邏輯和其他玩家的RPC網(wǎng)絡ID,后者實現(xiàn)了相應的RPC函數(shù),用于在對戰(zhàn)過程中,每個客戶端(包括房主)定時傳輸自己的位置、積分等信息。游戲展示與性能分析游戲展示圖5-1是游戲登陸界面,左邊可以進行選車,右邊介紹玩法。圖5-2是游戲選項設置。圖5-3為汽車被柵欄阻攔效果。圖5-4為成功撞擊其他車輛背部并搶奪其積分。圖5-1游戲登陸界面圖5-2游戲選項設置圖5-3汽車被柵欄阻擋而飛起圖5-4成功撞擊其他車輛背部性能分析《瘋狂碰碰車》的目標平臺是PC和移動平臺,所以選用了目前中端硬件配置的筆記本和手機分別進行了性能測試,筆記本選用的是LenovoIdeaPadY400N,手機選用的是小米2。機器的詳細配置如表5-1:表5-1測試設備配置表設備名LenovoIdeaPadY400N小米2操作系統(tǒng)Windows7MIUI(Android4.1)CPU型號i5-3230M高通APQ8064CPU核數(shù)雙核四核CPU頻率2.6GHz1.5GHzGPUGT750M(2GB)Adreno320運行內存4GB2GB分辨率1366*7681280*720如圖5-5所示,在LenovoY400N中CPU和GPU耗費時間基本相同,每幀總共耗時為10ms左右,平均幀率達到90fps,游戲完全流暢。圖5-5Y400N性能分析如圖5-6所示,在小米2中CPU平均每幀的計算時間為19.74ms左右,GPU

溫馨提示

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

評論

0/150

提交評論