畢業(yè)論文-基于Unity引擎的“瘋狂碰碰車”手游項(xiàng)目設(shè)計(jì)_第1頁
畢業(yè)論文-基于Unity引擎的“瘋狂碰碰車”手游項(xiàng)目設(shè)計(jì)_第2頁
畢業(yè)論文-基于Unity引擎的“瘋狂碰碰車”手游項(xiàng)目設(shè)計(jì)_第3頁
畢業(yè)論文-基于Unity引擎的“瘋狂碰碰車”手游項(xiàng)目設(shè)計(jì)_第4頁
畢業(yè)論文-基于Unity引擎的“瘋狂碰碰車”手游項(xiàng)目設(shè)計(jì)_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計(jì)論文題目:基于Unity引擎的“瘋狂碰碰車”手游項(xiàng)目設(shè)計(jì)姓名:學(xué)號:專業(yè)年級:分校: 2016年11月目錄HYPERLINK摘要 IHYPERLINK4.7程序架構(gòu) 30HYPERLINK\l"_第5章_游戲展示與性能分析"第5章游戲展示與性能分析 31HYPERLINK\l"_5.1_游戲展示"5.1游戲展示 32HYPERLINK\l"_5.2_性能分析"5.2性能分析 32HYPERLINK\l"_第6章_項(xiàng)目總結(jié)"結(jié)束語 33HYPERLINK\l"_致謝"致謝 34HYPERLINK\l"_參考文獻(xiàn)"參考文獻(xiàn) 35HYPERLINK\l"_第6章_項(xiàng)目總結(jié)"附錄 36緒論1.1研究背景和研究意義這幾年,中國經(jīng)濟(jì)以8%左右的速度持續(xù)平穩(wěn)的增長,而在剛剛過去的2015年中國游戲市場實(shí)際銷售收入602.8億元,同比增長率為35.1%,首次突破600億規(guī)模。游戲產(chǎn)業(yè)己經(jīng)成為經(jīng)濟(jì)市場中增長速度最快的熱點(diǎn),是眾所關(guān)注的焦點(diǎn)。游戲是文化創(chuàng)意產(chǎn)業(yè)里的一部分,創(chuàng)意經(jīng)濟(jì)是知識經(jīng)濟(jì)的核心內(nèi)容,更是其經(jīng)濟(jì)的重要表現(xiàn)形式,沒有創(chuàng)意就沒有新經(jīng)濟(jì)。游戲設(shè)計(jì)是文化藝術(shù)創(chuàng)意和商品生產(chǎn)的結(jié)合,游戲產(chǎn)業(yè)的發(fā)展在中國的經(jīng)濟(jì)發(fā)展中具有十分重要的意義。(1)有利于保護(hù)民族的文化傳統(tǒng)和價(jià)值觀,抵制文化入侵。(2)推動創(chuàng)意產(chǎn)業(yè)的快速發(fā)展,提升我國經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展水平。(3)提供健康快樂的大眾娛樂方式,提升消費(fèi)者的休閑體驗(yàn)感受。游戲的發(fā)展從表現(xiàn)方法上經(jīng)歷了2D游戲和3D游戲兩個階段。游戲設(shè)計(jì),特別是3D游戲開發(fā)綜合運(yùn)用了計(jì)算機(jī)圖形學(xué)、物理仿真和網(wǎng)絡(luò)通訊等技術(shù),并且移動平臺技術(shù)在這幾年得到迅猛發(fā)展,輕量級、微創(chuàng)新、時(shí)間碎片化一直是移動游戲的發(fā)展趨勢,如《憤怒的小鳥》、《頑皮鱷魚愛洗澡》、《神廟逃亡》的用戶數(shù)都已經(jīng)過億。論文通過一個簡單的“碰碰車”創(chuàng)意予以實(shí)現(xiàn),涵蓋了3D游戲涉及到的一些基本技術(shù),能深入理解這些領(lǐng)域的底層技術(shù)并熟練掌握成熟的引擎使用,對于將來開發(fā)具有自主知識產(chǎn)權(quán)的游戲提供了參考。1.2國內(nèi)外研究現(xiàn)狀國外的3D游戲起步在90年代初,美國的卡馬克的《重返德軍總部3D》是第一部3D第一人稱射擊游戲,由其開發(fā)的Doom引擎也成為最早3D游戲引擎。國內(nèi)首款自主研發(fā)的3D游戲始于2003年,到目前為止,國內(nèi)在3D游戲已經(jīng)有了很多的研究,但由于3D游戲開發(fā)的復(fù)雜性及經(jīng)濟(jì)效益的考慮,國內(nèi)只有屈指可數(shù)的互聯(lián)網(wǎng)公司擁有自主研發(fā)的3D游戲引擎,中小型公司還是使用國外較為成熟的游戲引擎和工具,如虛幻,Unity3D,寒霜。雖然近年來國內(nèi)涌現(xiàn)一些優(yōu)秀的3D網(wǎng)游諸如《劍俠情緣3》、《九陰真經(jīng)》,但一直無法像產(chǎn)出世界級的3D游戲大作,大部分游戲公司還是以代理國外優(yōu)秀產(chǎn)品為主,導(dǎo)致資金外流及本土文化缺失。隨著移動硬件設(shè)備的日益強(qiáng)大,移動平臺上的游戲也出現(xiàn)了驚人的增長,3D互動娛樂在手機(jī)領(lǐng)域的應(yīng)用也逐漸增加。而移動領(lǐng)域存在諸多的操作系統(tǒng),常用的有Android、WindowsMobile、iOS等,而在各個平臺上的移植和實(shí)現(xiàn)對于開發(fā)商來說是不經(jīng)濟(jì)的,而目前國外優(yōu)秀的成熟引擎已經(jīng)成功解決這類需求,最為突出的要數(shù)Unity3D引擎,Unity3D中使用虛擬機(jī)技術(shù)使游戲編譯結(jié)果獨(dú)立于平臺執(zhí)行。國內(nèi)對于跨平臺引擎技術(shù)的研究還處于起步階段,但熟練掌握和理解這些引擎的使用依然具有一定意義。1.3Unity引擎研究背景Unity3D是一個讓你輕松創(chuàng)作的多平臺的游戲開發(fā)工具,是一個全面整合的專業(yè)性游戲引擎。它是由丹麥Unity公司開發(fā)的游戲開發(fā)工具,具體的特性包含整合的編輯器、跨平臺發(fā)布、地形編輯、著色器、腳本、網(wǎng)絡(luò)、物理、版本控制等特性。通過Unity簡單的用戶見面,你可以完成任何工作。這些為你節(jié)省了大量的時(shí)間。然而對于一個商業(yè)化的游戲引擎來說,快速高效的完成類似的特效應(yīng)該是分內(nèi)之事。游戲引擎的初衷就是將游戲開發(fā)者的精力轉(zhuǎn)移到游戲的可玩性上來。1.4論文組織結(jié)構(gòu)論文按照從設(shè)計(jì)到實(shí)現(xiàn),從理論到應(yīng)用,主要圍繞一款基于Unity3D的小型的汽車駕駛游戲,對一些3D游戲設(shè)計(jì)的技術(shù)進(jìn)行相關(guān)的研究,并予以設(shè)計(jì)實(shí)現(xiàn)。本文共分為六章,各章節(jié)安排如下:第1章:緒論,闡述了論文的研究背景和意義、國內(nèi)外研究現(xiàn)狀以及本文主要研究內(nèi)容;第2章:介紹了3D游戲開發(fā)的一般技術(shù)框架,及相關(guān)的第三方引擎,主要有圖形渲染庫、物理引擎及Unity3D的概述;第3章:汽車駕駛游戲的創(chuàng)意以及游戲系統(tǒng)的整體設(shè)計(jì),并根據(jù)Unity3D框架規(guī)范設(shè)計(jì)了一種MVC層次結(jié)構(gòu);第4章:討論游戲中各模塊的技術(shù)研究和實(shí)現(xiàn)過程,主要的核心模塊是場景渲染和物理仿真;第5章:展示當(dāng)前的游戲并對效率、玩法等方面做一定分析;第2章3D游戲技術(shù)基礎(chǔ)2.13D圖形技術(shù)2.1.13D圖形庫簡介3D圖形庫被定義為顯卡與應(yīng)用程序直接的接口。編程人員只要調(diào)用3D圖形庫中的API函數(shù),從而與硬件的驅(qū)動程序溝通,啟動3D芯片內(nèi)強(qiáng)大的3D圖形處理功能,制作具有3D圖形效果的軟件。3D圖形庫的執(zhí)行具有非??焖俚奶攸c(diǎn),并且具有高度的可移植性,其中的API函數(shù)定義為獨(dú)立于任何程序設(shè)計(jì)語言的一組規(guī)范,在特定語言中的實(shí)現(xiàn)描述由國際標(biāo)準(zhǔn)化組織來制定。嚴(yán)格按照計(jì)算機(jī)圖形學(xué)原理設(shè)計(jì)而成,符合光學(xué)和視覺原理,編程人員只要用這些API函數(shù)定義點(diǎn)、線、面的三維特征,如位置坐標(biāo)、頂點(diǎn)顏色、法向向量、紋理坐標(biāo)等就可以創(chuàng)建極其逼真的3D圖像。許多三維演示系統(tǒng)都用3D圖形庫作為三維圖形生成和控制的編程接口。目前主要應(yīng)用的3D函數(shù)庫有DirectX和OpenGL。(1)DirectX是微軟公司專為PC游戲開發(fā)的API,與Windows操作系統(tǒng)兼容性好,可繞過圖形顯示接口(GDI)直接進(jìn)行支持該API的各種硬件的底層操作,大大提高了游戲的運(yùn)行速度,而且目前基本上是免費(fèi)使用的。由于要考慮與各方面的兼容性,DirectX用起來比較麻煩、在執(zhí)行效率上也未見得最優(yōu)。(2)OpenGL由SiliconGraphics公司開發(fā),能夠在Windows95、WindowsNT、Macos、Beos、OS/2、以及Unix上應(yīng)用的API。由于OpenGL起步較早,一直用于高檔圖形工作站,其3D圖形功能很強(qiáng),超過DirectX,能最大限度地發(fā)揮3D芯片的巨大潛力。在Windows中已經(jīng)全面支持DirectX和OpenGL。在OpenGL的1.2版中還增加了對3DNow標(biāo)準(zhǔn)的支持。2.1.23D圖形庫的渲染管線絕大多數(shù)3D圖形庫實(shí)現(xiàn)都有相似操作順序,一系列相關(guān)的處理階段叫做3D圖形的渲染管線。(1)基于頂點(diǎn)的操作與基本裝配。這個過程包括本地空間-世界空間-視圖空間-背面揀選,主要是根據(jù)編程人員設(shè)置的攝像機(jī)位置、視錐屬性和頂點(diǎn)索引對頂點(diǎn)數(shù)據(jù)進(jìn)行一系列的數(shù)學(xué)運(yùn)算,使3D圖形的形狀及位置得以正確顯示。(2)像素操作。該過程主要根據(jù)編程人員傳入顯卡的紋理及頂點(diǎn)的紋理坐標(biāo)以及光照信息進(jìn)行顏色計(jì)算、混合,并對線、面采用線性插值、二次線性插值等算法最終進(jìn)行出像素的顏色。這個過程的計(jì)算一般由顯卡固定管線的計(jì)算公式完成,如想得到更真實(shí)、更多樣的效果,可采用可編程管線技術(shù)實(shí)現(xiàn)。2.1.33D程序基本工作流程前面提到了調(diào)用3D圖形庫中的API函數(shù)來設(shè)計(jì)3D應(yīng)用程序,現(xiàn)在更為詳細(xì)的介紹這樣的應(yīng)用程序的一般工作流程。在程序主入口main函數(shù)中,首先調(diào)用ApplicationInitial函數(shù)進(jìn)行3D圖形庫的一些初始化工作,如通知顯卡存儲頂點(diǎn)、顏色、燈光、紋理等信息,接下來進(jìn)入主循環(huán)不斷調(diào)用ApplicationUpdate函數(shù),ApplicationUpdate調(diào)用每一個渲染物體的ObjectUpdate函數(shù),更新其在顯存中的信息,并通知顯存進(jìn)行一次渲染管線流動,這樣新的一幀3D圖形就被渲染出來并產(chǎn)生動畫。最后在應(yīng)用程序結(jié)束時(shí)調(diào)用ApplicationDestory來進(jìn)行清理工作。當(dāng)然,復(fù)雜的3D應(yīng)用框架還會利用多線程技術(shù)來處理邏輯運(yùn)算和事件回調(diào)等內(nèi)容。2.2物理仿真技術(shù)PhysX2.2.1物理引擎簡介在游戲這項(xiàng)綜合應(yīng)用中中,除了華麗的畫面渲染外,作為表現(xiàn)虛擬世界系統(tǒng)內(nèi)在物理規(guī)律的計(jì)算是必不可少的。當(dāng)被模擬的剛體的運(yùn)動比較簡單,可以在一定程度上通過編程或編寫腳本來實(shí)現(xiàn),如簡單的加速和減速牛頓物理運(yùn)動。但當(dāng)模擬比較復(fù)雜的物體的碰撞、滾動、滑動或者彈跳的時(shí)候,通過編寫底層算法會造成工程延誤,這顯然不符合軟件工程的思想。成熟的物理引擎能夠允許更復(fù)雜的物理模擬,像球形關(guān)節(jié)、輪子、氣缸或者鉸鏈,有些也支持非剛性體的物理屬性,比如流體和布料。物理引擎接受的輸入是由外界調(diào)用模塊傳遞過來的場景信息以及場景中物體的位置信息。根據(jù)調(diào)用模塊的不同,可能輸出三種計(jì)算結(jié)果:場景與物體以及物體之間是否發(fā)生碰撞、碰撞發(fā)生的具體位置以及發(fā)生碰撞后物體的具體位置,并將計(jì)算結(jié)果傳送給調(diào)用模塊。2.2.2物理引擎基本架構(gòu)物理引擎一般分為兩個重要部分,即碰撞檢測和物理學(xué)世界。碰撞檢測模塊是物理引擎的核心模塊,建立在物理學(xué)世界的基礎(chǔ)上的。其由初步碰撞檢測、精確碰撞檢測和精確求交三個基本模塊組成。在初始化階段,碰撞檢測模塊給虛擬世界每個物體建立包圍盒,比較常用的包圍盒算法有AABB算法和OBB算法。逐步求精階段將整個虛擬世界進(jìn)行空間劃分,主要用到數(shù)據(jù)結(jié)構(gòu)有八叉樹、k-d樹和BSP樹等,通過自頂向下的層次結(jié)構(gòu)不斷判斷物體是否可能發(fā)生碰撞。最后再精確求交模塊中使用凸體算法和射線檢測算法得到精確的碰撞信息。物理學(xué)世界模塊,是現(xiàn)實(shí)世界的抽象模型。物理學(xué)世界包含兩個部分,一個是剛體物理學(xué)世界,一個是柔體物理學(xué)世界。在力的作用下,體積和形狀都不發(fā)生改變的物體稱作剛體。剛體按照其運(yùn)動特征可以分為平動、定軸轉(zhuǎn)動、平面運(yùn)動、定點(diǎn)運(yùn)動和一般運(yùn)動等形式。在一般情況下,運(yùn)動剛體上各點(diǎn)的軌跡、速度和加速度是各不相同的,但彼此之間存在著一定的關(guān)系。體積和形狀在力的作用下能夠發(fā)生變化的物體稱作柔體,如流體、布料等。因此,物理學(xué)世界的模塊結(jié)構(gòu)如2.2.3Havok和PhysX的比較物理引擎中需要大量的計(jì)算,并且不同物理引擎針對特定顯卡有3D加速功能。因此,開發(fā)3D游戲前選擇一款合適的物理引擎是及其重要的,否則會極大影響游戲的性能。目前,在游戲市場占重要地位的有Intel的Havok和Nvidia的PhysX。Havok,全稱為HavokGameDynamicsSDK,譯作Havok游戲動力開發(fā)包,主要分為Physics、FX、Animation、Behavior、Cloth、Destruction、AI幾大組件。Havok成立于1998年,總部位于愛爾蘭首都都柏林。引擎基于C/C++語言而成,2000年在游戲開發(fā)者大會上發(fā)布了Havok1.0,最新版本為5.5,2007年9月,Intel宣布收購Havok。在全平臺上,共有353種游戲使用Havok引擎,超過了PhysX的309種,使用Havok的著名游戲有:《極品飛車:亡命天涯》、《星際爭霸2》、《暗黑破壞神3》、《上古卷軸4》等。PhysX物理運(yùn)算引擎由五名年輕的技術(shù)人員開發(fā),他們成立了AGEIA公司。由于PhysX物理引擎在設(shè)計(jì)上就并不適合用CPU去計(jì)算,因此AGEIA公司還為PhysX引擎設(shè)計(jì)了專門的運(yùn)算硬件,PhysX物理加速卡,其中的運(yùn)算核心被稱為PPU(PhysicsprocessingUnit)。2008年,Nvdia收購了AGEIA,物理加速卡停止開發(fā),而是將PhysX物理加速功能移植到NvdiaGPU中,用戶不必額外購買PhysX物理加速卡就能享受到PhysX物理加速功能。在PC平臺上,共有269種游戲采用PhysX引擎,而Havok為163種。Havok和PhysX在各方面的比較具體如表2-1所示。表2-1Havok和PhysX對比表物理引擎HavokPhysX物理加速多線程加速只支持NvdiaGPU加速執(zhí)行效率快略遜一籌跨平臺性全平臺全平臺是否開源是否游戲引擎集成寒霜Unity3D主要游戲平臺Wii、Xbox360、PS3、PC手游2.3汽車駕駛模擬技術(shù)這是一種利用汽車3D模型,材質(zhì)和貼圖創(chuàng)建一個碰碰車對象,通過C#腳本語言編程,來達(dá)到控制汽車對象的效果,模擬出玩家駕駛游戲中碰碰車的技術(shù)。2.3.1汽車加速控制模擬通過按下鍵盤上W、S可以控制汽車后車輪的轉(zhuǎn)動,同時(shí)賦予汽車對象一個加速度,并通過計(jì)算位移汽車模型的位置,來達(dá)到汽車前進(jìn)的效果。汽車前進(jìn)的程序控制代碼:floatv=Input.GetAxis("Vertical"); flWheelCollider.motorTorque=v*MotorTorque; frWheelCollider.motorTorque=v*MotorTorque;2.3.2汽車轉(zhuǎn)彎控制模擬當(dāng)啟動汽車后,通過按下鍵盤上A、D可以控制汽車前車輪的轉(zhuǎn)向,在汽車前行或者停下時(shí)通過車輪的轉(zhuǎn)向控制汽車的行駛方向。汽車轉(zhuǎn)向的程序控制代碼:myCar_FrontWheels.Find("FrontWheels_Left").Rotate(tempWheel-TurnDirect*speedIn,0,0);myCar_FrontWheels.Find("FrontWheels_Right").Rotate(temp-WheelTurnDirect*speedIn,0,0);2.3.3儀表盤模擬儀表盤主要是車速顯示、油門顯示和方向盤的角度顯示,油門顯示的是在按下油門的時(shí)候油門的大小,長按W則速度加快,當(dāng)按下剎車鍵的時(shí)候,油門隨之遞減。方向顯示的是方向盤的轉(zhuǎn)動角度,在轉(zhuǎn)動方向盤的時(shí)候,車輪會跟著一起轉(zhuǎn)動。2.4場景加載切換技術(shù)Unity官方提供了4種加載場景(scene)的方法,分別是:

Application.LoadLevel();同步加載

Application.LoadLevelAsync();異步加載

Application.LoadLevelAddictive();同步附加式加載

Application.LoadLevelAddictiveAsync();異步附加式加載下面對這四種方法進(jìn)行簡要的介紹和分析:

同步加載:假設(shè)當(dāng)前場景為A,我們要切換到場景B,unity會在切換場景的時(shí)候?qū)鼍癇中的所有內(nèi)容(場景B中所有的靜態(tài)物體,不包括后續(xù)代碼中Instantiate實(shí)例化的物體)都加載到內(nèi)存中,然后銷毀A,顯示B。由于加載B是同步進(jìn)行的(也就是在一個線程中),所以當(dāng)B場景較大的時(shí)候執(zhí)行此方法會感覺到卡頓。

異步加載:這個與第一種情況基本一樣,唯一的區(qū)別是加載B的過程是異步的(也就是加載新場景的行為是在一個后臺線程中進(jìn)行的,不影響主線程的運(yùn)行),這樣在加載B的時(shí)候當(dāng)前場景A不受影響,可以繼續(xù)運(yùn)行,所以即使場景B很大也不會感覺到卡頓。

同步附加式加載:假設(shè)當(dāng)前場景是A,我們要加載場景B,unity在加載B的時(shí)候不會銷毀A,也就是說加載結(jié)束之后A和B將同時(shí)存在,這個適合于世界地圖比較大的時(shí)候,根據(jù)人走到的位置來動態(tài)的加載世界地圖中的不同部分。當(dāng)然前提是將世界地圖做成多個不同的scene文件。

異步附加式加:這種情況與上一種基本一樣,區(qū)別仍然在于加載B的過程是在一個后臺線程中異步進(jìn)行的。2.5C#腳本語言編程技術(shù)C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言。它在繼承C和C++強(qiáng)大功能的同時(shí)去掉了一些它們的復(fù)雜特性(例如沒有宏以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。C#是面向?qū)ο蟮木幊陶Z言。它使得C++程序員可以高效的開發(fā)程序,且因可調(diào)用由C/C++編寫的本機(jī)原生函數(shù),因此絕不損失C/C++原有的強(qiáng)大的功能。因?yàn)檫@種繼承關(guān)系,C#與C/C++具有極大的相似性,熟悉類似語言的開發(fā)者可以很快的轉(zhuǎn)向C#。2.6跨平臺手機(jī)游戲發(fā)布技術(shù)2.6.1發(fā)布Android使用Unity3D發(fā)布Android項(xiàng)目需要Java的SDK和Android的SDK運(yùn)行環(huán)境。在安裝完Java的SDK之后要注意Java環(huán)境變量的配置。在配置完成的Java的JDK和Android的JDK之后,還需要在Unity3D中對AndroidSDK進(jìn)行定位,完成Unity3D環(huán)境的配置。運(yùn)行Unity3D之后,點(diǎn)擊菜單欄中的Edit-Preferences,在AndroidSDKLocation選項(xiàng)里定位AndroidSDK。首選項(xiàng)里面的參數(shù)設(shè)置具體如圖2-1首選項(xiàng)設(shè)置面板所示。2-1首選項(xiàng)設(shè)置面板圖當(dāng)完成環(huán)境配置之后就可以發(fā)布Android游戲了。Unity3D的游戲發(fā)布是以場景為單位,通過加入需要發(fā)布的不同場景,然后選擇需要發(fā)布的平臺就可以進(jìn)行發(fā)布。發(fā)布Android的游戲界面具體如圖2-2Android發(fā)布面板圖。2-2Android發(fā)布面板圖2.6.2發(fā)布Ios在Unity3D上發(fā)布Ios時(shí),需要設(shè)置好PlayerSettings選項(xiàng)。首先確保機(jī)器中裝Xcode,IOS設(shè)備連接在電腦中,然后選中IOS設(shè)備,單機(jī)BuildandRun這時(shí)候Unity3D就開始導(dǎo)出這個游戲項(xiàng)目了。導(dǎo)出成功后自動打開Xcode并且運(yùn)行導(dǎo)出的這個項(xiàng)目。發(fā)布Ios的游戲界面具體如圖2-3Ios發(fā)布面板圖。2-3Ios發(fā)布面板圖2.7Unity3D引擎介紹2.7.1Unity3D簡介Unity3D是由UnityTechnologies開發(fā)的一款全面整合的專業(yè)游戲引擎,其具有的功能使得開發(fā)人員可專注于游戲的設(shè)計(jì)而忽略底層的技術(shù)實(shí)現(xiàn),達(dá)到快速開發(fā)的目的。Unity類似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件其編輯器運(yùn)行在Windows和MacOSX下。其主要的特色有:圖形動力:內(nèi)部封裝了DirectX和OpenGL圖形渲染庫,并附帶一些常用的渲染組件及著色器腳本。物理仿真:Unity3d不但整合了NvidiaPhysX物理引擎,并在其基礎(chǔ)上封裝了游戲中常會用到的物理組件,如碰撞體、連接體等??缙脚_性:可發(fā)布游戲至Windows、Mac、iOS、Android、Xbox、Wii或PS3平臺,也可以利用Unitywebplayer或者Flash插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽。資源商城:開發(fā)人員可在資源商城中購買其他人開發(fā)的資源(代碼、模型等),進(jìn)行高效復(fù)用。資源服務(wù)器:Unity資源服務(wù)器是一個附加的版本控制的產(chǎn)品,但比起SVN更適合游戲團(tuán)隊(duì)中不同職位的人員共同使用(程序、策劃、美術(shù))。性能分析器:引擎中自帶一個Profiler分析器,開發(fā)人員可在編輯器或者設(shè)備連線進(jìn)行性能分析CPU和GPU不同階段的效率。2.7.2Unity3D基本概念完整的Unity3d程序是由若干個場景(Scene)組合起來的,每個場景中又包含有許多游戲?qū)ο螅℅ameObject),每個對象可以具有若干組件(Component),其中的繼承自MonoBehavior的腳本組件進(jìn)行初始化、更新等操作,而在場景所看到的內(nèi)容是由攝像頭(Camera)來呈現(xiàn)并控制的。場景(Scene):場景是Unity3D程序的基本組成單位,任何一個Unity3D程序都是由若干場景組合而成,程序通過腳本在這些場景之間跳轉(zhuǎn)。場景通過場景圖的形式組織,場景圖實(shí)際上是一種樹形結(jié)構(gòu),其中每個節(jié)點(diǎn)就是一個游戲?qū)ο?。對象與對象之間存在父子關(guān)系,即當(dāng)父級對象移動、旋轉(zhuǎn)、縮放時(shí),子級對象也跟著一起變換。游戲?qū)ο螅℅ameObject):在場景中按照場景圖形式組織,場景圖實(shí)際上是一種樹形結(jié)構(gòu)。樹形層次結(jié)構(gòu)中的節(jié)點(diǎn),加入的特定組件后就成了有實(shí)際功能的對象,如可渲染網(wǎng)格、攝像機(jī)、光源等,游戲?qū)ο罂梢源虬?prefab格式的文件方便復(fù)用。組件(Component):組件可以是網(wǎng)格(Mesh)、光源(Light)、攝像機(jī)(Camera)、粒子系統(tǒng)(Particle)、物理碰撞體(Collider)、布料(Cloth)、連接體(Joint)、聲音(Audio)、動畫(Animation)以及最重要的腳本(Script)。Unity3D的設(shè)計(jì)是以面向?qū)ο罄碚摓榛A(chǔ),Unity3D支持C#、JavaScript和Boo三種腳本語言,如果對象繼承自MonoBehavior腳本對象,生命周期將交給Unity3D來管理。第3章游戲總體設(shè)計(jì)3.1游戲創(chuàng)意隨著移動硬件設(shè)備的日益強(qiáng)大,并且移動平臺技術(shù)在這幾年得到迅猛發(fā)展,移動平臺上的游戲也出現(xiàn)了驚人的增長,輕量級、微創(chuàng)新、時(shí)間碎片化一直是移動游戲的發(fā)展趨勢?!稇嵟男▲B》、《頑皮鱷魚愛洗澡》等幾款創(chuàng)意游戲都得到了巨大的成功,這些游戲的共同特點(diǎn)有:1.操作簡單游戲目的簡單明確。不論是高級游戲玩家還是不常玩游戲的用戶群,很容易知道如何操作并理解游戲的目的。如《憤怒的小鳥》只需一只手指調(diào)整彈弓的角度和力度最終將豬擊飛,《頑皮鱷魚愛洗澡》只要用手指刮開泥土將水引導(dǎo)進(jìn)鱷魚的浴缸。2.真實(shí)的物理規(guī)律游戲中充分考慮到現(xiàn)實(shí)生活中的物理規(guī)律,如《憤怒的小鳥》中飛行的速度、重力的考慮,《頑皮鱷魚愛洗澡》中水流的流體走向。3.多樣化的設(shè)計(jì)別出心裁的設(shè)計(jì)不僅使玩家產(chǎn)生興趣繼續(xù)挑戰(zhàn),也會更加開動玩家的腦筋。如《憤怒的小鳥》中小鳥不同的技能、會蕩秋千的豬、冰雪的場景和會引燃的炸藥,《頑皮鱷魚愛洗澡》中清水、污水、泥石流產(chǎn)生的不同效果,以及風(fēng)扇、噴槍的設(shè)計(jì)等。3.1.1游戲策劃按照這些思路產(chǎn)生了將游樂場中“碰碰車”這一游樂項(xiàng)目搬上有游戲的想法,“碰碰車游戲”同樣遵從以上三個特點(diǎn),下面是簡單的游戲策劃。游戲名稱:《瘋狂碰碰車》游戲類型:3D休閑益智類游戲游戲平臺:PC、Android、iOS游戲模式:多人聯(lián)機(jī)模式,單人AI練習(xí)模式3.1.2游戲玩法玩家通過操作車輛,在競技場中與其他玩家操作的車輛進(jìn)行娛樂。玩家應(yīng)該盡量操作車輛的前部去撞其他車輛的背部,這樣可以搶奪對方的游戲積分,同樣的,應(yīng)該通過躲避盡量避免自己的背部遭到襲擊。達(dá)到游戲時(shí)間后進(jìn)行積分結(jié)算,確定本場游戲排名。游戲操作:前、后、左、右,在移動設(shè)備上可映射為重力感應(yīng)和滑動操作。游戲可玩性:(1)多樣的車輛,不同車輛具有不同的外形、速度以及技能等屬性,如加速快的豪華跑車、碰撞效果驚人的火車頭等,玩家通過勝過獲得游戲幣來購買夢寐以求的車輛。(2)多樣的地形,可以繪制不同地域風(fēng)情的競技場,并且不同的競技場應(yīng)該有不同的物理屬性增加車輛駕駛?cè)の?,如冰川、泥濘的森林,以及適合車輛躲避的樹、草、坡度等布置。(3)真實(shí)的物理仿真,如前兩個特性所列,不同的設(shè)計(jì)會帶來豐富的物理仿真效果。3.2游戲功能設(shè)計(jì)3.2.1游戲總體功能設(shè)計(jì)一個游戲包含多個場景,玩家根據(jù)當(dāng)前的游戲進(jìn)度和選項(xiàng)進(jìn)入不同賽道。而游戲模塊為游戲提供了一些必須用到的功能,這些功能,都是完全獨(dú)立與所有的場景存在的,它們并不知道到底有多少關(guān)卡,關(guān)卡的內(nèi)容是什么,它們的主要工作,就是與游戲的控制單元進(jìn)行信息的交換,從而支持游戲的進(jìn)行。

游戲框架設(shè)計(jì)必須符合游戲的玩法需求和所使用的工具,不同于大型的MMO(MassiveMultiplayerOn-Line)Game,《瘋狂碰碰車》沒有復(fù)雜的游戲系統(tǒng),更加側(cè)重于游戲可玩性的設(shè)計(jì),并且由于使用Unity3D引擎,省去了許多底層模塊的設(shè)計(jì),其中核心的模塊為:場景系統(tǒng),車輛管理系統(tǒng),比賽系統(tǒng),賽車控制系統(tǒng)。具體如圖3-1游戲總體功能設(shè)計(jì)圖。瘋狂碰碰車瘋狂碰碰車賽車控制系統(tǒng)比賽系統(tǒng)車輛管理系統(tǒng)場景系統(tǒng)賽車控制系統(tǒng)比賽系統(tǒng)車輛管理系統(tǒng)場景系統(tǒng)加速選擇賽道選擇車輛天空加速選擇賽道選擇車輛天空轉(zhuǎn)彎剎車車輛進(jìn)場車輛個性化地形轉(zhuǎn)彎剎車車輛進(jìn)場車輛個性化地形倒計(jì)時(shí)玩家車庫水面倒計(jì)時(shí)玩家車庫水面漂移漂移賽車追逐賽車商城場景光照賽車追逐賽車商城場景光照比賽終點(diǎn)檢測比賽終點(diǎn)檢測比賽結(jié)算比賽結(jié)算圖3-1游戲總體功能設(shè)計(jì)圖3.2.2各模塊功能設(shè)計(jì)1.場景系統(tǒng)設(shè)計(jì)1.功能:場景系統(tǒng)主要功能是在玩家選擇一個場景后,進(jìn)入比賽場地,展現(xiàn)給玩家一個3D賽道場景。是一個給玩家展示游戲世界的模塊。賽道場景包括游戲場景,游戲特效,以及UI界面的顯示。游戲場景主要設(shè)計(jì):場景中需要包括天空、地形、水面。其中路面賽道環(huán)繞整個地形一圈,分別標(biāo)注起點(diǎn)和重點(diǎn)標(biāo)識建筑。要求場景中包含大橋,水面從大橋下流過,使得地形更加豐富,營造出玩家在一個龐大的賽道中進(jìn)行比賽的效果。(2)游戲特效主要設(shè)計(jì):太陽光照、游戲特效。需要陽光照射到比賽場景中,背光的地方如隧道、山峰背后燈光要變暗。當(dāng)玩家到達(dá)終點(diǎn)需要特效。(3)UI界面顯示設(shè)計(jì):記分牌、加速指示器、時(shí)間計(jì)時(shí)器等。記分牌用來記錄玩家的目前的分。加速指示器用來顯示目前玩家碰碰車的速度。時(shí)間計(jì)時(shí)器用來顯示玩家目前的游戲時(shí)間。2.車輛管理系統(tǒng)設(shè)計(jì)2.功能:車輛管理系統(tǒng)主要功能是讓玩家可以隨心所欲的選擇一款自己喜歡的賽車進(jìn)行比賽,并對賽車可以進(jìn)行特性化的裝扮,配置。車輛管理系統(tǒng)包括游戲中的:(1)玩家車庫:玩家可以在車庫中選擇一款自己喜愛的賽車。(2)賽車加工廠:玩家可以在加工廠里,為自己的愛車做個性化的修改。(3)賽車商城:玩家可以在商城中,購買自己喜愛的賽車,配件,皮膚。4.比賽系統(tǒng)設(shè)計(jì)4.功能:比賽系統(tǒng)主要功能是讓玩家可以與其他賽車在賽道上進(jìn)行比賽。比賽系統(tǒng)包括:選擇賽道:玩家進(jìn)入賽場前先選擇一個自己喜歡的賽道。車輛進(jìn)場:所有車輛依次安排到出發(fā)點(diǎn)排列。倒計(jì)時(shí):倒計(jì)時(shí)5秒后,玩家車輛可以受到玩家控制。碰碰車車追逐賽:碰碰車之間可以超越,碰撞,目標(biāo)是以最快的速度到達(dá)終點(diǎn)。當(dāng)碰撞強(qiáng)度過大會導(dǎo)致碰碰車側(cè)翻。終點(diǎn)檢測:到達(dá)終點(diǎn)后游戲結(jié)束。比賽結(jié)算:對本場比賽的賽車排名,用時(shí),得分進(jìn)行一個詳細(xì)的結(jié)算。4.賽車控制系統(tǒng)設(shè)計(jì)4.功能:賽車控制系統(tǒng)的主要功能是讓玩家可以鎖心所欲的控制自己的賽車。賽車控制系統(tǒng)包括:加速:賽車輪胎加速轉(zhuǎn)動,加速行駛。剎車:汽車輪胎減速轉(zhuǎn)動,減速行駛。轉(zhuǎn)彎:賽車輪胎左右轉(zhuǎn)動,改變賽車方向。漂移:賽車尾部向賽車轉(zhuǎn)彎相反方向轉(zhuǎn)動,輪胎停止轉(zhuǎn)動3.3游戲流程結(jié)構(gòu)設(shè)計(jì)游戲流程內(nèi)容包括配置選擇賽車,選擇要進(jìn)行比賽的賽道場景,控制賽車進(jìn)行比賽,具體如圖3-2游戲流程結(jié)構(gòu)設(shè)計(jì)圖登錄游戲登錄游戲是否更換賽車 是否更換賽車選擇車輛選擇賽道是選擇車輛選擇賽道否進(jìn)入比賽場地進(jìn)入比賽場地比賽倒計(jì)時(shí)比賽倒計(jì)時(shí)比賽開始比賽開始控制賽車控制賽車是否到達(dá)終點(diǎn)是否到達(dá)終點(diǎn)是比賽結(jié)束比賽結(jié)束圖3-2游戲流程結(jié)構(gòu)設(shè)計(jì)圖游戲?qū)崿F(xiàn)4.1場景系統(tǒng)4.1.1天空所謂天空盒,就是用一個作為遠(yuǎn)景貼圖的立方體。在立方體的前后左右上五個面貼上紋理(需要時(shí)底面也可以帖)。在簡單的天空盒實(shí)現(xiàn)中,只需要填寫好六個面的24個頂點(diǎn),并設(shè)置立方體隨著視點(diǎn)的移動而移動,這樣就會給玩家?guī)硖炜帐窃跇O遠(yuǎn)處的錯覺。但在較為復(fù)雜的應(yīng)用中,還需要使用天空盒的紋理來生成CubeMap,并用之來做水面倒影、云影等特效的貼圖。在Unity3D中對天空盒有很好的支持,開發(fā)人員只需要幾個簡單的步驟:(1)創(chuàng)建一個材質(zhì);(2)并設(shè)置Shader為Unity3D自帶的RenderFX->Skybox;(3)為天空的各個面選擇貼圖;(4)在RenderSetting中設(shè)置天空材質(zhì)為前面創(chuàng)建的材質(zhì)。具體如圖4-1游戲天空圖。圖4-1游戲天空圖4.1.2地形在Unity3D中通過高度圖來實(shí)現(xiàn)地形,高度圖實(shí)際上是一張矩形的灰度圖,在灰度模式中,顏色通過0~255來表示,0代表黑色,255代表白色,像素越亮代表地勢越高,255的像素代表此次頂點(diǎn)最高,反之亦然,其中L為像素的灰度值。分別為Unity3D中定義的地形高度和地形最低點(diǎn),求得網(wǎng)格頂點(diǎn)的高度y。程序在需要渲染地形時(shí)通過讀取這張圖片,并按照灰度生成頂點(diǎn)高度不一的矩形網(wǎng)格。這樣大大減少了游戲模型體積。Unity3D中的地形模塊不但可以導(dǎo)入高度圖,還可以用筆刷為繪制地形紋理、樹、草和巖石,所見即所得,大大減少了開發(fā)人員的工作量。具體如圖4-2游戲小島地形圖。

圖4-2游戲小島地形圖4.1.3水面水面的本質(zhì)即按照流體規(guī)律動態(tài)更新頂點(diǎn)位置的網(wǎng)格,Unity3D中的自帶有水的對象,但為了使得水面具有更真實(shí)的表現(xiàn)力,還要為水面加入反射、折射等效果,這些效果主要是通過渲染到紋理(Render-to-Texture,RTT)來實(shí)現(xiàn)。渲染到紋理,簡單來說就是把當(dāng)前場景的一部分或者全部渲染成一個可以使用的紋理上面,然后再另外一次渲染中把它當(dāng)作普通的紋理使用。光穿過水面,但被水面改變傳播方向又返回水面之上叫做反射。向量I被稱為入射光線(incidentray),從眼睛射到物體表面,當(dāng)I到達(dá)表面的時(shí)候,它會根據(jù)表面的法向量N被從R方向反射出去,第二條光線是被反射光線(reflectedray),所以可以根據(jù)向量I和N用公式4-1計(jì)算被反射的向量R:折射與反射不同的是,光線雖然改變角度但依然進(jìn)入水面,斯涅耳定律描述了兩種媒介之間的分界面光發(fā)生了什么,具體代碼實(shí)現(xiàn)中,我們以折射為例,我們首先將要被折射的物體加入到一個層——m_RefractLatyer中,然后設(shè)置一個攝像機(jī)用于渲染這個層上的所有物體,得到紋理_RefractionTex并傳給shader,然后在水面進(jìn)行紋理混合計(jì)算。具體如圖4-3游戲水面圖。

4-3游戲水面圖

4.1.4光照在一般3D應(yīng)用程序中,光照和投影是各自獨(dú)立的計(jì)算過程,光照既可以使用固定管線、也可以再Shader自定光照模型實(shí)現(xiàn)。投影則是一個雙過程的技術(shù):(1)場景以光源的位置為視點(diǎn)被渲染。每個渲染圖像的像素的深度值被記錄在一個“深度紋理”中,被稱為陰影貼圖。(2)場景從眼睛的位置渲染,但是用標(biāo)準(zhǔn)的投影紋理把陰影貼圖從燈的位置通過投影矩陣運(yùn)算混合到場景中。在每個像素,深度采樣值(從被投影的深度紋理中)與片段到燈的距離進(jìn)行比較。如果后者小,這意味著這個片段不是陰影,不需要和投影紋理進(jìn)行混合。因?yàn)檫@個點(diǎn)的深度值(ZB)比記錄的陰影貼圖的深度值(ZA)大。相反,在圖的右邊顯示了點(diǎn)P的深度值與在陰影貼圖中記錄的值相同的情況。這意味著在在P和燈源之間沒有任何物體,因此P不再陰影中。對于靜態(tài)物體的投影渲染的第一過程計(jì)算,可以在游戲開發(fā)過程中進(jìn)行。Unity內(nèi)置的光照貼圖烘培工具是IlluminateLabs的Beast,其主要原理是對場景中所有靜態(tài)物體的光照和投影進(jìn)行計(jì)算,并利用特殊的.exr光照貼圖格式用以記錄光照和投影兩種信息,在游戲運(yùn)行時(shí)用光照貼圖對模型原有材質(zhì)進(jìn)行混合渲染,即可得到正確的光照和投影效果。這樣大大減少了游戲運(yùn)行過程中計(jì)算量,提高游戲效率。4.2車輛管理系統(tǒng)4.2.1顯示車輛數(shù)據(jù)在場景中新建一個GUIText,具體操作GameObject->CreateOther->GUIText。把GUIText里面的Text修改為CarNumber=0,F(xiàn)ontSize修改為30,Color修改為白色,F(xiàn)ont字體修改為BlitzkriegNF字體。具體如圖4-4GUIText參數(shù)設(shè)置圖。圖4-4GUIText參數(shù)設(shè)置圖4.2.2購買車輛操作判斷玩家是否購買車輛需要添加一個UGUI的Button組件。Button組件參數(shù)解釋:(1)Interactable(是否可用):勾選,按鈕可用,取消勾選,按鈕不可用,并進(jìn)入Disabled狀態(tài)。(2)Transition(過渡方式):ColorTint(顏色改變)SpriteSwap(圖片切換)Animation(執(zhí)行動畫)(后面有詳細(xì)介紹)(3)TargetGraphic(過渡效果作用目標(biāo)):可以是任一Graphic對象。(4)Navigation(按鈕導(dǎo)航):假如你現(xiàn)在有四個按鈕,當(dāng)你點(diǎn)擊第一個時(shí),第一個會保持選中狀態(tài),然后通過按鍵盤方向鍵,會導(dǎo)航將選中狀態(tài)切換到下一個按鈕上,例如你的第一個按鈕下方存在第二個按鈕,當(dāng)你選中第一個按方向鍵下時(shí),第一個按鈕的選中狀態(tài)取消,第二個按鈕進(jìn)入選中狀態(tài),前提是這些按鈕都開啟了導(dǎo)航功能。具體如圖4-5Button參數(shù)設(shè)置圖。圖4-5Button參數(shù)設(shè)置圖4.3物理模擬系統(tǒng)如前文提到,Unity3D內(nèi)置對NvidiaPhysX支持,其實(shí)際工作就是封裝了一些游戲中常用的組件以及腳本中調(diào)用的類,只要將這些碰撞體組件賦予游戲?qū)ο?,就被加入PhysX虛擬世界進(jìn)行運(yùn)算。下面主要介紹常用組件:剛體(Rigid):在PhysX的基本概念中,兩個碰撞體發(fā)生碰撞必須要求其中至少有一個剛體。所以對運(yùn)動的物體要賦予剛體屬性,剛體可設(shè)置質(zhì)量、重力計(jì)算、碰撞檢測頻率等屬性。網(wǎng)格碰撞體(MeshCollider):根據(jù)游戲玩法,玩家通過車身前部撞擊其他車的后部進(jìn)行游戲,在車身前部和后部各加入一個網(wǎng)格碰撞體,網(wǎng)格碰撞體可通過網(wǎng)格數(shù)據(jù)定義凸體形狀,比起基本碰撞體更加精確。地形碰撞體(TerrainCollider):通過地形模塊生成的地形可以選擇加入地形碰撞體,就這樣就可以不需要定義網(wǎng)格數(shù)據(jù)來定義網(wǎng)格碰撞體,其本質(zhì)就是根據(jù)高度圖生成的網(wǎng)格碰撞體。輪胎碰撞體(WheelCollider):汽車經(jīng)常在陡峭的地形上行走,如果將輪胎定義為一般碰撞體則容易造成碰撞而導(dǎo)致車身飛起,輪胎碰撞體具有阻尼彈性和摩擦力的屬性,不同類型的車輛可以使用不同的輪胎碰撞體參數(shù),模擬出各種效果。彈簧連接體(SpringJoint):物體之間如果通過連接有力的作用,可通過設(shè)置連接體來實(shí)現(xiàn)。彈簧連接體能夠模擬物體之間的阻尼作用。場景中需要進(jìn)行物理計(jì)算的主要有三種:地形、一些3D模型(如柵欄)和汽車,其中地形和3D模型為靜態(tài)物體,只要為其增加靜態(tài)碰撞體組件即可。而汽車的構(gòu)造較為復(fù)雜,首先在游戲中前車身和后車身為不同的積分部位,因此要定義為兩個網(wǎng)格碰撞體,并且為了得到真實(shí)的物理效果,需要將輪胎定義為車輪碰撞體并通過彈簧連接體與車身相連。具體如圖4-6物理仿真結(jié)構(gòu)圖。圖4-6物理仿真結(jié)構(gòu)圖依次打開GameObject->CreateEmpty,創(chuàng)建一個空游戲?qū)ο?,然后選擇該對象,打開菜單欄中的Component->Physics->Rigidbody,創(chuàng)建一個剛體。具體如圖4-7創(chuàng)建剛體示意圖。:圖4-7創(chuàng)建剛體示意圖調(diào)整剛體組件屬性面板,具體如圖4-8剛體組件屬性面板圖。圖4-8剛體組件屬性面板圖最后添加BoxCollider盒碰撞體,盒碰撞體是一個立方體外形的基本碰撞體,該碰撞體可以調(diào)整為不同大小的長方體,把碰撞體添加到碰碰車模型上,使得碰碰車擁有了模擬碰撞的屬性。具體如圖4-9BoxCollider盒碰撞體屬性面板圖。圖4-9BoxCollider盒碰撞體屬性面板圖4.4碰碰車控制系統(tǒng)進(jìn)行了汽車的物理組件裝配之后,還要實(shí)現(xiàn)汽車動力學(xué)模型。由于汽車在駕駛過程中影響其運(yùn)動情況的因素錯綜復(fù)雜,操縱機(jī)構(gòu)對汽車的行駛存在著多輸入、多藕合、非線性的控制作用,而實(shí)時(shí)渲染游戲要求動力學(xué)仿真計(jì)算快速,要在精確度與計(jì)算速度之間折中,需要簡化動力學(xué)模型。為了簡化模型,作如下假設(shè):所有車輛都是剛體,不考慮多節(jié)車廂的情況。汽車在行駛過程中,因速度的變化受到引擎的驅(qū)動力和阻力(動摩擦力、空氣阻力),如果汽車在轉(zhuǎn)彎還會收到輪胎的側(cè)摩擦力。假設(shè)汽車當(dāng)前正在轉(zhuǎn)彎且速度為v,且由于轉(zhuǎn)彎輪胎和車身的z軸并不重合,速度v在輪胎x軸方向的分量為v.x,k為阻力系數(shù)。汽車當(dāng)前引擎提供的驅(qū)動力決定于汽車當(dāng)前的檔位,檔位由當(dāng)前速度大小決定,不同的車輛有不同的檔位設(shè)計(jì),為了控制汽車能達(dá)到的最大速度,使用二次線性增量法,vtop表示汽車能達(dá)到的最大速度,n表示該車當(dāng)前的檔位,vn表示達(dá)到該檔位的最低速度,F(xiàn)n表示n檔位收到的驅(qū)動力。根據(jù)以上得出的汽車動力學(xué)模型,需要在Unity3D中通過腳本組件實(shí)現(xiàn),首先為汽車對象增加一個繼承自MonoBehavior的Car.js腳本,在其中重寫兩個更新函數(shù)Update()和FixedUpdate(),Update()函數(shù)在每幀繪制之前調(diào)用一次,F(xiàn)ixedUpdate()通過一個計(jì)時(shí)器定時(shí)調(diào)用,時(shí)間間隔可在工程中設(shè)置。然后在這兩個更新函數(shù)進(jìn)行動力學(xué)計(jì)算。以下為兩個更新函數(shù)的代碼及各個函數(shù)的作用,其中的計(jì)算公式中使用了大量的常量因子,不同的汽車可配置不同的參數(shù)以產(chǎn)生逼真的效果。GetInput():得到當(dāng)前玩家的輸入,如前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn);Check_If_Car_Is_Flipped():判斷汽車是否被撞翻,如果是的話,使汽車被翻正;UpdateWheelGraphics():根據(jù)汽車瞬時(shí)速度旋轉(zhuǎn)輪胎;UpdateGear():根據(jù)汽車瞬時(shí)速度變換檔位;UpdateFriction():如果汽車在轉(zhuǎn)彎狀態(tài),輪胎會受到的側(cè)摩擦力,側(cè)摩擦力和瞬時(shí)速度的x軸分量的平方成正比,如公式4-4;UpdateDrag():計(jì)算當(dāng)前受到的阻力,阻力和速度的平方成正比,如公式4-4;CalculateEnginePower():根據(jù)當(dāng)前檔位計(jì)算引擎提供的動力,如公式4-5;ApplyThrottle():根據(jù)引擎動力使汽車剛體獲得向前力模擬油門效果;ApplySteering():根據(jù)引擎動力和玩家的轉(zhuǎn)向輸入使汽車剛體獲得側(cè)向力模擬轉(zhuǎn)彎效果。4.5UI界面系統(tǒng)Unity3D的另一個便利就是強(qiáng)大的插件功能,開發(fā)人員可以定制自己功能的菜單欄選項(xiàng)、組件并注冊到編輯器中使用。這種設(shè)計(jì)方式產(chǎn)生了很多第三方插件,使用這些插件可以使開發(fā)人員更快速開發(fā)需要的功能。

NGUI是Unity3D中最著名的界面插件,其提供了強(qiáng)大的界面組件和相應(yīng)的類,下面主要介紹一些NGUI概念:UIRoot:任何一個場景中界面根節(jié)點(diǎn),其中至少包括一個UICamera。UICamera:其本質(zhì)是一個具有UICamera腳本組件的攝像機(jī),腳本中封裝了對其子游戲?qū)ο蟮匿秩镜裙δ堋nchor:用于偏移子游戲?qū)ο蟮牟季郑缟?、下、左、右、中。Panel:NGUI中的窗口。Button:按鈕元素,可執(zhí)行OnClick、OnPress、OnRelease等回調(diào)函數(shù)Label:標(biāo)簽元素,用于顯示文字。Atlas:為了節(jié)省內(nèi)存中圖片和字體的占用量,NGUI可以將字體和小圖片生成一張大圖片,Atlas中保存小圖的坐標(biāo)信息,可用于索引到小圖Sprite,Sprite:其中有兩種特殊的類型,同樣起到減少資源占用量的目的。UISlicedSprite將Sprite分為九個切片,每個切片可自由縮放,適合制作邊框;UITiledSprite可以進(jìn)行平鋪擴(kuò)展本游戲中要開發(fā)主要有兩類界面:一類是主菜單界面,例如玩家在啟動游戲后需要進(jìn)入一個登陸界面,可以進(jìn)行汽車選擇,游戲選項(xiàng)設(shè)置,進(jìn)入競技場開始游戲等操作。另一類是HUD(HeadUpDisplay)界面,即游戲進(jìn)行過程中的界面,這個界面需要在碰撞到其他車輛時(shí)進(jìn)行“冒分”,以及顯示玩家當(dāng)前游戲積分和排名等。前文已經(jīng)介紹了NGUI的一些基本概念。具體如圖4-10游戲登陸界面圖。圖4-10游戲登陸界面圖HUD的實(shí)現(xiàn)與主界面略有區(qū)別,由于要保證總是顯示最前,所以要較現(xiàn)有的3D場景之后渲染。Unity3D中會按照場景中攝像機(jī)深度值排列渲染順序,所以要將UICamera的深度值設(shè)置的比主攝像機(jī)大。4.6網(wǎng)絡(luò)系統(tǒng)要實(shí)現(xiàn)多人模式下的玩家對戰(zhàn),還需要加入網(wǎng)絡(luò)模塊,現(xiàn)有的個人計(jì)算機(jī)網(wǎng)絡(luò)主要通過套接字(socket)進(jìn)行消息傳遞,套接字可以選擇兩種主要協(xié)議:傳輸控制協(xié)議(TransmissionControlProtocol,簡稱TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UserDatagramProtocol,簡稱UDP)。TCP是一種面向連接的、可靠的通信協(xié)議,UDP是一種面向無連接的傳輸層協(xié)議,更為快速但數(shù)據(jù)包可能丟失[12]。在游戲開發(fā)過程中會根據(jù)需要選擇不同的協(xié)議,如在局域網(wǎng)大廳中,顯示房間信息和用戶聊天都可以選用UDP,在需要實(shí)時(shí)保存的玩家信息(如裝備、財(cái)寶等)必須使用可靠的TCP傳輸。Unity3DRPC(RemoteProcedureCallProtocol)是Unity3D封裝的一套網(wǎng)絡(luò)應(yīng)用層套件,跨越了傳輸層和應(yīng)用層,使得聯(lián)網(wǎng)的服務(wù)器、客戶端之間可以用過RPC函數(shù)進(jìn)行遠(yuǎn)端函數(shù)調(diào)用,使得開發(fā)包括網(wǎng)絡(luò)游戲更加容易。其中可設(shè)置可靠(reliable)和不可靠(unreliable)兩種調(diào)用方式,分別對應(yīng)于TCP和UDP。

根據(jù)游戲設(shè)計(jì),減少玩家的繁瑣的操作,第一個進(jìn)入游戲的玩家會自動成為房主,并定時(shí)用UDP方式在局域網(wǎng)中廣播自己的ip地址,后面進(jìn)入游戲的玩家如果收到這個ip地址,就自動連接這個ip地址進(jìn)入游戲。作為局域網(wǎng)游戲,汽車信息的更新是頻繁的,所以為了提高游戲效率,可以使用不可靠的RPC調(diào)用方式。游戲系統(tǒng)主要實(shí)現(xiàn)了NetworkManger.cs和NetworkHandle.cs兩個類,前者主要管理進(jìn)入和退出房間的UDP邏輯和其他玩家的RPC網(wǎng)絡(luò)ID,后者實(shí)現(xiàn)了相應(yīng)的RPC函數(shù),用于在對戰(zhàn)過程中,每個客戶端(包括房主)定時(shí)傳輸自己的位置、積分等信息。4.7程序架構(gòu)架構(gòu)設(shè)計(jì)的目的是用來對整個游戲工程搭建一個擴(kuò)展性強(qiáng),高內(nèi)聚低耦合的游戲工程。4.7.2腳本程序功能基礎(chǔ)類虛擬場景基類。被游戲開始界面,游戲中界面等各個類繼承,如游戲主流程管理類。用來展示各界面的切換,對游戲的展示等功能。賽車虛擬基類。被賽車控制類繼承,賽車控制類。用來實(shí)現(xiàn)賽場上,對賽車的控制的功能,以及物理仿真功能。游戲數(shù)據(jù)基類。用來實(shí)現(xiàn)玩家在游戲里面的分?jǐn)?shù)計(jì)算功能。UI界面基類。被展示玩家交互信息的類繼承,如UI界面數(shù)據(jù)類。用來實(shí)現(xiàn)所有游戲中給玩家展示游戲進(jìn)度和排名等內(nèi)容的功能。4.7.2腳本程序交互Unity3D在是可以創(chuàng)建游戲場景的,在每個游戲場景中又可以創(chuàng)建游戲?qū)ο?,把每個場景的游戲?qū)ο笕诤显谝黄鹁褪且豢?D游戲。游戲場景之間屬于同等級的關(guān)系,為了讓游戲場景之前交互我們需要有一個凌駕所有場景之上的“全局腳本”。所有場景都能與這個唯一的全局腳本進(jìn)行交互。當(dāng)場景切換時(shí)可將臨時(shí)邏輯數(shù)據(jù)寫入全局腳本中,切換完畢后再去全局腳本中取之前保存的數(shù)據(jù),從而實(shí)現(xiàn)交互。具體交互方式如圖4-10腳本交互方式圖。圖4-11腳本交互方式圖游戲展示與性能分析5.1游戲展示5.1.1游戲功能展示按照游戲登錄界面,倒計(jì)時(shí)界面,碰碰車撞翻界面,碰碰車行駛界面,到達(dá)終點(diǎn)界面的主線順序顯示。具體如圖5-1游戲登錄界面。圖5-1游戲登錄界面具體如圖5-2倒計(jì)時(shí)界面。圖5-2倒計(jì)時(shí)界面具體如圖5-3碰碰車撞翻界面。圖5-3碰碰車撞翻具體如圖5-4碰碰車行駛界面。圖5-4碰碰車行駛界面具體如圖5-5到達(dá)終點(diǎn)界面。圖5-5到達(dá)終點(diǎn)界面5.1.2游戲展示實(shí)現(xiàn)游戲展示的功能中實(shí)現(xiàn)了各個場景中切換。展示了玩家從登陸,進(jìn)入場景,開始駕駛碰碰車最后到達(dá)終點(diǎn)的過程,是一個完整的游戲流程??梢宰屚婕殷w驗(yàn)到比賽的快感,也可以體驗(yàn)到到達(dá)終點(diǎn)的成就感。5.2性能分析《瘋狂碰碰車》的目標(biāo)平臺是PC和移動平臺,所以選用了目前中端硬件配置的筆記本和手機(jī)分別進(jìn)行了性能測試,筆記本選用的是LenovoIdeaPadY400N,手機(jī)選用的是小米2。具體如表5-1所示。表5-1測試設(shè)備配置表設(shè)備名:LenovoIdeaPadY400N小米2操作系統(tǒng):Windows7MIUI(Android4.1)CPU型號:i5-3230M高通APQ8064CPU核數(shù):雙核四核CPU頻率:2.6GHz1.5GHzGPU:GT750M(2GB)Adreno320運(yùn)行內(nèi)存:4GB2GB分辨率:1366*7681280*720在LenovoY400N中CPU和GPU耗費(fèi)時(shí)間基本相同,每幀總共耗時(shí)為10ms左右,平均幀率達(dá)到90fps,游戲完全流暢。結(jié)束語在筆者急切想知道一款游戲需要學(xué)習(xí)什么時(shí),卻發(fā)現(xiàn)總結(jié)成系統(tǒng)性的技術(shù)文檔或書籍非常少,大多為某方面如3D繪制、網(wǎng)絡(luò)編程或者工具的使用等只言片語,對于游戲這樣一項(xiàng)多領(lǐng)域技術(shù)的綜合應(yīng)用是遠(yuǎn)遠(yuǎn)不夠的。因此,覺得很有必要把自己了解到一款3D游戲成設(shè)計(jì)到實(shí)現(xiàn)做一次總結(jié),為同類問題提供參考。

受條件限制,論文不能把游戲涉及得每一個細(xì)節(jié)寫清楚,只能從各個角度做一些介紹,請予以諒解,論文所圍繞的汽車游戲由本人獨(dú)立完成,主要內(nèi)容如下:1.研究底層圖形渲染API,如Direct3d、OpenGL的渲染管線及一般圖形程序的結(jié)構(gòu),并學(xué)習(xí)Unity3D的使用快速渲染出需要的效果,如天空盒、海平面、投影;2.研究底層碰撞檢測算法,比較Havok和PhysX兩款物理引擎及基本概念,學(xué)習(xí)在Unity3D中使用PhysX,對車輛物理模型進(jìn)行設(shè)計(jì)和運(yùn)動學(xué)實(shí)現(xiàn);3.利用高度圖創(chuàng)建場景地形,學(xué)習(xí)3dmax建模創(chuàng)建柵欄碰撞體及車身前后碰撞體分離;4.研究Unity3D中UI制作插件NGUI的基本概念和使用,如Atlas及Sprite,這將大大節(jié)省界面圖形資源的內(nèi)存占有率,完成玩家操作界面;5.研究網(wǎng)絡(luò)編程和Unity3DRPC,解決圖形渲染和物理引擎同步問題,用以實(shí)現(xiàn)多人模式下玩家對戰(zhàn)。致謝經(jīng)過緊張的忙碌和工作,本次畢業(yè)設(shè)計(jì)已經(jīng)接近尾聲,作為一個本科生的畢業(yè)設(shè)計(jì),由于經(jīng)驗(yàn)的匱乏,難免有許多考慮不周全的地方,如果沒有導(dǎo)師的督促指導(dǎo),以及一起工作的同學(xué)們的支持,想要完成這個設(shè)計(jì)是難以想象的。在這里首先要感謝我的導(dǎo)師呂小星老師。他平日里工作繁多,但在我做畢業(yè)設(shè)計(jì)的每個階段,從外出實(shí)習(xí)到查閱資料,設(shè)計(jì)草案的確定和修改,中期檢查,后期詳細(xì)設(shè)計(jì)等整個過程中都給予了我悉心的指導(dǎo)。我的設(shè)計(jì)較為復(fù)雜繁瑣,但是張老師仍然細(xì)心地糾正錯誤。除了敬佩呂老師的專業(yè)水平外,他的治學(xué)嚴(yán)謹(jǐn)和科學(xué)研究的精神也是我永遠(yuǎn)學(xué)習(xí)的榜樣,并將積極影響我今后的學(xué)習(xí)和工作。然后還要感謝大學(xué)四年來所有的老師,為我打下計(jì)算機(jī)專業(yè)知識的基礎(chǔ);同時(shí)還要感謝同學(xué)們,在自己設(shè)計(jì)的同時(shí),和我共同學(xué)習(xí),幫助我克服了很多困難,正是因?yàn)橛辛怂麄兊闹С趾凸膭?,此次畢業(yè)設(shè)計(jì)才會順利完成,衷心感謝大家。此外,感謝計(jì)算機(jī)學(xué)院和實(shí)驗(yàn)室老師給我提供充足的設(shè)備資源和良好的學(xué)習(xí)環(huán)境,感謝母?!本╅_放大學(xué)三年來對我的大力栽培!最后對參加論文評閱和答辯工作的老師們表示衷心的感謝!參考文獻(xiàn)[1](加)KennethC.Finney.3D游戲開發(fā)大全(高級篇)海南出版社2013[2].中國版協(xié)游戲工委.2012年中國游戲產(chǎn)業(yè)調(diào)查報(bào)告[R].海南出版社2015.

[3].魏強(qiáng).3D棒球游戲的設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué)出版社.2013.

[4].DaveShreiner等著,徐波等譯.OpenGL編程指南(原書第5版)[M].北京:機(jī)械工業(yè)出版社,2013,6-8.

[5].王樹軍.三維游戲引擎中物理引擎關(guān)鍵技術(shù)的研究[D].天津:天津大學(xué)出版社.2013.

[6].朱柱.基于Unity3D的虛擬實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)與應(yīng)用研究[D].武漢:華中師范大學(xué)出版社,2014.

[7].陳健松,徐從富,潘云鶴.基于地形的三維場景繪制方法[J].計(jì)算機(jī)工程與應(yīng)用,鳳凰出版社2014,(08):31-33.

[8].譚同德,許繪香,趙紅領(lǐng),余曉霞.一種基于ShadowMapping的陰影生成改進(jìn)算法[J].計(jì)算機(jī)工程與應(yīng)用,海南出版社2014,(32):165-168.

[9].汪璇.基于OSG的分布式汽車駕駛模擬器運(yùn)行仿真及碰撞檢測研究[D].武漢:武漢理工大學(xué)出版社,2014.

[10].W.RichardStevens等著.UNIX網(wǎng)絡(luò)編程-卷1:套接字聯(lián)網(wǎng)API(第3版)[M].北京:人民郵電出版社,2015,29-30.附錄1、獲取場景管理者類類名:GameMgr作用:可以在項(xiàng)目中隨時(shí)取到游戲管理者全局變量,用來管理游戲各個場景主流程的切換。采用設(shè)計(jì)模式:單例模式寫法://私有成員 privatestatic

溫馨提示

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

評論

0/150

提交評論