




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
---文檔均為word文檔,下載后可直接編輯使用亦可打印---摘要隨著時(shí)代向前推進(jìn),互聯(lián)網(wǎng)的信息技術(shù)也發(fā)生了日益精進(jìn),人們的日常生活中娛樂(lè)所占用的時(shí)間相比以前也漸漸提高。其中游戲業(yè)以驚人的速度發(fā)展,各個(gè)年齡階層的人們都對(duì)游戲有不同程度的需求。而這當(dāng)中VR游戲又是游戲業(yè)中的尖端技術(shù),這類游戲不僅能讓玩家體驗(yàn)到仿真的交互,而且還可以做到模擬現(xiàn)實(shí)、身臨其境的效果,因而受到大量的游戲玩家的喜愛(ài)。Unity3D是目前市場(chǎng)上最熱門的一款游戲開(kāi)發(fā)引擎之一,它易于上手,開(kāi)發(fā)便捷,正是學(xué)生初步接觸游戲開(kāi)發(fā)時(shí)的不二之選。本項(xiàng)目是一款基于VR設(shè)備的籃球體育類游戲,在使用Unity3D游戲引擎進(jìn)行開(kāi)發(fā)的基礎(chǔ)上,也結(jié)合了SteamVR接口的運(yùn)用。區(qū)別于電腦上、手機(jī)上的籃球游戲,使用VR設(shè)備進(jìn)行游玩的籃球游戲除了在體驗(yàn)游戲過(guò)程中達(dá)到減壓的目的,同時(shí)身體的隨著游戲活動(dòng)也能給人們帶來(lái)一定鍛煉效果。現(xiàn)在社會(huì)上的人們,無(wú)論是學(xué)生還是成年人,在空閑時(shí)選擇的游戲通常都是在電腦前,手機(jī)前進(jìn)行操作,久而久之也會(huì)由于缺乏運(yùn)動(dòng)而帶來(lái)一些不好的影響,而VR體育類游戲能很好地把游戲和鍛煉結(jié)合在一起。本文內(nèi)容主要描述了該游戲的開(kāi)發(fā)經(jīng)驗(yàn),即該游戲的設(shè)計(jì)與實(shí)現(xiàn)以及游戲功能測(cè)試等總體的VR游戲開(kāi)發(fā)流程。為后續(xù)想要開(kāi)發(fā)同類游戲的開(kāi)發(fā)者提供一些借鑒與參考。關(guān)鍵詞:Unity3DSteamVR虛擬現(xiàn)實(shí)計(jì)算機(jī)仿真
AbstractAsthetimesmoveforward,theinformationtechnologyoftheInternethasalsobecomeincreasinglysophisticated,andthetimetakenforentertainmentinpeople'sdailyliveshasgraduallyincreasedcomparedtobefore.Thegameindustryisdevelopingatanalarmingrate,andpeopleofallageshavevaryingdegreesofdemandforgames.Amongthem,VRgamesarealsocutting-edgetechnologiesinthegameindustry.Thesegamesnotonlyallowplayerstoexperiencesimulatedinteraction,butalsocansimulatetherealityandimmersiveeffects,sotheyarelovedbyalargenumberofgamers..Unity3Disoneofthemostpopulargamedevelopmentenginesonthemarket.Itiseasytogetstartedandconvenienttodevelop.Itisexactlythefirstchoiceforstudentswhentheyareinitiallyexposedtogamedevelopment.ThisprojectisabasketballsportsgamebasedonVRequipment.BasedonthedevelopmentusingtheUnity3Dgameengine,italsocombinestheuseoftheSteamVRinterface.Differentfrombasketballgamesoncomputersandmobilephones,inadditiontothepurposeofdecompressioninthegameofusingVRdevicestoplaybasketballgames,thephysicalactivityofthegamecanalsobringcertainexerciseeffectstopeople.Peopleinthesociety,whetherstudentsoradults,usuallychoosegamesinfrontofcomputersandmobilephoneswhentheyarefree.Overtime,theywillalsobringsomebadeffectsduetolackofexercise.VRsportsGamescanbeagoodcombinationofgamesandexercise.Thecontentofthisarticlemainlydescribesthedevelopmentexperienceofthegame,thatis,thedesignandimplementationofthegameandtheoverallVRgamedevelopmentprocesssuchasgamefunctiontesting.Providesomereferenceandreferenceforsubsequentdeveloperswhowanttodevelopsimilargames.Keywords:Unity3DSteamVRVirtualRealityComputerSimulation
目錄緒論選題的目的和意義隨著計(jì)算機(jī)科學(xué)技術(shù)的飛速發(fā)展,VR游戲也來(lái)到了大眾的面前大眾。玩家們對(duì)于游戲的要求日益增長(zhǎng),比起以前來(lái)更加追求真實(shí)的感官體驗(yàn)。而VR游戲在這方面達(dá)到的效果比其他平臺(tái)上的效果更為顯著。它的仿真度高,體驗(yàn)感強(qiáng),能讓用戶感覺(jué)更加融入游戲與享受游戲,在VR游戲開(kāi)發(fā)逐漸成為熱潮的今天,用Unity3D做一款VR游戲可謂是趕上了時(shí)代的潮流。Unity3D作為當(dāng)下最熱門的游戲開(kāi)發(fā)引擎之一,它的實(shí)用性也是一流。Unity3D上手難度低,開(kāi)發(fā)速度快,開(kāi)發(fā)成本低,逐漸吸引越來(lái)越多的人使用它進(jìn)行游戲開(kāi)發(fā)。加上游戲開(kāi)發(fā)工作者市場(chǎng)尚未飽和,在游戲領(lǐng)域里Unity3D游戲開(kāi)發(fā)的人才依然受到各大公司青睞。高薪的工作以及樂(lè)觀的前景,也使得越來(lái)越多人加入了Unity3D游戲開(kāi)發(fā)的熱潮當(dāng)中。目前市場(chǎng)上的虛擬現(xiàn)實(shí)游戲內(nèi)容較為單一,其中大部分都為第一人稱射擊,雖說(shuō)VR技術(shù)走在時(shí)代前沿,但要說(shuō)與傳統(tǒng)游戲的競(jìng)爭(zhēng)其實(shí)還力有未逮。而且一般的虛擬現(xiàn)實(shí)設(shè)備價(jià)格都較為昂貴,而且就實(shí)際效果而言還不夠完善,設(shè)備不夠便捷,同水平游戲開(kāi)發(fā)難度比普通電腦端、手機(jī)端大。因此VR游戲在現(xiàn)階段仍然沒(méi)有較好的普及到所有地區(qū),通常而言只有少數(shù)發(fā)達(dá)區(qū)域會(huì)有VR游戲體驗(yàn)館,而即使是那些地方受眾也不算多。因此我也希望本文能夠給后續(xù)希望致力于豐富VR游戲內(nèi)容的游戲開(kāi)發(fā)者們一些參考REF_Ref3572\r\h[4]。國(guó)內(nèi)外研究現(xiàn)狀就游戲本身的發(fā)展而言,從最早的文字MUD游戲到2D游戲,再到3D游戲,游戲畫面和技術(shù)都在不斷進(jìn)步,游戲的擬真度和代入感也隨之越來(lái)越強(qiáng)。而到了VR游戲這一步,比起以往可以更深刻直觀的體驗(yàn)游戲的世界。虛擬現(xiàn)實(shí)的概念早在二十世紀(jì)六十年代已經(jīng)存在,但是那時(shí)候的虛擬現(xiàn)實(shí)技術(shù)并非用在游戲上面,到了現(xiàn)代的硬件設(shè)備足以支持以后,才由shenx提出了第一個(gè)可實(shí)用化模型,并且由后來(lái)的\t"/item/VR%E6%B8%B8%E6%88%8F/_blank"Oculus開(kāi)發(fā)人員、shenx、以及著名的\t"/item/VR%E6%B8%B8%E6%88%8F/_blank"吃豆人開(kāi)發(fā)者巖谷徹等人完成,最后終于在2016年迎來(lái)了vr游戲爆發(fā)式發(fā)展。到了今天,已經(jīng)出現(xiàn)了不下幾十款游戲發(fā)布了支持OculusRift的版本,其中包括但不限于恐怖、射擊和模擬生存類游戲,例如以太空遨游為題材的游戲《BlueMarble》,就能讓玩家能夠在喜歡的音樂(lè)下,自由自在地漂浮于地球和月亮之間,感受那廣闊而神秘的宇宙;而恐怖冒險(xiǎn)游戲《TheUnderworld》則需要玩家一邊探索陰森的地牢,一邊躲避怪物的追擊。而隨時(shí)會(huì)出現(xiàn)的怪物會(huì)嚇得玩家驚慌失措,虛擬現(xiàn)實(shí)給玩家?guī)?lái)的感受更是讓恐怖指數(shù)激增。雖然OculusRift如今推出的仍是開(kāi)發(fā)版,但現(xiàn)有的游戲資源也已經(jīng)不在少數(shù),足夠讓玩家超前體驗(yàn)到虛擬現(xiàn)實(shí)游戲的魅力REF_Ref3827\r\h[9]。除了OculusRift之外,三星的GearVR、谷歌的廉價(jià)虛擬現(xiàn)實(shí)設(shè)備Cardboard、索尼的PS4虛擬現(xiàn)實(shí)眼鏡項(xiàng)目“墨菲斯計(jì)劃”以及我們中國(guó)虛擬現(xiàn)實(shí)游戲頭盔3glasses等等各種虛擬現(xiàn)實(shí)設(shè)備均相繼登場(chǎng),也預(yù)示著越來(lái)越多行業(yè)巨頭開(kāi)始涉足到這個(gè)領(lǐng)域。不過(guò),僅從目前的情況來(lái)看,虛擬現(xiàn)實(shí)技術(shù)的表現(xiàn)仍然沒(méi)有達(dá)到完美的水平,實(shí)際應(yīng)用過(guò)程中出現(xiàn)的各種問(wèn)題仍然是不可避免的存在。論文組織結(jié)構(gòu)?本篇文章從游戲的策劃制作,后期的修改,以及論文的編寫,查找了各種VR游戲開(kāi)發(fā)資料,到最后完成時(shí)已經(jīng)過(guò)了半年有余。這篇文章當(dāng)中具體介紹游戲的制作開(kāi)發(fā)步驟,從游戲的系統(tǒng)功能設(shè)計(jì)到代碼的編寫都有論述。論文分為六章,各章節(jié)安排如下:?第一部分:緒論,主要闡述了該游戲制作的目的和意義、國(guó)內(nèi)外VR游戲發(fā)展的狀況以及本篇文章的大概介紹;?第二部分:介紹了游戲引擎Unity3D,以及游戲中運(yùn)用到的其他工具;?第三部分:詳細(xì)介紹游戲的各個(gè)模塊的制作過(guò)程,清晰明確游戲內(nèi)部關(guān)系,采用由下到上的順序?qū)訉硬鹞霾襟E;第四部分:運(yùn)行游戲進(jìn)行測(cè)試,打包封裝;??第五部分:總結(jié)與感想。
開(kāi)發(fā)工具介紹Unity3D游戲引擎Unity3D軟件介紹Unity3D是一款由UnityTechnologies開(kāi)發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如\t"/item/Unity3D/_blank"三維視頻游戲、建筑可視化、實(shí)時(shí)\t"/item/Unity3D/_blank"三維動(dòng)畫等各種類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)引擎,可謂是一個(gè)全面整合的專業(yè)\t"/item/Unity3D/_blank"游戲引擎。Unity類似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化\t"/item/Unity3D/_blank"開(kāi)發(fā)環(huán)境為首要方式的軟件。它的編輯器可運(yùn)行在Windows、Linux(目前僅支持Ubuntu和Centos發(fā)行版)、MacOSX下,也可發(fā)布游戲至\t"/item/Unity3D/_blank"Windows、\t"/item/Unity3D/_blank"Mac、\t"/item/Unity3D/_blank"Wii、\t"/item/Unity3D/_blank"iPhone、\t"/item/Unity3D/_blank"WebGL(需要\t"/item/Unity3D/_blank"HTML5)、Windowsphone8和Android等各個(gè)平臺(tái)。也可以利用Unitywebplayer\t"/item/Unity3D/_blank"插件來(lái)發(fā)布網(wǎng)頁(yè)游戲,同時(shí)支持Mac和Windows的網(wǎng)頁(yè)瀏覽。它的\t"/item/Unity3D/_blank"網(wǎng)頁(yè)播放器也被Mac所支持。通常而言平臺(tái)之間的差別會(huì)影響到產(chǎn)品的開(kāi)發(fā)速度和進(jìn)度,因此很多開(kāi)發(fā)者都要在這上面花費(fèi)大量的時(shí)間、資源,而Unity3D則能夠在近10種主流平臺(tái)之間完美移植。同時(shí)Unity3D提供的操作界面也能夠同時(shí)完美地在Windows和MacOS下部署。這款軟件自帶的五個(gè)工程視圖框架能夠很好地幫助游戲開(kāi)發(fā)者們分類游戲中的對(duì)象及隨時(shí)觀察制作游戲的進(jìn)程。其中Scene視圖主要存放游戲中模型資源,Project視圖主要存放游戲中的資源文件,Hierarchy視圖主要放置游戲場(chǎng)景中具體的游戲?qū)ο?,Inspector視圖主要用來(lái)描述游戲資源的信息,Game視圖是用來(lái)觀察已經(jīng)完成的游戲的運(yùn)行成果。Unity3D還為我們提供了多種腳本語(yǔ)言編譯的常用環(huán)境,用戶可以根據(jù)需求將默認(rèn)的編譯環(huán)境做出調(diào)整。Unity3D支持C#、javascript、boo三種腳本語(yǔ)言REF_Ref349\r\h[1]。SteamVR開(kāi)發(fā)套件Unity3D支持使用SteamVR插件。SteamVR開(kāi)發(fā)套件包含一個(gè)頭戴式顯示器、左手右手各一個(gè)的手持控制器、一個(gè)用于空間內(nèi)追蹤顯示器和手持控制器的定位系統(tǒng)。戴上頭戴式顯示器在房間內(nèi)走動(dòng),定位系統(tǒng)即可把位置和方向捕捉到從而反饋給電腦,其精度準(zhǔn)確到微米單位。而左右手各一個(gè)的手持控制器上有高分辨率觸摸板,以及各種扳機(jī),用于觸發(fā)游戲內(nèi)的各種功能,實(shí)現(xiàn)玩家和游戲世界的互動(dòng)。而定位系統(tǒng)由兩個(gè)定位器(即雙定位器)組成,將雙定位器分別放置于房間的對(duì)角位置上,即可精準(zhǔn)進(jìn)行定位。HTCViveHTCVive是HTC與Valve聯(lián)合開(kāi)發(fā)的一款虛擬現(xiàn)實(shí)頭戴式顯示器產(chǎn)品,可和SteamVR聯(lián)合開(kāi)發(fā)虛擬現(xiàn)實(shí)游戲。該頭戴式顯示器有著單眼有效分辨率1200*1080,雙眼合并分辨率2160*1200的超高分辨率。這個(gè)分辨率使畫面的顆粒感降到極低,玩家基本感覺(jué)不到紗門效應(yīng)。畫面刷新率為90Hz,延遲約為22ms,實(shí)際體驗(yàn)幾乎沒(méi)有延遲。當(dāng)然這當(dāng)中也包括兩個(gè)手持控制器。HTCViveVR設(shè)備被用于各個(gè)方面,例如建筑、醫(yī)療、教學(xué)等各個(gè)領(lǐng)域都有在虛擬現(xiàn)實(shí)中進(jìn)行過(guò)應(yīng)用的開(kāi)發(fā)REF_Ref2083\r\h[2]。SteamVR插件利用SteamVR插件進(jìn)行游戲開(kāi)發(fā)還需要將SteamVR開(kāi)發(fā)插件中所包含的CameraRig,SteamVR和StatusPrefab導(dǎo)入場(chǎng)景,以便Unity3D可以識(shí)別VR設(shè)備。CameraRig表示個(gè)人整個(gè)活動(dòng)的范圍。子物體有一個(gè)攝像頭,一個(gè)耳機(jī)和一個(gè)頭盔,包括左右手柄。在Unity3D中直接導(dǎo)入此預(yù)設(shè)并調(diào)整變換組件的比例,使其成為場(chǎng)景中人員的你所需要的適當(dāng)百分比。該系統(tǒng)繼承了LaserPoint的LaserPointer,通過(guò)添加LaserCubeCollider類即可使手柄發(fā)出的筆直激光與VR一起操作REF_Ref3984\r\h[13]。GUI(圖形用戶界面)本文主要使用NGUI和UGUI進(jìn)行UI界面的開(kāi)發(fā),GUI是圖形用戶界面的英文簡(jiǎn)寫。Unity的GUI系統(tǒng)被稱作UnityGUI,UnityGUI能使你非??旖莺?jiǎn)便的添加功能齊備且種類繁多的界面元素,使你只需要一次性寫出很少量的代碼就能同時(shí)完成創(chuàng)建一個(gè)GUI界面元素實(shí)例,并定位實(shí)例在屏幕的位置和描述界面元素被激活時(shí)所要執(zhí)行的腳本三種工作。通過(guò)在GUI控件的創(chuàng)建操作中同時(shí)包括實(shí)例化,定位和功能定義。UGUI是Unity內(nèi)置的,NGUI則是一款為Unity游戲引擎開(kāi)發(fā)的工具功能擴(kuò)展的UI插件,它也能夠?yàn)殚_(kāi)發(fā)者提供方便快捷的UI設(shè)計(jì)方法,降低UI設(shè)計(jì)成本,加快設(shè)計(jì)游戲的速度,從而達(dá)到加快游戲開(kāi)發(fā)速度。3DsMax軟件3Dsmax是discreet公司開(kāi)發(fā)的一款基于PC操作系統(tǒng)的三維動(dòng)畫渲染和三維對(duì)象制作軟件,是各大游戲開(kāi)發(fā)商最常用建模工具之一。其前身是基于DOS操作系統(tǒng)的3DStudio軟件。軟件最開(kāi)始被運(yùn)用于電腦游戲中制作動(dòng)畫,而后更進(jìn)一步用在于參與影視片中的特效制作。本游戲中的模型除了少數(shù)簡(jiǎn)單的形狀使用Unity自帶的模型建立,其余均使用3DsMax來(lái)建模。但是可能由于版本以及一些未知錯(cuò)誤,在模型導(dǎo)入過(guò)程中丟失了不少素材,但是成功導(dǎo)入的素材也足夠進(jìn)行游戲開(kāi)發(fā),因此并沒(méi)有深入了解導(dǎo)致3DsMax和Unity3D中素材不兼容的錯(cuò)誤發(fā)生于哪里。AdobePhotoshopAdobePhotoshop,簡(jiǎn)稱“PS”,是一款圖像處理軟件。Photoshop主要處理數(shù)字圖像,進(jìn)行圖片編輯工作。運(yùn)用Photoshop上的各種功能,對(duì)圖像、圖形、視頻、文字等方面都可以進(jìn)行操作。Photoshop支持Windows操作系統(tǒng)、Android和MacOS,在圖像處理軟件市場(chǎng)中也算是被使用最多的軟件之一。本游戲中的選關(guān)界面以及圖片,均為網(wǎng)絡(luò)上尋找素材,然后使用Photoshop進(jìn)行處理,最后導(dǎo)出為PNG格式圖片,方便導(dǎo)入到Unity3D中成為游戲素材。VisualStudio2019VisualStudio2019,于2018年6月開(kāi)始開(kāi)發(fā),于2019年4月2日正式版首發(fā)。該軟件由微軟公司進(jìn)行開(kāi)發(fā)。運(yùn)用它所寫得目標(biāo)代碼適用于微軟所支持的所有平臺(tái)。它是當(dāng)下最為流行的Windows平臺(tái)應(yīng)用程序的集成開(kāi)發(fā)環(huán)境。比起VisualStudio2017,VisualStudio2019新增了一鍵清除代碼功能,以及加入了全新的AI支持。此外,還同時(shí)引入了實(shí)時(shí)共享功能。VisualStudio201也優(yōu)化了Debug功能,比起以前的版本來(lái)得都要更加高效和快捷。
游戲設(shè)計(jì)場(chǎng)景設(shè)計(jì)本游戲場(chǎng)景主要為游戲開(kāi)始界面和游戲進(jìn)行界面。游戲開(kāi)始界面使用網(wǎng)絡(luò)中尋找的圖片素材,運(yùn)用Photoshop進(jìn)行處理后結(jié)合成開(kāi)始界面和選關(guān)界面的素材。游戲進(jìn)行界面主要是一個(gè)籃球場(chǎng),以及籃球場(chǎng)內(nèi)的東西,比如地板,籃筐,籃球架,墻壁,籃球場(chǎng)外圍鐵絲網(wǎng)。該部分主要使用3DSMax進(jìn)行建模。場(chǎng)景的制作由于使用3DSMax所建造的模型較多,在此只舉例說(shuō)明籃球架的制作。首先上網(wǎng)找到籃球架的樣子,并查找它的規(guī)格尺寸數(shù)據(jù),然后在建模時(shí)根據(jù)實(shí)際情況進(jìn)行微調(diào)數(shù)據(jù)比例。這里從籃球架的底部開(kāi)始。如圖3-1所示。圖3-1籃球架的底部樣條線先用樣條線畫出大概形狀,然后再調(diào)整點(diǎn)的位置,并給轉(zhuǎn)角的點(diǎn)圓角一下,讓它過(guò)渡顯得自然一些,然后給樣條線擠出100cm,最后再調(diào)整一下整體的比例另一個(gè)底部也是同樣的做法,先畫樣條線,再擠出,然后調(diào)整比例。最后成品如圖3-2所示。圖3-2籃球架底部完成圖支架的制作由3個(gè)長(zhǎng)方體構(gòu)成,先給它們擺好位置,如圖3-3所示。圖3-3籃球架支架初始圖然后對(duì)上面兩個(gè)長(zhǎng)方體轉(zhuǎn)為可編輯多邊形,同過(guò)過(guò)調(diào)整它們的頂點(diǎn),效果如圖3-4所示。圖3-4編輯后形狀然后下面的長(zhǎng)方體通過(guò)布爾拾取斜著的長(zhǎng)方體,讓兩個(gè)長(zhǎng)方體有一個(gè)平滑的切面,效果如圖3-5所示:圖3-5籃球架支架下半部分然后進(jìn)行籃板的制作?;@板的制作根據(jù)網(wǎng)絡(luò)上的數(shù)據(jù)以及比例做一個(gè)長(zhǎng)方體,然后給它上面兩個(gè)的轉(zhuǎn)角邊進(jìn)行切角,讓它變得圓滑一點(diǎn)。同樣復(fù)制一個(gè)長(zhǎng)方體后把這個(gè)長(zhǎng)方體給它循環(huán)兩條邊,再刪掉多余的面,給邊界封口后,調(diào)整它的大小,使其成飛一個(gè)包裹住籃板下面兩個(gè)角的L行的防撞體。同樣給這兩個(gè)東西的轉(zhuǎn)角邊進(jìn)行一個(gè)切角。效果如圖3-6所示。圖3-6籃球架籃板其他支架同樣是用樣條線畫出大概形狀,然后擠出,調(diào)整點(diǎn)的位置和整體的比例。效果如圖3-7所示。圖3-7籃球架次要支架然后用樣條線畫出下面的形狀,然后打開(kāi)渲染,把厚度調(diào)成3cm得到效果如圖3-8所示。圖3-8籃球支架最終形狀最后還需要做一個(gè)籃筐。用兩個(gè)長(zhǎng)方體和一個(gè)圓環(huán)制作,把長(zhǎng)方體轉(zhuǎn)為可編輯多邊形后調(diào)整它的點(diǎn),然后給轉(zhuǎn)角邊做切角。然后再做一個(gè)圓環(huán),即可完成籃筐。效果如圖3-9所示。圖3-9籃框模型將上述建好的模型進(jìn)行組合,最終的到一個(gè)完整的籃球架,效果如圖3-10所示。圖3-10完整籃球架開(kāi)始界面進(jìn)入游戲后的第一個(gè)界面。由Photoshop處理完素材后制作而成。如圖3-11所示。此界面在開(kāi)始游戲按鈕處添加了按鈕Button,并把進(jìn)入到選關(guān)頁(yè)面的代碼放入了Button當(dāng)中。代碼內(nèi)容如下。using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
using
UnityEngine.Events;
using
UnityEngine.SceneManagement;
using
UnityEngine.UI;
public
class
startbutton
:
MonoBehaviour
{
public
GameObject
startbtn;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
startbtn.GetComponent<Button>().onClick.AddListener(onClick);
}
void
onClick()
{
Debug.Log("button");
SceneManager.LoadScene(1);
}
void
Update()
{
}
}
圖3-11游戲開(kāi)始界面此部分代碼運(yùn)用GetComponent<>()找到開(kāi)始游戲按鈕內(nèi)的Button,并且在玩家使用激光觸發(fā)該按鈕后執(zhí)行切換場(chǎng)景到選關(guān)場(chǎng)景,該部分由SceneManager.LoadScene()實(shí)現(xiàn)。選關(guān)界面首先把美術(shù)素材進(jìn)行拼貼,做好選關(guān)板塊后給每個(gè)關(guān)卡圖片都加上Button按鈕,并編寫切換Scene代碼達(dá)到切換關(guān)卡的效果。選關(guān)界面如圖3-12所示。圖3-12游戲選關(guān)界面選關(guān)部分的代碼與開(kāi)始界面的代碼較為類似,即使用GetComponent<>()找到6個(gè)關(guān)卡按鈕,然后根據(jù)所選擇的關(guān)卡進(jìn)行Scene切換,代碼如下:using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
using
UnityEngine.SceneManagement;
using
UnityEngine.UI;
public
class
buttonguan1
:
MonoBehaviour
{
public
GameObject
xuanguantbtnone;
public
GameObject
xuanguantbtntwo;
public
GameObject
xuanguantbtnthr;
public
GameObject
xuanguantbtnfou;
public
GameObject
xuanguantbtnfiv;
public
GameObject
xuanguantbtnsix;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
xuanguantbtnone.GetComponent<Button>().onClick.AddListener(onClick1);
xuanguantbtntwo.GetComponent<Button>().onClick.AddListener(onClick2);
xuanguantbtnthr.GetComponent<Button>().onClick.AddListener(onClick3);
xuanguantbtnfou.GetComponent<Button>().onClick.AddListener(onClick4);
xuanguantbtnfiv.GetComponent<Button>().onClick.AddListener(onClick5);
xuanguantbtnsix.GetComponent<Button>().onClick.AddListener(onClick6);
}
void
onClick1()
{
Debug.Log("button1");
SceneManager.LoadScene(2);
}
void
onClick2()
{
Debug.Log("button2");
SceneManager.LoadScene(3);
}
void
onClick3()
{
Debug.Log("button3");
SceneManager.LoadScene(4);
}
void
onClick4()
{
Debug.Log("button4");
SceneManager.LoadScene(5);
}
void
onClick5()
{
Debug.Log("button5");
SceneManager.LoadScene(6);
}
void
onClick6()
{
Debug.Log("button6");
SceneManager.LoadScene(7);
}
//
Update
is
called
once
per
frame
void
Update()
{
}
}
籃球設(shè)置在Unity找到建模做好的籃球,給它加上剛體Rigidbody,賦予了它重量以及它的摩擦系數(shù),使它在上升和下降過(guò)程中更加接近真實(shí)的籃球軌跡。然后給它設(shè)置球形碰撞體SphereCollider,此碰撞體默認(rèn)貼合導(dǎo)入U(xiǎn)nity中的籃球模型,但是我們對(duì)它的碰撞體進(jìn)行略微的放大調(diào)整,使玩家更加容易抓到球,而且更大的碰撞體對(duì)于球?qū)Φ孛婊驂Ρ诋a(chǎn)生碰撞時(shí)視覺(jué)效果也會(huì)更好。此外,此游戲中的籃球還必須添加彈性才能更加貼近真實(shí)的籃球。在SphereCollider球形碰撞體參數(shù)內(nèi)找到Material材質(zhì)這一欄,添加一個(gè)新的材質(zhì)。然后對(duì)新的材質(zhì)進(jìn)行參數(shù)調(diào)整,找到彈性bounciness這一欄,調(diào)整參數(shù)并進(jìn)行測(cè)試,最終調(diào)整到接近現(xiàn)實(shí)生活中的籃球即可?;@球碰撞體比籃球模型略大,如圖3-13所示。圖3-13籃球模型及其碰撞體不同關(guān)卡的設(shè)計(jì)倘若游戲單純的進(jìn)行虛擬現(xiàn)實(shí)空間內(nèi)的投籃運(yùn)動(dòng),那么玩家在進(jìn)行一定時(shí)間的游玩后很快就會(huì)厭倦,因此僅僅是還原具有真實(shí)感的投籃對(duì)于一個(gè)游戲來(lái)說(shuō)是不夠的。為了給游戲增加趣味性的同時(shí)增加難度,我決定從兩個(gè)方面來(lái)進(jìn)行游戲內(nèi)容的增加。增加球的種類 誠(chéng)然,作為虛擬現(xiàn)實(shí)游戲,真實(shí)感是很重要的一部分。但是從一個(gè)游戲的角度來(lái)想,如果內(nèi)容跟現(xiàn)實(shí)生活中的活動(dòng)完全一致的話,那么還是過(guò)于乏味。因此在設(shè)計(jì)籃球的同時(shí),我也再設(shè)計(jì)了幾個(gè)其他種類的球。其中只拿冰球來(lái)做例子。冰球的外觀如圖3-14所示。冰球在現(xiàn)實(shí)生活中并不能作為籃球運(yùn)動(dòng)所用的球,但是在游戲世界中我們可以設(shè)計(jì)出它來(lái)??梢韵胂蟊蚺c籃球的區(qū)別,溫度、顏色外觀、重量等各種屬性。其中在Unity3D中最容易實(shí)現(xiàn)的就是改變重量和摩擦力。因此我們對(duì)冰球的屬性進(jìn)行設(shè)置,使得它重量比籃球大,摩擦力比籃球小。同時(shí),冰球的彈性也應(yīng)該要比籃球更小,落地時(shí)不應(yīng)該能彈得很高。因此在給冰球添加的新材質(zhì)Material中,對(duì)彈性bounciness的數(shù)值需要調(diào)得更低,但也不能調(diào)得太低,因?yàn)樘热粢粋€(gè)籃球游戲內(nèi)一個(gè)球落地完全不會(huì)彈跳,打板后垂直下落,撞了籃筐也沒(méi)有運(yùn)動(dòng)軌跡的變化,那還是過(guò)于無(wú)趣。總之,就是要把冰球設(shè)計(jì)成一個(gè)彈性比籃球小而摩擦力比藍(lán)球大的球類。這樣,在玩家進(jìn)行冰球的投籃時(shí)會(huì)發(fā)現(xiàn)冰球的飛行阻力要比籃球大,而打板后回彈的幅度要比籃球小,這樣就需要調(diào)整手感后再重新投球,增加了游戲的趣味性。圖3-14冰球的外形設(shè)計(jì)當(dāng)然,如果每一關(guān)都放置冰球的話這個(gè)改動(dòng)跟沒(méi)改沒(méi)有任何區(qū)別,因此我們需要讓玩家的投籃手感從普通籃球的手感和冰球的手感之間來(lái)回切換,增加了游戲趣味性的同時(shí)提高游戲難度。冰球的彈力比籃球更小,通常而言這會(huì)使得進(jìn)球的難度更加大,因此我們把冰球的關(guān)卡放在籃球的后面,即第一關(guān)放置籃球,第二關(guān)放置冰球,第三關(guān)又放置籃球。這樣就會(huì)使得相鄰兩關(guān)的投籃手感需要調(diào)整,不至于每關(guān)都是接近的手感從而失去了趣味。增加籃筐的變化現(xiàn)實(shí)生活中的籃筐當(dāng)然是不會(huì)變化的,但是在游戲設(shè)計(jì)中我們卻可以對(duì)這一點(diǎn)做出改動(dòng)。前文提到,作為一個(gè)游戲,不應(yīng)該只對(duì)現(xiàn)實(shí)生活中的事物規(guī)則進(jìn)行還原,即使虛擬現(xiàn)實(shí)游戲,也要有作為游戲特有的趣味才行。因此在本文所介紹的游戲中,我們對(duì)籃筐做出了運(yùn)動(dòng)軌跡的變化。為了能使籃筐上下運(yùn)動(dòng),使用普通的籃球架顯然是不合適的,因?yàn)槠胀ǖ幕@球架進(jìn)行上下伸縮會(huì)顯得尤其怪異,因此我們另外設(shè)計(jì)一個(gè)看起來(lái)就可以進(jìn)行上下移動(dòng)的籃球架。可以想象,這種籃球架的籃板應(yīng)該附在一根豎直的柱子上,而后籃板沿著柱子進(jìn)行垂直運(yùn)動(dòng)即可達(dá)到效果。但是考慮到只會(huì)進(jìn)行上下移動(dòng)也還是略感單調(diào),因此我們可以在進(jìn)行上下移動(dòng)的同時(shí)把左右移動(dòng)也添加進(jìn)來(lái),進(jìn)一步增加游戲難度。為了籃板能左右移動(dòng),那么前面所說(shuō)的籃板沿著豎直的柱子做垂直運(yùn)動(dòng)的方案就不可行,因?yàn)橹挥幸桓怪钡闹与y以進(jìn)行更大幅度的水平運(yùn)動(dòng),因此綜合兩個(gè)條件考慮,可以是籃板附在一根水平的柱子上,如此一來(lái)籃板可以在柱子上自由地做水平運(yùn)動(dòng)。而豎直運(yùn)動(dòng)則靠柱子本身的運(yùn)動(dòng)完成。最終設(shè)計(jì)出的籃球架如圖3-15所示。圖3-15可左右上下移動(dòng)的籃球架設(shè)計(jì)如前文所言,這個(gè)設(shè)計(jì)可以讓籃板沿著中間的柱子進(jìn)行水平運(yùn)動(dòng),而中間的柱子沿著兩邊的支柱進(jìn)行上下移動(dòng)即可完成籃板的垂直運(yùn)動(dòng)。外形設(shè)置好后,再來(lái)考慮代碼實(shí)現(xiàn)部分。首先進(jìn)行垂直運(yùn)動(dòng)部分的代碼設(shè)計(jì)。由于籃板的垂直運(yùn)動(dòng)是由中間的水平柱子進(jìn)行上下移動(dòng)而實(shí)現(xiàn)的,因此垂直運(yùn)動(dòng)部分的代碼對(duì)象應(yīng)該是水平柱子而不是籃板。先public一個(gè)浮點(diǎn)數(shù)值speed,設(shè)定柱子做垂直運(yùn)動(dòng)的速度。根據(jù)這個(gè)速度進(jìn)行調(diào)整,大約經(jīng)過(guò)多長(zhǎng)時(shí)間,柱子可以從上端移動(dòng)到我們想要的最低點(diǎn),private一個(gè)浮點(diǎn)數(shù)值timer記錄這個(gè)時(shí)間。然后private一個(gè)布爾值bool為isdown,就是說(shuō),當(dāng)布爾值isdown為真時(shí),表示籃球架正在下降。前文有提到,timer記錄了柱子從上端移動(dòng)到最低點(diǎn)時(shí)所需要的時(shí)間。因此,要知道柱子什么時(shí)候需要開(kāi)始往上移動(dòng)了,我們只需要timer減等于增量時(shí)間,當(dāng)timer等于0時(shí)候,代表柱子已經(jīng)到達(dá)我們想要的最下端了。這時(shí)候設(shè)置布爾值isdown為假,當(dāng)布爾值isdown為假時(shí),水平柱子則反向進(jìn)行移動(dòng),即網(wǎng)上移動(dòng)。這時(shí)候timer還在繼續(xù)減小。柱子從最下端移動(dòng)到最上端所需要的時(shí)間應(yīng)該是跟自己從最上端移動(dòng)到最下端的所需時(shí)間是一樣的,即當(dāng)timer變?yōu)閠imer的相反數(shù)時(shí),我們又讓布爾值isdown改為真,讓柱子開(kāi)始往下移動(dòng),這樣就可以實(shí)現(xiàn)了水平柱子的垂直往返移動(dòng)。具體代碼如下。using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
public
class
NewBehaviourScript
:
MonoBehaviour
{
public
GameObject
start;
public
float
speed;
private
float
timer
=
2.5f;
private
bool
isdown;
private
float
x;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
isdown
=
true;
}
//
Update
is
called
once
per
frame
void
Update()
{
//if
(transform.position.y
>=
-3.5)
{
//
transform.Translate(0,
-1
*
Time.deltaTime,
0);
//}
//if
(transform.position.y
<=
-5)
//{
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
//Debug.Log(transform.position.y);
if
(isdown==true)
{
x
=
-1;
}
else
if
(isdown==false)
{
x
=
1;
}
if
(timer<0)
{
isdown
=
false;
}
if
(timer<=-2.5f)
{
timer
=
2.5f;
isdown
=
true;
}
transform.Translate(0,
x
*
Time.deltaTime,
0);
timer
-=
Time.deltaTime;
//if
(timer<0)
//{
//
timer
==
3;
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
}
}
設(shè)置好了水平柱子的垂直移動(dòng)后,則繼續(xù)進(jìn)行籃筐沿水平柱子所作的水平運(yùn)動(dòng)。到了這一步,具體的方法跟做垂直移動(dòng)時(shí)的方法大同小異,只是垂直移動(dòng)改變Y軸坐標(biāo),而水平運(yùn)動(dòng)則需要改變X軸坐標(biāo)。因此,我們繼續(xù)設(shè)定好水平移動(dòng)的速度,然后測(cè)試在合適的速度下,籃筐從最左端移動(dòng)到最右端所需要的時(shí)間,然后又是根據(jù)這個(gè)時(shí)間進(jìn)行布爾值的取反,使得籃筐的運(yùn)動(dòng)方向發(fā)生改變。值得一提的是,倘若設(shè)置的速度使得籃筐從左到右所需的時(shí)間跟水平柱子從上到下所需的時(shí)間完全一樣的話,那么這個(gè)運(yùn)動(dòng)軌跡則是毫無(wú)變化。容易想象到,籃筐從左上角開(kāi)始移動(dòng),到達(dá)右下角時(shí)開(kāi)始反向移動(dòng),然后又返回左上角開(kāi)始往右下角移動(dòng),這樣的移動(dòng)軌跡不是我們想要的,因此籃筐水平移動(dòng)的合適的速度應(yīng)該要使得籃筐從左端到達(dá)右端的時(shí)間跟柱子從上端到達(dá)下端的時(shí)間不相等。具體的籃筐水平移動(dòng)代碼如下。using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
public
class
NewBehaviourScript1
:
MonoBehaviour
{
public
GameObject
start;
public
float
speed=2.0f;
private
float
timer
=
1.0f;
private
bool
isdown;
private
float
x;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
isdown
=
true;
}
//
Update
is
called
once
per
frame
void
Update()
{
//if
(transform.position.y
>=
-3.5)
{
//
transform.Translate(0,
-1
*
Time.deltaTime,
0);
//}
//if
(transform.position.y
<=
-5)
//{
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
//Debug.Log(transform.position.y);
if
(isdown
==
true)
{
x
=
-1;
}
else
if
(isdown
==
false)
{
x
=
1;
}
if
(timer
<
0)
{
isdown
=
false;
}
if
(timer
<=
-2f)
{
timer
=
2f;
isdown
=
true;
}
transform.Translate(x
*
Time.deltaTime*2,
0,0);
timer
-=
Time.deltaTime;
//if
(timer<0)
//{
//
timer
==
3;
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
}
}
最后,只需要讓游戲的難度循序漸進(jìn)即可。比如第一第二關(guān)籃筐完全不會(huì)移動(dòng),而第三第四關(guān)籃筐會(huì)做垂直移動(dòng),到了第五第六關(guān),籃筐會(huì)同時(shí)進(jìn)行水平運(yùn)動(dòng)和垂直運(yùn)動(dòng),且由于兩個(gè)運(yùn)動(dòng)的運(yùn)動(dòng)周期不同,使得籃筐的軌跡變化更加不規(guī)律,游戲難度有所上升。而相鄰的兩關(guān)所用的球類不同也進(jìn)一步的增加了游戲的難度。添加背景音樂(lè)及游戲音效由于本游戲中的音樂(lè)變化需求較小,因此并不需要運(yùn)用到代碼的控制。我們?cè)诟鱾€(gè)游戲界面均添加一個(gè)新的游戲?qū)ο驡ameObject,在右側(cè)項(xiàng)目欄內(nèi)找到AddComponent給這個(gè)游戲?qū)ο筇砑覣udioSource,此控件為音樂(lè)控件,在網(wǎng)上找到合適的音樂(lè)并下載后,添加到AudioSource中的AudioClip欄中即可,并把此音樂(lè)的循環(huán)Loop打開(kāi),就不會(huì)出現(xiàn)玩家過(guò)關(guān)時(shí)間太長(zhǎng)而音樂(lè)停止了。音樂(lè)的選擇應(yīng)該要根據(jù)關(guān)卡的難易度進(jìn)行調(diào)整,比如第一第二關(guān)為最簡(jiǎn)單的關(guān)卡,則可以選擇比較輕快的音樂(lè),第三第四關(guān)突然加入籃筐移動(dòng)的元素,就可以選擇添加令人感到驚訝或者奇妙心情的音樂(lè),到了第五第六關(guān),游戲難度達(dá)到了最大,這時(shí)候選擇的音樂(lè)應(yīng)該是要比前面的更為激昂。選擇音樂(lè)時(shí)也要考慮Unity3D的軟件性能,過(guò)于高清的音質(zhì)往往跟軟件不兼容而導(dǎo)入失敗,因此我們可以適當(dāng)選擇音質(zhì)中等的音樂(lè)文件。游戲的打包與導(dǎo)出到了這一步游戲的設(shè)計(jì)制作已經(jīng)基本完成了,最后只需要對(duì)游戲進(jìn)行打包即可。在Unity3D的工具欄里找到File選項(xiàng),選擇后找到BuildSettings并點(diǎn)擊,而后會(huì)出現(xiàn)BuildSettings窗口,窗口如圖3-16所示。圖3-16BuildSettings窗口在此窗口中ScenesInBuild欄點(diǎn)擊AddOpenScenes按順序加入所需要加載的場(chǎng)景,我這里添加了開(kāi)始界面,選關(guān)界面以及后面的六個(gè)關(guān)卡。選擇好之后導(dǎo)出的游戲才可以進(jìn)行場(chǎng)景的切換。而后Platform選擇需要發(fā)布的平臺(tái),即導(dǎo)出模式,這流我們選擇PC端,然后點(diǎn)擊Build就開(kāi)始打包了,等待打包結(jié)束即可。
游戲測(cè)試找到打包好后的文件,點(diǎn)擊exe運(yùn)行,進(jìn)入到游戲開(kāi)始界面。開(kāi)始界面正常運(yùn)作,如圖4-1所示。圖4-1游戲運(yùn)行開(kāi)始界面由于此游戲?yàn)閂R游戲,僅靠鼠標(biāo)和鍵盤難以觸及懸浮在臉上的開(kāi)始游戲按鈕,到了這時(shí)候就需要使用VR設(shè)備來(lái)進(jìn)行游玩了。經(jīng)過(guò)測(cè)試,游戲正常運(yùn)作,使用VR設(shè)備可進(jìn)行游玩,如圖4-2所示。圖4-2使用VR設(shè)備進(jìn)行投籃
總結(jié)從游戲策劃到開(kāi)始建模,再到資源整合代碼編寫,然后游戲測(cè)試游戲調(diào)整,最后到編寫畢業(yè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 光的反射(教學(xué)設(shè)計(jì))-2024-2025學(xué)年科學(xué)五年級(jí)上冊(cè)人教鄂教版
- 2025年甘肅省蘭州市單招職業(yè)適應(yīng)性測(cè)試題庫(kù)完整版
- 2025年河南女子職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)學(xué)生專用
- 2025年湖北生態(tài)工程職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)必考題
- 2025年度公司獨(dú)家簽約帶貨主播合作協(xié)議
- 寵物醫(yī)院裝修全包合同細(xì)則
- 2025年度數(shù)字經(jīng)濟(jì)平臺(tái)運(yùn)營(yíng)人員聘用協(xié)議
- 2025年度美容美發(fā)門店聯(lián)營(yíng)合作合同
- 農(nóng)村茶藝館裝修合同模板
- 2025年度手房買賣意向金支付與房屋交易風(fēng)險(xiǎn)控制合同
- 教科版 二年級(jí)下冊(cè)科學(xué)教學(xué)計(jì)劃
- 中國(guó)膿毒癥及膿毒性休克急診治療指南
- 部編版六年級(jí)道德與法治下冊(cè)《學(xué)會(huì)反思》教案
- 人教版體育與健康四年級(jí)-《障礙跑》教學(xué)設(shè)計(jì)
- DB32-T 2860-2015散裝液體化學(xué)品槽車裝卸安全作業(yè)規(guī)范-(高清現(xiàn)行)
- 部編版四年級(jí)下冊(cè)語(yǔ)文教案(完整)
- T∕CIS 71001-2021 化工安全儀表系統(tǒng)安全要求規(guī)格書編制導(dǎo)則
- 福利院裝修改造工程施工組織設(shè)計(jì)(225頁(yè))
- 環(huán)境空氣中臭氧的測(cè)定
- 第七章 化學(xué)物質(zhì)與酶的相互作用
- 機(jī)械畢業(yè)設(shè)計(jì)論文鋼筋自動(dòng)折彎?rùn)C(jī)的結(jié)構(gòu)設(shè)計(jì)全套圖紙
評(píng)論
0/150
提交評(píng)論