基于HTC與Unity3D的VR模擬消防仿真演習(xí)實(shí)現(xiàn)_第1頁(yè)
基于HTC與Unity3D的VR模擬消防仿真演習(xí)實(shí)現(xiàn)_第2頁(yè)
基于HTC與Unity3D的VR模擬消防仿真演習(xí)實(shí)現(xiàn)_第3頁(yè)
基于HTC與Unity3D的VR模擬消防仿真演習(xí)實(shí)現(xiàn)_第4頁(yè)
基于HTC與Unity3D的VR模擬消防仿真演習(xí)實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要互聯(lián)網(wǎng)時(shí)代已經(jīng)過(guò)去了一段時(shí)間了,網(wǎng)絡(luò)游戲以及大型單機(jī)也興起了一段時(shí)間,傳統(tǒng)的PC游戲雖然還是大流,但還有更星興起的VR游戲以及AR游戲,VR與AR技術(shù)通常用于仿真以及模擬的虛擬增強(qiáng)技術(shù),不僅應(yīng)用于新生類型游戲中,還應(yīng)用于各種模擬事件,比如家具配色的模擬又或者是高危環(huán)境的動(dòng)作模擬等等。VR技術(shù)對(duì)于人的動(dòng)作交互性極強(qiáng),可以利用手柄的位置捕捉實(shí)現(xiàn)三維的交互,為不局限與普通PC游戲的二維交互,這使得VR技術(shù)實(shí)現(xiàn)的游戲可以很順暢的模擬出手的位置,可以實(shí)現(xiàn)更多普通PC的二維交互的做不到的動(dòng)作,這使得VR游戲的側(cè)重點(diǎn)也并不像以前游戲的豐富的按鍵交互,而是顯得更真實(shí)的位置交互,用手柄上的幾個(gè)按鍵做出相對(duì)的操作。VR手柄雖然不能精準(zhǔn)的模擬出手指的位置,只能模擬出手的大部分捉、按、拿的動(dòng)作,但這足夠去模擬出大部分的動(dòng)作了。因此,VR技術(shù)還有另一個(gè)關(guān)鍵的用處,比如模擬高危環(huán)境下的工作,因?yàn)槭悄M真實(shí)的環(huán)境,所以不需要擔(dān)心是否會(huì)受到傷害,這對(duì)于新到崗的高危工作者是一個(gè)非常有效的訓(xùn)練方式。因此本文探究的是利用VR技術(shù)實(shí)現(xiàn)的高危場(chǎng)所:大型火場(chǎng)的消防滅火。這能用于模擬仿真大型著火環(huán)境的消防演習(xí),這不僅可以使用于消防新兵對(duì)于火場(chǎng)的快速熟悉,也可以使用與普通民眾來(lái)學(xué)習(xí)火場(chǎng)的正確救援方式以及減少對(duì)大火場(chǎng)的恐懼感。因此利用VR技術(shù)實(shí)現(xiàn)的模擬大型火場(chǎng)的消防演習(xí)擁有著非??捎^的發(fā)展前景,本文主要講述了該游戲的開(kāi)發(fā)原理、開(kāi)發(fā)設(shè)計(jì)以及實(shí)現(xiàn)的功能,同時(shí)還有游戲的測(cè)試以及調(diào)試簡(jiǎn)述。希望為開(kāi)發(fā)同類游戲的人提供幫助以及借鑒。關(guān)鍵詞:Unity3DVR技術(shù)模擬仿真消防演習(xí)

AbstractTheInterneterahaspassedforawhile,andonlinegamesandlarge-scalesinglecomputershavealsorisenforawhile.AlthoughtraditionalPCgamesarestillinthemainstream,thereareVRgamesandARgamesemergingfromnewborn.VRandARtechnologiesareusuallyusedforsimulationandvirtualenhancementtechniquesofsimulation,whicharenotonlyappliedtonewtypesofgames,butalsoappliedtovarioussimulationevents,suchasfurniturecolormatchingSimulationofhigh-riskenvironmentoractionsimulationandsoon.VRtechnologyishighlyinteractiveforhumanactions.Itcanusethepositioncaptureofthehandletorealizethree-dimensionalinteraction.Inordertonotlimitthetwo-dimensionalinteractionwithordinaryPCgames,thegamerealizedbyVRtechnologycansmoothlysimulatethepositionofthehand,andrealizemoreactionsthatordinaryPCcan'tdointwo-dimensionalinteraction,whichmakesthefocusofVRgamenotasrichaspreviousgamesThekeyinteractionisamorerealisticpositioninteraction,whichusesseveralkeysonthehandletomakerelativeoperation.AlthoughVRhandlecannotaccuratelysimulatethepositionofthehandfinger,itcanonlysimulatemostofthecatching,pressingandholdingmovementsofthehand,butitisenoughtosimulatemostofthemovements.Therefore,VRtechnologyhasanotherkeyuse,suchassimulatingtheworkinhigh-riskenvironment.Becauseitissimulatingtherealenvironment,thereisnoneedtoworryaboutwhetheritwillbehurt,whichisaveryeffectivetrainingmethodfornewhigh-riskworkers.Therefore,thispaperexplorestheuseofVRtechnologytoachievehigh-riskplaces:largefirefighting.Thiscanbeusedtosimulatethefiredrilloflarge-scalefireenvironment,whichcannotonlybeusedforthefirerecruitstoquicklygetfamiliarwiththefiresite,butalsocanbeusedtolearnthecorrectrescuemethodofthefiresitewiththeordinarypeopleandreducethefearofthefiresite.Therefore,usingVRtechnologytosimulatethefiredrilloflarge-scalefirefieldhasaveryconsiderabledevelopmentprospect.Thispapermainlydescribesthedevelopmentprinciple,developmentdesignandimplementationfunctionsofthegame,aswellasthetestinganddebuggingofthegame.Hopetoprovidehelpandreferenceforpeoplewhodevelopsimilargames.Keywords:Unity3DVRTechnologySimulationandsimulation Firedrill

\o"添加到收藏夾"

目錄4476第一章緒論 緒論選題的目的和意義近幾年游戲技術(shù)的發(fā)展,各種類型的游戲橫空出世,休閑娛樂(lè)、大逃殺、棋牌等等的游戲3D、2D、電腦游戲、手機(jī)游戲等等都會(huì)出現(xiàn)在日常生活中,無(wú)論游戲方式還是游玩途徑都非常多,也融入了很多人的生活中,游戲形成了現(xiàn)代人的一種習(xí)慣。當(dāng)VR技術(shù)逐漸發(fā)展,各種VR由此也橫空出世,現(xiàn)階段在VR開(kāi)發(fā)初期能使用Unity3D開(kāi)發(fā)VR游戲是趕在行業(yè)的前面。VR技術(shù)的出現(xiàn),除了游戲還有更多的實(shí)用途徑,比如說(shuō)用于模擬各種事件的真實(shí)狀況,更加有實(shí)用性的是利用VR技術(shù)所體驗(yàn)出來(lái)的真實(shí)感來(lái)模擬高危場(chǎng)景,比如說(shuō)大火場(chǎng)消防演習(xí)或者是士兵的戰(zhàn)術(shù)訓(xùn)練等等?;赨nity3D所開(kāi)發(fā)的VR游戲,所具有的有點(diǎn)有很多,比如說(shuō)在多系統(tǒng)中也可以順利使用,比如說(shuō)可以運(yùn)用在高配置PC上利用HTCVR設(shè)備實(shí)現(xiàn)的大型VR游戲,也可以運(yùn)用在手機(jī)上,只要下載市面上有的VR游戲處理器,再運(yùn)行可以實(shí)現(xiàn)VR操作的游戲,然后再把手機(jī)放進(jìn)暴風(fēng)VR眼鏡里面既可以實(shí)現(xiàn)手機(jī)能運(yùn)行的小型VR游戲。在PS4上最近也出現(xiàn)了不少的能支持VR的游戲。VR游戲在現(xiàn)有游戲開(kāi)發(fā)界正處于研發(fā)初期,無(wú)論VR設(shè)備還是VR游戲都有著非常好的前景,因此我愿意挑戰(zhàn)自己,開(kāi)發(fā)一款VR游戲,走在行業(yè)的前端,雖然不能做得十分完美,也足以為后人給予提示以及基礎(chǔ)了。國(guó)內(nèi)外研究現(xiàn)狀VR技術(shù)也就是虛擬現(xiàn)實(shí)技術(shù),這種概念最早祈愿是在20世紀(jì)50年代的美國(guó),主要的工作原理就是將計(jì)算機(jī)技術(shù)和最細(xì)的常感器技術(shù)融入創(chuàng)造出來(lái)的一種新的交互手段,這種技術(shù)特征就是讓人們沉浸在虛擬的現(xiàn)實(shí)環(huán)境中。[1]早在2016年,中國(guó)虛擬現(xiàn)實(shí)(VR)產(chǎn)業(yè)開(kāi)始風(fēng)生水起,消費(fèi)產(chǎn)品大量出現(xiàn),同時(shí)推動(dòng)了國(guó)內(nèi)產(chǎn)業(yè)鏈的發(fā)展以及資本市場(chǎng)對(duì)VR的投資熱潮涌動(dòng)。[2]但當(dāng)時(shí)VR設(shè)備質(zhì)量還不太行,定位器定位不精準(zhǔn),VR頭盔又重又大,而且顯示像素比較低,看起來(lái)的“現(xiàn)實(shí)”不現(xiàn)實(shí)?,F(xiàn)在2019年,經(jīng)過(guò)幾年的發(fā)展,各國(guó)的VR發(fā)展非??臁TC的VR頭盔設(shè)備也從一代發(fā)展到三代Pro,更還有更多代數(shù)相同的定位器以及一體機(jī)等等。前幾年國(guó)內(nèi)出現(xiàn)比較火的的風(fēng)暴VR頭盔(手機(jī)適配)到現(xiàn)在已經(jīng)被各種推陳出新的手機(jī)適配的埋沒(méi)。各種手機(jī)大廠也開(kāi)始對(duì)自己家的手機(jī)研發(fā)適配的VR頭盔以及手柄,比如小米VR眼鏡等等。當(dāng)然美國(guó)作為VR技術(shù)的起源地,美國(guó)已經(jīng)廣泛的將VR技術(shù)應(yīng)用在航空、衛(wèi)星等VR訓(xùn)練系統(tǒng),也建立了供應(yīng)全國(guó)使用的VR教育系統(tǒng),軍隊(duì)領(lǐng)域也有虛擬戰(zhàn)場(chǎng)環(huán)境的VR模擬系統(tǒng)。VR技術(shù)已經(jīng)融入我們生活很深很深了,也改變了我們生活很多,正比如我們??吹那蛸惙治觯?018俄羅斯世界杯直播已經(jīng)用上了VR技術(shù)來(lái)更清晰的分析球場(chǎng)現(xiàn)狀?,F(xiàn)狀的VR發(fā)展還沒(méi)到最高水平以及普及應(yīng)用,所以現(xiàn)狀VR虛擬現(xiàn)實(shí)技術(shù)有著非常高的發(fā)展前景。開(kāi)發(fā)工具介紹Unity3D游戲引擎Unity3D軟件介紹根據(jù)Unity3D官網(wǎng)對(duì)AR/VR的介紹:經(jīng)過(guò)在游戲行業(yè)中錘煉,并用于創(chuàng)建市面上超過(guò)60%的AR/VR內(nèi)容,Unity靈活的實(shí)時(shí)平臺(tái)提供了無(wú)限的可能性,可幫助您釋放創(chuàng)造潛力。[3]Unity3D開(kāi)發(fā)軟件可以在Windows系統(tǒng)以及Mac系統(tǒng)下進(jìn)行開(kāi)發(fā),可以實(shí)現(xiàn)的游戲平臺(tái)包括PC,安卓,iOS等平臺(tái),可以說(shuō)是一個(gè)非常全面的游戲開(kāi)發(fā)平臺(tái)。VRTK插件介紹VRTK全稱是VirtualRealityToolkit,前身是SteamVRToolkit,由于后續(xù)版本開(kāi)始支持其他VR平臺(tái)的SDK,如Oculus、Daydream、GearVR等,故改名為VRTK,它是使用Unity進(jìn)行VR交互開(kāi)發(fā)的利器,以二八原則來(lái)看,開(kāi)發(fā)者可以使用20%的時(shí)間完成80%的VR交互開(kāi)發(fā)內(nèi)容。[4]Unity3D的物理引擎Unity內(nèi)置了NVIDIA的Physx物理引擎,Physx是目前使用最為廣泛的物理引擎,被很多游戲大作所采用,開(kāi)發(fā)者可以通過(guò)物理引擎高效、逼真地模擬剛體碰撞、車輛駕駛、布料、重力等物理效果,使游戲畫面更加真實(shí)而生動(dòng)。[5]Unity常用生命周期的函數(shù)Unity3D腳本只要是附屬于MonoBehaviour,也就是說(shuō)可以掛在到物體上的腳本都必須要遵循Unity3D生命周期函數(shù)。下面簡(jiǎn)單介紹Unity3D的生命周期函數(shù)。Awake():當(dāng)游戲?qū)ο蟊粏拘训臅r(shí)候執(zhí)行,不管你身上的腳本組件是否禁用該函數(shù)都會(huì)執(zhí)行。OnEnable():組件或者游戲?qū)ο罂捎玫臅r(shí)候執(zhí)行。Start():當(dāng)程序啟動(dòng)的時(shí)候執(zhí)行,可應(yīng)用與初始化。FixedUpdate():固定幀更新默認(rèn)每幀0.02秒。Update():每幀執(zhí)行一次。OnDisable():當(dāng)組件或者游戲?qū)ο蠼玫臅r(shí)候執(zhí)行。OnDestroy():當(dāng)游戲?qū)ο箐N毀的時(shí)候執(zhí)行。[6]Unity3D的碰撞檢測(cè)OnCollisionEnter(Collisioncollision)碰撞體的碰撞開(kāi)始OnCollisionExit(Collisioncollision)碰撞體的碰撞結(jié)束OnCollisionStay(Collisioncollision)碰撞體的碰撞持續(xù)中OnTriggerEnter(Collidercollider)觸發(fā)器的接觸開(kāi)始OnTriggerExit(Collidercollider)觸發(fā)器的接觸結(jié)束OnTriggerStay(Collidercollider)觸發(fā)器的接觸持續(xù)中[7]3DsMax建模軟件\t"/item/3ds%20max/_blank"3DStudioMax,常簡(jiǎn)稱為\t"/item/3ds%20max/_blank"3dMax或3dsMAX,是\t"/item/3ds%20max/_blank"Discreet公司開(kāi)發(fā)的(后被\t"/item/3ds%20max/_blank"Autodesk公司合并)基于PC系統(tǒng)的\t"/item/3ds%20max/_blank"三維動(dòng)畫渲染和制作軟件。其前身是基于\t"/item/3ds%20max/_blank"DOS操作系統(tǒng)的3DStudio系列軟件。游戲設(shè)計(jì)游戲總體設(shè)計(jì)思路游戲場(chǎng)景包括4個(gè)場(chǎng)景,場(chǎng)景1為開(kāi)始界面以及選關(guān)界面,場(chǎng)景2到場(chǎng)景4為三個(gè)不同的火場(chǎng)模擬現(xiàn)場(chǎng),即玩家進(jìn)行火場(chǎng)模擬訓(xùn)練時(shí)候的場(chǎng)景。場(chǎng)景1主要是給玩家使用VR手柄進(jìn)行選擇開(kāi)始游戲以及選擇關(guān)卡的界面,在界面的背景就是處在室內(nèi)火場(chǎng)中央,這樣使得代入感更強(qiáng)。場(chǎng)景2到場(chǎng)景4里面包括很多很精細(xì)的建模以及火場(chǎng)的搭建,道具方面有可拾取的消防滅火高壓水槍。其中場(chǎng)景2是室內(nèi)火災(zāi)火場(chǎng)模擬,場(chǎng)景3是高速路大貨車車禍火災(zāi)火場(chǎng)模擬,場(chǎng)景4是林間小屋火場(chǎng)模擬。場(chǎng)景設(shè)計(jì)與搭建場(chǎng)景2室內(nèi)火場(chǎng)場(chǎng)景搭建設(shè)計(jì)場(chǎng)景2中的室內(nèi)火場(chǎng)場(chǎng)景主要是場(chǎng)景搭建,以及消防車和消防高壓水槍。場(chǎng)景中的大城市場(chǎng)景是網(wǎng)上的素材,直接導(dǎo)進(jìn)場(chǎng)景中就可以實(shí)現(xiàn)一個(gè)比較精細(xì)的城市場(chǎng)景,但這還不夠,我們需要在VR環(huán)境中運(yùn)行起來(lái)還需要做很多的準(zhǔn)備工作。為了能在VR設(shè)備中運(yùn)行起來(lái),所以我們需要給項(xiàng)目添加一個(gè)SteamVR的環(huán)境包,以及VRTK環(huán)境包,把環(huán)境搭建起來(lái),以確保游戲能在VR設(shè)備中順利運(yùn)行起來(lái)。圖3.2.1(1)游戲場(chǎng)景之一由于之前在導(dǎo)入城市場(chǎng)景前自己搭建了一個(gè)簡(jiǎn)易大小的室內(nèi)火場(chǎng)場(chǎng)景,而且大城市場(chǎng)景是沒(méi)有室內(nèi)的,所以需要在導(dǎo)入的城市場(chǎng)景中找到一塊差不多大小而且建筑環(huán)境類似的地方,將之前搭建好的火場(chǎng)環(huán)境加進(jìn)去。我選擇的火災(zāi)房屋是在路邊的一樓家居公寓,所以方便消防車以及消防高壓水槍的進(jìn)入救援。圖3.2.1(2)消防車以及高壓水槍圖3.2.1(3)場(chǎng)景遠(yuǎn)景室內(nèi)的一些家具、消防車、消防高壓水槍都是自己使用3DMAX建模工具搭建出來(lái)的。室內(nèi)的家居的位置擺放是參考小型家居一廳一廚房一廁所一房間的布局而擺放的,由于各種家具都會(huì)和水槍以及其他模型有碰撞,所以需要給家具添加碰撞體以及碰撞模型。圖3.2.1(4)家具的面板設(shè)置圖3.2.1(5)室內(nèi)家具搭建圖3.2.1(6)室內(nèi)家具搭建場(chǎng)景2中的室內(nèi)火災(zāi)場(chǎng)景基本上搭建完成。場(chǎng)景3高速路車禍火災(zāi)場(chǎng)景搭建設(shè)計(jì)場(chǎng)景3中主要是也是場(chǎng)景的搭建本來(lái)打算自己搭建一條高速公里的場(chǎng)景,但很幸運(yùn)的在導(dǎo)入的大城市場(chǎng)景中找到一條高架高速公路,于是我就直接在上面搭建高速路車禍火災(zāi)場(chǎng)景的搭建了。首先在3DMax建模軟件中搭建出一輛大卡車的模型,完成后導(dǎo)入U(xiǎn)nity3D中,并且調(diào)整合適的大小以及拖動(dòng)到合適的位置。圖3.2.2(1)卡車模型的搭建我這里就拖到之前找的高架的高速路上,并把車頭向外,營(yíng)造一種交通事故的氣氛。其次把之前準(zhǔn)備好的消防車模型拉倒車禍卡車模型附近,營(yíng)造一種到場(chǎng)救援的氛圍。圖3.2.2(2)布景這關(guān)的布景比較簡(jiǎn)單,只是兩輛車以及環(huán)境的高架橋以及背景的樓房,但這樣的布景再加上火的特效,確實(shí)會(huì)很真實(shí)而且氣氛很到位。場(chǎng)景4林間小屋火災(zāi)場(chǎng)景搭建這關(guān)的場(chǎng)景搭建有點(diǎn)復(fù)雜,先是在一個(gè)新的場(chǎng)景內(nèi)搭一片平面作為地面,然后在這塊平面為基準(zhǔn)搭建一片Terrain地形,并且使用PaintDetails工具,選擇大塊筆觸對(duì)平面進(jìn)行加工,拉起幾片的地形作為山丘的基礎(chǔ)地形,隨后在此基礎(chǔ)上再拉起來(lái)幾塊平面,重復(fù)操作直到有一定的高度,作為山體。堆起來(lái)的山體圍成一個(gè)圈,營(yíng)造一種被群山圍繞的舒適氛圍。隨后在山體圍繞之下的盆地地區(qū),依舊使用PaintDetails工具,把筆觸調(diào)小調(diào)淺,在盆地輕輕點(diǎn),重復(fù)操作,做成沙漠的那樣子的樣子。地面也可以拉起幾塊當(dāng)做石頭。然后使用PaintTrees工具,種樹(shù)。隨后發(fā)現(xiàn)問(wèn)題,我這版本的Unity3D默認(rèn)是沒(méi)有地形素材的,于是在Unity3D官網(wǎng)下載地形素材包,裝進(jìn)Unity3D里,然后繼續(xù)剛剛的操作,使用PaintTrees工具,選擇配合沙漠環(huán)境的針葉樹(shù)木,輕輕掃一圈,留下中間一塊,多次嘗試,調(diào)整針葉林的高度密度等等的元素,使得看起來(lái)舒服而且不會(huì)顯得累贅。之后在地圖中間,也就是說(shuō)山丘,盆地,針葉林中間,放一個(gè)房子,類似于酒館的風(fēng)格,木屋,有了房子的思路之后就可以在3DMax建模工具搭建模型了。收集素材,收集材質(zhì)貼圖,參考酒館的建筑風(fēng)格,搭建模型。下載小物件配合風(fēng)格減少搭建模型的工作量,比較我主要是做游戲,而不是搭建模型,在使用3DMax建模工具的時(shí)間盡量縮短,也盡可能保持模型的可觀性。圖3.2.3(1)整體布景外觀圖3.2.3(2)酒館及附近場(chǎng)景圖3.2.3(3)酒館內(nèi)部場(chǎng)景細(xì)節(jié)可移動(dòng)區(qū)域處理把各個(gè)場(chǎng)景的游戲場(chǎng)景搭建融洽后,對(duì)游戲場(chǎng)景進(jìn)行tag的分類選擇,因?yàn)榈貓D那么大,不可能讓玩家到處走,所以把火場(chǎng)的房子以及附近的地面選中,給他們的的tag選中為ExcludeTeleport,標(biāo)上ExcludeTeleport這個(gè)tag的物體,一般是地面以及樓梯,被標(biāo)上這個(gè)tag的物體是可以在VR游戲中手柄的射線識(shí)別瞬移的地方,所以需要在想要被玩家移動(dòng)的區(qū)域內(nèi)的地面標(biāo)上ExcludeTeleport這個(gè)tag。圖3.3(1)玩家可移動(dòng)地面的tag游戲渲染的時(shí)候會(huì)將打上ExcludeTeleport的tag的物體進(jìn)行額外的渲染處理,具體的渲染處理原理VRTK已經(jīng)有寫好的算法,渲染完成后的場(chǎng)景使用VR設(shè)備進(jìn)行交互的時(shí)候只能夠讓標(biāo)記了的物體可以進(jìn)行射線照射的識(shí)別,從而區(qū)分哪些物體是可以進(jìn)行操作的。而VRTK也標(biāo)明了對(duì)ExcludeTeleport標(biāo)識(shí)的物體才能進(jìn)行下一步瞬移按鍵操作的交互,也就是說(shuō)瞬移的交互。這樣可以在游戲中實(shí)現(xiàn)在標(biāo)有ExcludeTeleport的tag的地方是玩家可以自由移動(dòng)的區(qū)域,而沒(méi)有標(biāo)記此tag的地方是玩家不能移動(dòng)的。游戲界面設(shè)計(jì)UI界面場(chǎng)景1為開(kāi)始游戲的界面以及選擇關(guān)卡的界面,這個(gè)界面包括了開(kāi)始演習(xí)的按鈕以及跳轉(zhuǎn)選擇關(guān)卡的界面之后的關(guān)卡選擇按鈕。這些界面均使用Unity3D自帶的UGUI制作。搭建UI界面的環(huán)境配置由于本游戲是需要在VR設(shè)備里面實(shí)現(xiàn),所以UI的搭建和普通2D以及3D游戲所搭建的UI界面設(shè)置有所不同。VR游戲的UI界面是在游戲中是一直顯示在屏幕前方,這看起來(lái)和非VR游戲一樣,實(shí)質(zhì)上VR的UI界面是跟隨著VR頭盔鏡頭移動(dòng)的一個(gè)物體,而不是使用UI攝像機(jī)渲染出來(lái)的東西。因此需要在游戲中先搭好VR的UI環(huán)境。首先在Scene里面新建一個(gè)空物體,命名為HeadsetFllower,作為VR頭盔攝像機(jī)跟隨顯示的一個(gè)物體。很慶幸VRTK已經(jīng)有現(xiàn)成的VR頭盔攝像機(jī)跟隨移動(dòng)的腳本,只需要打上VRTK_SDKObjectAlias這個(gè)腳本即可。然后在這個(gè)名為HeadsetFllower空物體里面開(kāi)始搭建UI就可以做到UI跟隨攝像頭移動(dòng)的效果,也就是說(shuō)在VR里面實(shí)現(xiàn)UI的效果。圖4.1.1(1)搭建UI的環(huán)境配置在名為HeadsetFllower空物體里創(chuàng)建一個(gè)Canvas,在創(chuàng)建Canvas的同時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)EventSystem,這是Canvas的必備組件,并不需要對(duì)EventSystem進(jìn)行操作。而要進(jìn)行操作的是Canvas組件,根據(jù)VRTK的操作手冊(cè),得知需要給Canvas組件添加一個(gè)VRTK已經(jīng)寫好的VRTK_UICanvas的腳本,這個(gè)VRTK_UICanvas(Script)的作用就是讓這個(gè)Canvas跟隨著鏡頭,讓它一直保持在鏡頭前方。圖4.1.1(2)Canvas組件的配置UI界面的搭建由于VR游戲的UI特性,UI在VR開(kāi)發(fā)中是作為一個(gè)物體而存在的,所以在Canvas的Canvas面板中修改RenderMode屬性,調(diào)整為WorldSpace,這樣才能使得這個(gè)Canvas在世界坐標(biāo)中存在,也就是相當(dāng)于作為一個(gè)物體存在。首先制作開(kāi)始界面,先在Canvas里面創(chuàng)建一個(gè)Panel畫布,命名為PanelBegin,作為開(kāi)始界面的畫布,然后在這個(gè)畫布中創(chuàng)建一個(gè)Image,修改RectTransform面板中的占比框,按住alt鍵,選中占滿整個(gè)Panel,這樣就可以使得圖片在整個(gè)Panel畫布中占滿,選擇Image面板里面的SourceImage選項(xiàng),修改圖片,作為背景圖片。接著在同一個(gè)PanelBegin畫布下創(chuàng)建Image,修改圖片調(diào)整大小,作為其他畫面元素的圖片。在需要作為按鈕的圖片下面再創(chuàng)建一個(gè)Button組件,命名為startbutton,并且修改startbutton按鈕下的文字,修改成“開(kāi)始游戲”的字樣,修改大小調(diào)整位置,直到美觀合理。圖4.1.2(1)開(kāi)始界面圖4.1.2(2)開(kāi)始界面的內(nèi)容做完開(kāi)始界面后就可以做選關(guān)的界面了,在做選關(guān)界面之前,先把PanelBegin畫布隱藏起來(lái)。隱藏后就可以開(kāi)始做選關(guān)界面了。在Canvas里面再創(chuàng)建一個(gè)Panel畫布,命名為Panelxuanguan,作為選關(guān)界面的畫布。創(chuàng)建Image組件,調(diào)到和Panel一樣大,改變圖片,作為背景圖。另外添加Image組件,修改圖片,在Image組件下創(chuàng)建Button,命名為scene1_btn,修改圖片調(diào)整大小和位置,修改scene1_btn下的Text為“室內(nèi)火災(zāi)”字眼。重復(fù)添加Image組件添加Button組件的操作做完其他幾個(gè)按鈕,分別命名為scene2_btn以及“高速車禍”,scene3_btn以及“林間小屋”,scene4_btn以及“加油站火災(zāi)”。圖4.1.2(3)選關(guān)界面圖4.1.2(4)選關(guān)界面內(nèi)容圖4.1.2(4)游戲開(kāi)始界面的操作圖4.1.2(4)游戲選關(guān)界面的操作UI界面的跳轉(zhuǎn)邏輯界面搭建完成后進(jìn)行UI界面的邏輯編寫。由于一開(kāi)始是顯示開(kāi)始開(kāi)始游戲的界面,所以把開(kāi)始界面的PanelBegin顯示,并對(duì)選關(guān)界面Panelxuanguan進(jìn)行隱藏。接下來(lái)為這個(gè)場(chǎng)景的UI做邏輯的代碼編寫:新建一個(gè)腳本,命名為BtnData,并綁定到這個(gè)Canvas上面,作為邏輯腳本,腳本代碼如下:public

class

BtnData

:

MonoBehaviour

{

private

Button

Begin_btn;

private

Button

scene1_btn;

private

Button

scene2_btn;

private

Button

scene3_btn;

private

Button

scene4_btn;

private

GameObject

BeginPanel;

private

GameObject

xuanguanPanel;

//

Start

is

called

before

the

first

frame

update

void

Start()

{

Begin_btn

=

transform.Find("PanelBegin/Image2/startbutton").GetComponent<Button>();

scene1_btn

=

transform.Find("Panelxuanguan/Image2/scene1_btn").GetComponent<Button>();

scene2_btn

=

transform.Find("Panelxuanguan/Image3/scene2_btn").GetComponent<Button>();

scene3_btn

=

transform.Find("Panelxuanguan/Image5/scene3_btn").GetComponent<Button>();

scene4_btn

=

transform.Find("Panelxuanguan/Image4/scene4_btn").GetComponent<Button>();

BeginPanel

=

transform.Find("PanelBegin").gameObject;

xuanguanPanel

=

transform.Find("Panelxuanguan").gameObject;

Begin_btn.onClick.AddListener(OnBeginClick);

scene1_btn.onClick.AddListener(OnScene1Click);

scene2_btn.onClick.AddListener(OnScene2Click);

scene3_btn.onClick.AddListener(OnScene3Click);

scene4_btn.onClick.AddListener(OnScene4Click);

}

private

void

OnScene4Click()

{

//throw

new

NotImplementedException();

}

private

void

OnScene3Click()

{

SceneManager.LoadScene(3);

}

private

void

OnScene2Click()

{

SceneManager.LoadScene(2);

}

private

void

OnScene1Click()

{

SceneManager.LoadScene(1);

}

private

void

OnBeginClick()

{

BeginPanel.SetActive(false);

xuanguanPanel.SetActive(true);

}

}

代碼的實(shí)現(xiàn)是過(guò)程是先私有化一些需要獲取的物體,使用私有化private的聲明,可以使得每次尋找都能成功,而不會(huì)導(dǎo)致使用public時(shí)轉(zhuǎn)換Unity3D版本的時(shí)候會(huì)有丟失素材的情況。私有化private聲明的字段包括開(kāi)始按鈕以及幾個(gè)選關(guān)按鈕,還有兩個(gè)Panel。然后在start生命周期函數(shù)中對(duì)幾個(gè)物體進(jìn)行賦值,也就是說(shuō)使用代碼對(duì)物體進(jìn)行查找,由于我的腳本掛載在Canvas里面,獲取的物體也在Canvas里面,所以可以直接使用transform.Find()來(lái)對(duì)物體進(jìn)行賦值,而不需要使用比較耗性能的GameObject.Find()。transform.Find()會(huì)對(duì)綁定該腳本的物體子物體開(kāi)始查找,而GameObject.Find()則是在整個(gè)工程的物體開(kāi)始尋找,每一次使用GameObject.Find()相當(dāng)于對(duì)整個(gè)工程的文件重新遍歷一次尋找,這樣子很消耗系統(tǒng)的性能,對(duì)于游戲來(lái)說(shuō),把系統(tǒng)資源分配在這些小功能上是不合理的。所以優(yōu)先使用transform.Find(),盡量不去使用GameObject.Find()。而且如果有被隱藏的物體需要查找,GameObject.Find()是不能找出來(lái)的,這時(shí)則需要使用transform.Find()則可以查找出來(lái)。對(duì)幾個(gè)物體進(jìn)行賦值后,對(duì)幾個(gè)按鈕的點(diǎn)擊事件添加一個(gè)監(jiān)聽(tīng)事件,并對(duì)每一個(gè)監(jiān)聽(tīng)事件進(jìn)行邏輯代碼的編寫:按鈕需要添加監(jiān)聽(tīng)事件后才能對(duì)游戲中的點(diǎn)擊按鈕做出反應(yīng)。首先對(duì)開(kāi)始按鈕的監(jiān)聽(tīng)事件,當(dāng)點(diǎn)擊開(kāi)始按鈕后對(duì)開(kāi)始界面的PanelBegin進(jìn)行setActive成false,也就是對(duì)開(kāi)始界面的PanelBegin進(jìn)行隱藏,同時(shí)將選關(guān)界面的Panelxuanguan進(jìn)行setActive成true,也就是對(duì)選關(guān)Panel進(jìn)行顯示,這樣就可以做到點(diǎn)擊開(kāi)始按鈕后跳轉(zhuǎn)到選關(guān)界面的效果。跳轉(zhuǎn)到選關(guān)界面后對(duì)每一個(gè)選關(guān)按鈕進(jìn)行場(chǎng)景的切換,也就是SceneManager.LoadScene(),使用SceneManager.LoadScene()之前需要在代碼開(kāi)頭引用相關(guān)的命名空間,SceneManager.LoadScene()對(duì)應(yīng)的命名空間是usingUnityEngine.SceneManagement。同時(shí)在Unity3D中,點(diǎn)擊左上角File-->BuildSetting中,將幾個(gè)場(chǎng)景依次添加到ScenesInBuild中圖4.1.3(1)BuildSetting面板設(shè)置在ScenesInBuild面板中最上面的是游戲一開(kāi)始打開(kāi)的場(chǎng)景,我這里放的是界面的場(chǎng)景,后面的依次放上后面的游戲場(chǎng)景,同時(shí)在使用SceneManager.LoadScene()時(shí),()里面填上ScenesInBuild里面對(duì)應(yīng)場(chǎng)景右邊的編號(hào),就可以實(shí)現(xiàn)點(diǎn)擊按鈕跳轉(zhuǎn)場(chǎng)景的操作。代碼中每一個(gè)按鈕對(duì)應(yīng)一個(gè)游戲場(chǎng)景,分別對(duì)應(yīng)“室內(nèi)火災(zāi)”“高速車禍”“林間小屋”“加油站火災(zāi)”。這樣子場(chǎng)景1的UI交互界面基本設(shè)置就完成了。游戲交互設(shè)計(jì)水槍水槍的模型水槍的模型搭建是在3DMax建模工具上完成,上網(wǎng)找圖片,對(duì)照著搭建模型,尺寸估摸著大概半米長(zhǎng)的樣子,搭完后保存為fbx文件格式,添加到Unity3D開(kāi)發(fā)平臺(tái)中。然后導(dǎo)入到場(chǎng)景中,移動(dòng)到合適的位置。再根據(jù)游戲的比例,縮放旋轉(zhuǎn)到合適的位置以及大小。圖5.1.1(1)水槍水槍的VR交互水槍在VR游戲中是屬于交互道具,需要和手柄進(jìn)行交互,我的設(shè)想是使用VR手柄在接觸到水槍的時(shí)候使得水槍高亮,在水槍高亮的時(shí)候按手柄的側(cè)撿按鈕,就可以使得水槍撿起來(lái),同時(shí)及時(shí)松開(kāi)手柄的側(cè)撿按鈕也不會(huì)掉下來(lái),如果需要卸掉水槍,就要重新按一次側(cè)撿按鈕。因此需要實(shí)現(xiàn)高亮以及開(kāi)關(guān)形式的撿東西。由于需要操作的物體,所以需要給水槍添加上碰撞體以及剛體,先是給水槍添加碰撞體,碰撞體需要添加Cylinder(MeshFilter),CapsuleCollider,以及MeshRenderer三個(gè)Unity3D自帶的腳本,作為一個(gè)橢圓體的碰撞體,然后在Scene窗口中調(diào)節(jié)橢圓體的大小位置,以合適的大小覆蓋水槍模型。圖5.1.2(1)水槍的碰撞體設(shè)置水槍不僅需要碰撞體,還需要?jiǎng)傮w,因此需要給水槍添加Rigibody組件,添加Rigibody組件可以使得水槍可以受到物理效果,也就是說(shuō)可以被撿起來(lái)。但考慮到VR游戲中如果以低身位操作的話有可能會(huì)使得控制器丟失,因此可以將UseGravity這個(gè)選項(xiàng)勾選并且將IsKinematic這個(gè)選項(xiàng)也勾選,這樣可以使得水槍在不小心脫離手柄的時(shí)候并不會(huì)馬上掉到地上,而是會(huì)在原來(lái)的高度保持一段時(shí)間。同時(shí)加上Rigibody剛體組件后可以避免水槍在碰到墻體時(shí)飛走的bug。圖5.1.2(2)水槍的剛體設(shè)置在詳細(xì)閱讀VRTK使用手冊(cè)發(fā)現(xiàn),接觸高亮以及開(kāi)關(guān)型撿起東西這兩個(gè)功能已經(jīng)有現(xiàn)成的代碼,因此,只需要在水槍的模型上添加相應(yīng)的代碼即可,這里添加的是VRTK_SwapControllerGrabAction(Script)和VRTK_FixedJointGrabAttach(Script)以及VRTK_InteractableObject(Script)。在VRTK_InteractableObject(Script)腳本面板中可以修改顏色來(lái)實(shí)現(xiàn)改變觸摸高亮的顏色。圖5.1.2(3)水槍的VRTK設(shè)置1圖5.1.2(4)水槍的VRTK設(shè)置2水槍的實(shí)現(xiàn)邏輯在3DMax中建模打包導(dǎo)入到Unity3D后,對(duì)水槍進(jìn)行噴水的實(shí)現(xiàn)。思路是在水槍的模型中創(chuàng)建幾個(gè)新空物體作為水的出現(xiàn)位置,利用代碼在空物體的位置生成水物體,達(dá)到水槍噴水的效果。先在模型下新建一個(gè)空物體,命名為waterpoint作為水物體生成的位置,一個(gè)當(dāng)然是不夠的,復(fù)制一堆在水槍出水口的地方擺成一片。然后制作水,水使用小方塊以及小球體代替,在waterpoint下創(chuàng)建一個(gè)球體Sphere以及一個(gè)方塊Cube,調(diào)小,把小球和小方塊的Scale調(diào)到0.019*0.019*0.019。在素材網(wǎng)上找到水的紋理的貼圖,給小球和小方塊使用,但這樣并不會(huì)很像水,所以需要給小球以及小方塊的顏色調(diào)為半透明,具體做法是給水的小球以及小方塊重新創(chuàng)建一個(gè)材質(zhì)球,這個(gè)材質(zhì)球不能使用默認(rèn)的Shader,而要把新材質(zhì)球的Shader改成LegacyShaders/Transparent/Diffuse,同時(shí)吧MainColor調(diào)為淡藍(lán)色。把材質(zhì)球的Shader改成LegacyShaders/Transparent/Diffuse是為了讓貼上材質(zhì)球的物體變的半透明,在顏色中設(shè)置顏色的透明度可以實(shí)現(xiàn)調(diào)節(jié)。圖5.1.3(1)水的物體的材質(zhì)球設(shè)置模型搭好后,水物體弄好后,就可以開(kāi)始用代碼編寫邏輯。創(chuàng)建一個(gè)C#腳本,命名為waterpoint,在代碼中編寫,內(nèi)容如下:public

GameObject

watercube2;

public

GameObject

watershere;

public

GameObject

watershere2;

private

float

waterSpeed

=

40.0f;

private

bool

istigger;

void

Start()

{

istigger

=

false;

}

void

Update()

{

if

(istigger

==

true)//條件為碰撞條件,手柄的,手柄碰撞到就開(kāi)始

{

//噴水的點(diǎn)

GameObject

w1

=

GameObject.Find("waterpoint

(1)");

GameObject

go1

=

Instantiate(watercube2,

w1.transform.position,

this.transform.rotation);

go1.GetComponent<Rigidbody>().AddForce(this.transform.up

*

waterSpeed

*

10);

GameObject

w2

=

GameObject.Find("waterpoint

(2)");

GameObject

go2

=

Instantiate(watercube2,

w2.transform.position,

this.transform.rotation);

go2.GetComponent<Rigidbody>().AddForce(this.transform.up

*

waterSpeed

*

10);

GameObject

w3

=

GameObject.Find("waterpoint

(3)");

GameObject

go3

=

Instantiate(watercube2,

w3.transform.position,

this.transform.rotation);

go3.GetComponent<Rigidbody>().AddForce(this.transform.up

*

waterSpeed

*

10);

}

}

private

void

OnTriggerEnter(Collider

other)

{

Debug.Log("OnTriggerEnter");

istigger

=

true;

}

private

void

OnTriggerExit(Collider

other)

{

Debug.Log("OnTriggerExit");

istigger

=

false;

}

代碼的實(shí)現(xiàn)是首先查找要使用到的物體并且賦值,然后通過(guò)IsTrigger的碰撞檢測(cè),使得手柄碰到水槍的時(shí)候?qū)崿F(xiàn)Bool量istrigger變?yōu)閠rue,離開(kāi)的時(shí)候istrigger變?yōu)閒alse。在Update生命周期函數(shù)中,判斷是否istrigger為true,如果是true的時(shí)候就會(huì)在各個(gè)水槍的水的生成點(diǎn)的物體中實(shí)例化一個(gè)水物體,同時(shí)給水物體一個(gè)向前的力,因?yàn)樵赨pdate生命周期函數(shù)內(nèi)實(shí)現(xiàn),所以可以實(shí)現(xiàn)手柄一碰到就噴水,手柄離開(kāi)就會(huì)停止噴水,噴水期間也會(huì)一直噴水不會(huì)停,直到手柄離開(kāi)水槍模型的碰撞體范圍。而手柄設(shè)置是開(kāi)關(guān)式撿起東西,這會(huì)使得手柄一旦撿起水槍就會(huì)一直觸發(fā)在水槍的碰撞范圍內(nèi),這樣也可以實(shí)現(xiàn)一直噴水?;鹧婊鹧娴膶?shí)現(xiàn)火焰的利用粒子效果做出來(lái)的動(dòng)態(tài)火焰效果,利用粒子效果做出來(lái)的火焰效果真實(shí),逼真,很適合作為VR游戲中體現(xiàn)。火焰有火有煙霧的效果。圖5.2.1(1)火焰的粒子效果火焰的消失為了使得火焰有一個(gè)碰撞體,所以需要?jiǎng)?chuàng)建一個(gè)Cube,命名為cabon,把Cube的形狀拉的很扁,同時(shí)顏色材質(zhì)球也是做成半透明的黑色,順勢(shì)還可以看做一片被燒焦的物體,在這個(gè)Cube下再來(lái)創(chuàng)建火的粒子效果,這樣就可以很方便的解決火的碰撞體積問(wèn)題。隨后可以發(fā)現(xiàn)火勢(shì)的大小根據(jù)粒子效果的最大粒子數(shù)MaxParticles來(lái)決定視覺(jué)的火勢(shì)大小,同時(shí)也可以減少最大粒子數(shù)的數(shù)量來(lái)實(shí)現(xiàn)火勢(shì)的逐步減少直至慢慢消失的視覺(jué)效果。因此可以使用代碼來(lái)控制。代碼的思路是由水的物體碰撞到燒焦的平面也就是上面所創(chuàng)建的cabon的Cube而減少火的粒子效果的最大粒子數(shù)MaxParticles來(lái)實(shí)現(xiàn)。創(chuàng)建一份C#代碼,命名為firedestroy,掛載到cabon物體上,代碼如下:public

GameObject

fire;

private

float

temptime;

private

bool

isfire

=

true;

private

void

OnCollisionEnter(Collision

collision)

{

if

(collision.gameObject.tag

==

"water")

{

Debug.Log("carbon");

int

MP

=

fire.GetComponent<ParticleSystem>().maxParticles;

if

(MP>0)

{

fire.GetComponent<ParticleSystem>().maxParticles

-=

1;

Debug.Log("fire-");

PointManager.Add(1);

}

}

}

具體的代碼實(shí)現(xiàn)一開(kāi)始獲取到火的粒子效果的物體,然后通過(guò)判斷碰撞到的物體的tag是否為水粒子的物體,如果是,則判斷該火焰的粒子效果的最大粒子數(shù)MaxParticles是否大于0,若符合則使得該火焰的粒子效果的最大粒子數(shù)MaxParticles減少。當(dāng)粒子效果的最大粒子數(shù)MaxParticles減少到0在視覺(jué)上就是火焰沒(méi)有了,只留下一些煙霧。這樣子達(dá)到由水槍的水逐漸滅火,使得火焰從大到小直到消失,火焰消失后只有少量煙霧殘留的視覺(jué)效果。水粒子水粒子的消失由于場(chǎng)景中一旦手柄撿起水槍后,水粒子的物體就會(huì)一直不斷的產(chǎn)生,這會(huì)使得內(nèi)存瘋狂占用,硬件資源也一直被大量占用,非常消耗性能,如果不處理掉一直產(chǎn)生的水粒子,不出幾秒就會(huì)使得游戲變得非??D,甚至卡死進(jìn)程。因此需要處理水的消失的邏輯。創(chuàng)建一份C#腳本,命名為waterdestroy,掛載到水粒子的物體上,代碼如下:private

float

timer

=

1.3f;

void

Update()

{

timer

-=

Time.deltaTime;

if

(timer

<

0)

{

Destroy(this.gameObject);

}

}

主要實(shí)現(xiàn)就是設(shè)置一個(gè)定時(shí)器,在實(shí)例化后調(diào)用,也就是說(shuō)實(shí)例化后1.3秒就會(huì)銷毀自身的水物體。這樣做可以使得水粒子的物體被實(shí)例化噴出后不管有沒(méi)有碰撞到火,都會(huì)在1.3秒后自動(dòng)摧毀自身的物體。這樣大大減少了資源的占用。游戲測(cè)試打包做好的游戲?yàn)閜c平臺(tái)的格式,拷貝到搭載了VR設(shè)備的高性能電腦上,搭建好VR設(shè)備,帶上頭盔穿好手柄,點(diǎn)擊開(kāi)始游戲。值得注意的是一定要使用高性能電腦,不然普通電腦帶不動(dòng)VR游戲。經(jīng)過(guò)測(cè)試,游戲運(yùn)行正常,VR的手柄交互正常,可以正常點(diǎn)擊按鈕跳轉(zhuǎn)場(chǎng)景,可以正常撿起水槍,水槍可以正常噴水,水也可以正常逐漸滅火。游戲也沒(méi)有較大的卡頓,沒(méi)有意料之外的bug,游戲已經(jīng)實(shí)現(xiàn)。

總結(jié)這是一個(gè)基于HTCVR與Unity3D開(kāi)發(fā)平臺(tái)的VR消防仿真演習(xí)的游戲,研發(fā)這款游戲的初衷是看到消防員的辛苦訓(xùn)練而想到的一個(gè)想法。想要利用VR技術(shù),將消防訓(xùn)練的認(rèn)知過(guò)程的危險(xiǎn)性降到最低。在游戲開(kāi)發(fā)的過(guò)程中需要使用VRTK插件以及VR設(shè)備,經(jīng)常遇到的問(wèn)題是在自己電腦上使用VRTK開(kāi)發(fā),由于是模擬器的緣故,并不能完全體現(xiàn)出VR的環(huán)境,而且有些是在VRTK中能實(shí)現(xiàn)的“假”效果,在自己電腦上做好了,到實(shí)驗(yàn)室里使用VR設(shè)備所看到的效果不一樣,需要去調(diào),也就是說(shuō)需要一遍一遍調(diào)整,打包,拷貝到實(shí)驗(yàn)室電腦,使用VR設(shè)備查看效果,然后在去調(diào)。這些過(guò)程中的問(wèn)題可以使用時(shí)間來(lái)修復(fù),最大的問(wèn)題是模型大小,在VRTK中顯示的是一個(gè)屏幕的大小,而VR設(shè)備里看到的是一個(gè)人的大小,在第一個(gè)場(chǎng)景制作的時(shí)候在VRTK看的是正常的,到VR那邊就變得非常大,而我各種位置的設(shè)定就需要全部重新回爐重做,這才是一次最浪費(fèi)時(shí)間的一次失誤。其次對(duì)于VR游戲來(lái)說(shuō)比起普通PC游戲確實(shí)有很多設(shè)置上的東西不一樣,尤其是攝像機(jī)和UI的設(shè)置,比PC游戲復(fù)雜很多。相機(jī)需要作為VR頭盔跟隨移動(dòng)視角的作用而設(shè)置,UI界面需要根據(jù)VR攝像機(jī)的位置在前方跟隨移動(dòng),保持在最前而設(shè)置。VR游戲可以說(shuō)是現(xiàn)在時(shí)代的潛流,隨著電腦處理器的更新?lián)Q代,越來(lái)越多的新硬件都將支持VR游戲且越來(lái)越順暢,VR游戲的質(zhì)量也會(huì)越來(lái)越高,伴隨而來(lái)的就是VR設(shè)備的個(gè)人化簡(jiǎn)單化以及使用的便利化、場(chǎng)地需求的通用化等等??梢哉f(shuō)VR游戲開(kāi)發(fā)將會(huì)是未來(lái)幾年最有潛力的游戲開(kāi)發(fā)主題。我也會(huì)不斷精通Unity3D的開(kāi)發(fā),做出更全面更好玩的游戲。

參考文獻(xiàn)[1]劉家懌.VR技術(shù)發(fā)展現(xiàn)狀與未來(lái)趨勢(shì)[J].中國(guó)新通信,2016(10):81-81.[2]高紅波.中國(guó)虛擬現(xiàn)實(shí)(VR)產(chǎn)業(yè)發(fā)展現(xiàn)狀、問(wèn)題與趨勢(shì)[J].現(xiàn)代傳播,2017(2).[3]Unity官方參考手冊(cè)[4]VRTK使用手冊(cè)[5]CSDN筆記:Unity物理引擎詳解[6]CSDN筆記:Unity常用生命周期函數(shù)以及執(zhí)行順序詳解[7]CSDN筆記:Unity學(xué)習(xí)筆記(二)碰撞檢測(cè)與觸發(fā)檢測(cè)

致謝隨著畢業(yè)設(shè)計(jì)的完成,我也將面臨的是大學(xué)的畢業(yè)。在開(kāi)發(fā)畢業(yè)設(shè)計(jì)的過(guò)程中我非常感謝我的指導(dǎo)老師王千秋老師,她關(guān)注畢業(yè)設(shè)計(jì)的進(jìn)展,督促我對(duì)畢業(yè)設(shè)計(jì)的進(jìn)度。認(rèn)真批閱畢業(yè)設(shè)計(jì)論文,給我的畢業(yè)設(shè)計(jì)的完成以及畢業(yè)設(shè)計(jì)論文的撰寫提供了很多的建議與意見(jiàn),給我提供了很多的幫助,讓我的畢業(yè)設(shè)計(jì)以及畢業(yè)設(shè)計(jì)論文順利完成,同時(shí)也感謝CSDN筆記的大佬,總結(jié)很多知識(shí)點(diǎn)的用法,不僅在學(xué)習(xí)過(guò)程中還有復(fù)習(xí)中都給出了各種有關(guān)Unity3D的使用以及進(jìn)階的方法還有知識(shí)點(diǎn),這對(duì)于我逐步精通Unity3D非常有幫助。雖然不能實(shí)時(shí)的回答我的現(xiàn)有的問(wèn)題,但可以通過(guò)各個(gè)知識(shí)點(diǎn)的總結(jié)以及用法,我自己研究來(lái)實(shí)現(xiàn)我想要實(shí)現(xiàn)的效果。這對(duì)于我專精Unity3D有著非常大的幫助。最后,感謝一路上陪伴我的幫助我的人,再次真誠(chéng)地向你們致謝!

電腦無(wú)法識(shí)別U盤該怎么辦HYPERLINK電腦無(wú)法識(shí)別U盤怎么辦?打開(kāi)我的電腦上單擊右鍵,在快捷菜單里,選擇“管理”,打開(kāi)“計(jì)算機(jī)管理”窗口。在計(jì)算機(jī)管理窗口里,選擇“存儲(chǔ)”下面的“磁盤管理”,如果看得到?jīng)]有盤符的U盤,那么在這個(gè)U盤上按鼠標(biāo)右鍵,選擇“更改驅(qū)動(dòng)器名稱和路徑”選項(xiàng),就打開(kāi)了“更改……的驅(qū)動(dòng)器號(hào)和路徑”對(duì)話框。再點(diǎn)擊“更改”按鈕,打開(kāi)“更改驅(qū)動(dòng)器號(hào)和路徑”的對(duì)話框,在“指定以下驅(qū)動(dòng)器號(hào)”的右邊下拉列表里,選擇你希望分配給U盤的驅(qū)動(dòng)器號(hào),盡可能靠后選擇,比如X、Y、Z,選擇好后,單擊確定按鈕,回到上一次“更改……的驅(qū)動(dòng)器號(hào)和路徑”對(duì)話框窗口,再一次單擊確定,就回到“計(jì)算機(jī)管理”窗口。至此,如果一切正常,就給U盤單獨(dú)設(shè)置了一個(gè)長(zhǎng)久使用的驅(qū)動(dòng)器號(hào),并卻,不受虛擬驅(qū)動(dòng)器的影響了。建議將U盤插到電腦上,看任務(wù)欄中是否顯示圖標(biāo),如果顯示,在我的電腦點(diǎn)右鍵查看屬性——高級(jí)——硬件——設(shè)備管理器——查看里面是否有問(wèn)號(hào)的設(shè)備,在問(wèn)號(hào)設(shè)備上點(diǎn)右鍵——更新驅(qū)動(dòng)程序然后下一步——否暫時(shí)不連接到網(wǎng)絡(luò)——下一步自動(dòng)安裝軟件(推薦)就可以了另外:系統(tǒng)不認(rèn)U盤的幾種處理方法1.禁用主板usb設(shè)備。管理員在CMOS設(shè)置里將USB設(shè)備禁用,并且設(shè)置BIOS密碼,這樣U盤插到電腦上以后,電腦也不會(huì)識(shí)別。這種方法有它的局限性,就是不僅禁用了U盤,同時(shí)也禁用了其他的usb設(shè)備,比如usb鼠標(biāo),usb光驅(qū)等。所以這種方法管理員一般不會(huì)用,除非這臺(tái)電腦非常重要,值得他舍棄掉整個(gè)usb總線的功能。但是這種屏蔽也可以破解,即便設(shè)置了密碼。整個(gè)BIOS設(shè)置都存放在CMOS芯片里,而COMS的記憶作用是靠主板上的一個(gè)電容供電的。電容的電來(lái)源于主板電池,所以,只要把主板電池卸下來(lái),用一根導(dǎo)線將原來(lái)裝電池的地方正負(fù)極短接,瞬間就能清空整個(gè)CMOS設(shè)置,包括BIOS的密碼。隨后只需安回電池,自己重新設(shè)置一下CMOS,就可以使用usb設(shè)備了。(當(dāng)然,這需要打開(kāi)機(jī)箱,一般眾目睽睽之下不大適用~~)2.修改注冊(cè)表項(xiàng),禁用usb移動(dòng)存儲(chǔ)設(shè)備。打開(kāi)注冊(cè)表文件,依次展開(kāi)"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbehci”雙擊右面的“Start”鍵,把編輯窗口中的“數(shù)值數(shù)據(jù)”改為“4”,把基數(shù)選擇為“十六進(jìn)制”就可以了。改好后注銷一下就可以看見(jiàn)效果了。為了防止別人用相同的方法來(lái)破解,我們可以刪除或者改名注冊(cè)表編輯器程序。提示:“Start”這個(gè)鍵是USB設(shè)備的工作開(kāi)關(guān),默認(rèn)設(shè)置為“3”表示手動(dòng),“2”是表示自動(dòng),“4”是表示停用。3.在computermanagement里將removablestorage的使用權(quán)限禁止。computermanagement是一個(gè)windows管理組件,可以在控制面板——管理工具——計(jì)算機(jī)管理打開(kāi)。在該工具窗口中storage——removablestorage——property中,general項(xiàng),可以控制系統(tǒng)托盤是否顯示security則可以管理移動(dòng)存儲(chǔ)設(shè)備的使用權(quán)限。在security中將普通用戶的使用權(quán)限降低,就可以達(dá)到禁用u盤的目的。破解的方法也很簡(jiǎn)單,管理員降低普通用戶移動(dòng)存儲(chǔ)設(shè)備的使用權(quán)限,但未必禁用computermanagement的使用權(quán)限。普通用戶可以通過(guò)這個(gè)工具解除usb移動(dòng)存儲(chǔ)設(shè)備的使用權(quán)限限制。另外,值得一提的是,如果u盤插到電腦上后可以驅(qū)動(dòng),但是我的電腦里卻沒(méi)有盤符,很有可能是管理員改動(dòng)了u盤的默認(rèn)盤符,使得我的電腦不能識(shí)別。這種情況,可以在movablestorage中看到u盤驅(qū)動(dòng)器。可以在u盤驅(qū)動(dòng)器屬性設(shè)置里為u盤重新分配一個(gè)盤符,再重新插拔一次u盤,就可以在我的電腦里看到u盤的盤符了。一、首先可以將該U盤換到別的機(jī)器上,看使用是否正常。如果排除了硬件損壞的可能,一般就是軟件方面有問(wèn)題。在WindowsXP+SP1操作系統(tǒng)下,有些USB2.0設(shè)備的確常常出現(xiàn)工作不穩(wěn)定的問(wèn)題,可以試試安裝設(shè)備自帶的USB2.0驅(qū)動(dòng)程序。另外最好不要使用USB延長(zhǎng)線,防止因?yàn)楣╇姴蛔愣斐刹环€(wěn)定現(xiàn)象。如果仍無(wú)效,可以在主板BIOS設(shè)定中,將USB接口強(qiáng)行設(shè)置為USB1.1傳輸速率。二、(適用于WIN98)啟動(dòng)計(jì)算機(jī),進(jìn)入主板BIOS設(shè)置,檢查BIOS中USB的相關(guān)選項(xiàng)是否已經(jīng)打開(kāi):OnChipUSB設(shè)定為Enabled;USBController設(shè)定為Enabled;PNPOSInstalled設(shè)定為Yes;AssignIRQForUSB設(shè)成Enabled。要正常使用USB設(shè)備首先要開(kāi)啟USB接口,在主板BIOS里可以進(jìn)行此項(xiàng)工作,一般來(lái)說(shuō)只需在BIOS中進(jìn)入ChipsetFeatures設(shè)置,并將USBKeyborad/MouseLegacy選項(xiàng)設(shè)定為Enable,就能夠保證在操作系統(tǒng)下使用USB鍵盤了。這些選項(xiàng)的作用是打開(kāi)主板芯片組對(duì)USB設(shè)備的完全支持,為系統(tǒng)識(shí)別USB設(shè)備做準(zhǔn)備工作。三、USB口接觸不好處理辦法:拔下,等十秒鐘再插上USB口,使接觸完好;五、閃存盤驅(qū)動(dòng)程序沒(méi)有安裝完成(WIN98系統(tǒng)下)處理辦法:鼠標(biāo)點(diǎn)“我的電腦”,選擇屬性找到“通用串行總線”,刪除其中的USBMASSSTORAGE項(xiàng),再點(diǎn)擊“刷新”,然后按照提示重新安裝一次驅(qū)動(dòng)程序。六、接其它USB設(shè)備(如掃描儀、打印機(jī)、數(shù)碼相機(jī))時(shí)可以正常使用,接優(yōu)盤時(shí)閃指示燈不亮,不能夠使用。1、檢查優(yōu)盤與電腦的聯(lián)接是否正常,并換用其它USB接口測(cè)試。2、檢查設(shè)備管理器,看是否出現(xiàn)”通用總線設(shè)備控制器”條目,如果沒(méi)有,請(qǐng)將電腦主板BIOS中USB接口條目*激活(ENABLE)。3、如果電腦安裝過(guò)其它類型USB設(shè)備,卸載該設(shè)備驅(qū)動(dòng)程序,并首先安裝優(yōu)盤驅(qū)動(dòng)程序。4、到其它電腦試用此優(yōu)盤,確認(rèn)是否優(yōu)盤不良。七、啟動(dòng)型優(yōu)盤在的電腦上無(wú)法實(shí)現(xiàn)啟動(dòng),可能是主板型號(hào)不支持。如何判斷一塊主板是否支持閃存盤啟動(dòng)系統(tǒng)啟動(dòng)型優(yōu)盤是采用模擬USB軟驅(qū)和USB硬盤的方式啟動(dòng)電腦的。只要電腦主板支持USB設(shè)備啟動(dòng),即BIOS的啟動(dòng)選項(xiàng)中有USB-FDD、USB-HDD或是其它類似的選項(xiàng),就可以使用啟動(dòng)型優(yōu)盤啟動(dòng)電腦。八、第一次在電腦上使用優(yōu)盤,未出現(xiàn)提示發(fā)現(xiàn)新硬件的窗口,驅(qū)動(dòng)程序無(wú)法安裝的原因可能是:1、主板usbcontroller未啟用解決辦法:在電腦主板BIOS中啟用此功能。2、usbcontroller已經(jīng)啟用但運(yùn)行不正常解決辦法:在設(shè)備管理器中刪除”通用串行控制器”下的相關(guān)設(shè)備并刷新。3、優(yōu)盤被電腦識(shí)別異常,在設(shè)備管理器中表現(xiàn)為帶有黃色?或!的”其它設(shè)備”或“未知設(shè)備”。解決辦法:刪除此設(shè)備并刷新。九、大容量的U盤(例如兼具M(jìn)P3播放器或錄音功能的U盤)或移動(dòng)硬盤在電腦上無(wú)法正常使用,雖然系統(tǒng)提示找到了未知的USB設(shè)備,但無(wú)法正確識(shí)別U盤或移動(dòng)硬盤。原因可能是:1.USB接口供電不足:系統(tǒng)為每個(gè)USB接口分配了500mA的最大輸出電流,一般的U盤只需要100mA的工作電流,因此在使用過(guò)程中不會(huì)出現(xiàn)什么問(wèn)題。大多數(shù)移動(dòng)硬盤所使用的是普通的2.5英寸硬盤,其工作電流介于500mA~1000mA之間,此時(shí)假如僅僅通過(guò)USB接口供電,當(dāng)系統(tǒng)中并無(wú)其他USB設(shè)備時(shí),那么還是可以勉強(qiáng)使用的,但如果電壓不穩(wěn)的話,就隨時(shí)可能出現(xiàn)供電不足的問(wèn)題。特別是使用支持USB2.0的移動(dòng)硬盤時(shí),情況最為嚴(yán)重。另外,如果你的筆記本電腦使用電池供電,那么USB接口所分配的電量就更小了。2.使用了外接的USB擴(kuò)展卡:在筆記本電腦中使用USB2.0的U盤或移動(dòng)硬盤時(shí),如果筆記本電腦不支持USB2.0技術(shù),一般必須通過(guò)PCMCIA卡轉(zhuǎn)USB2.0的擴(kuò)展卡來(lái)間接實(shí)現(xiàn)支持,這些擴(kuò)展卡基本上都采用NEC公司的D720100AGMUSB控制芯片,少則提供兩個(gè)USB2.0接口,多則提供五個(gè)USB2.0接口,對(duì)一般用戶而言足夠使用了。由于PCMICA接口提供的電源功率比板載USB接口要小,這樣就會(huì)由于供電不足而導(dǎo)致移動(dòng)硬盤工作的出現(xiàn)問(wèn)題。解決方案:1.它從USB連接線上接移動(dòng)硬盤的一端引出一根轉(zhuǎn)接線,可以插入電腦背后的PS/2接口取電,這里可以比USB接口提供更大的電流輸出。2.利用電源補(bǔ)償線(也稱“鍵盤取電線”),如果U盤或移動(dòng)硬盤的包裝盒中提供了選配的電源適配器,你就可以直接使用外接電源,這樣就可以從根本上避免供電不足的情況發(fā)生了前置USB線接錯(cuò)。當(dāng)主板上的USB線和機(jī)箱上的前置USB接口對(duì)應(yīng)相接時(shí)把正負(fù)接反就會(huì)發(fā)生這類故障,這也是相當(dāng)危險(xiǎn)的,因?yàn)檎?fù)接反很可能會(huì)使得USB設(shè)備燒毀。所以盡量采用機(jī)箱后置的USB接口,也少用延長(zhǎng)線.也可能是斷口有問(wèn)題,換個(gè)USB端口看下.USB接口電壓不足。當(dāng)把<ahref="mobileharddisk">移動(dòng)硬盤</a>接在前置USB口上時(shí)就有可能發(fā)生系統(tǒng)無(wú)法識(shí)別出設(shè)備的故障。原因是<ahref="">移動(dòng)硬盤</a>功率比較大要求電壓相對(duì)比較嚴(yán)格,前置接口可能無(wú)法提供足夠的電壓,當(dāng)然劣質(zhì)的電源也可能會(huì)造成這個(gè)問(wèn)題。解決方法是<ahref="">移動(dòng)硬盤</a>不要接在前置USB接口上,更換劣質(zhì)低功率的電源或盡量使用外接電源的硬盤盒,假如有條件的話。主板和系統(tǒng)的兼容性問(wèn)題。呵呵這類故障中最著名的就是NF2主板與USB的兼容性問(wèn)題。假如你是在NF2的主板上碰到這個(gè)問(wèn)題的話,則可以先安裝最新的nForce2專用USB2.0驅(qū)動(dòng)和補(bǔ)丁、最新的主板補(bǔ)丁和操作系統(tǒng)補(bǔ)丁,還是不行的話嘗試著刷新一下主板的BIOS一般都能解決。系統(tǒng)或BIOS問(wèn)題。當(dāng)你在BIOS或操作系統(tǒng)中禁用了USB時(shí)就會(huì)發(fā)生USB設(shè)備無(wú)法在系統(tǒng)中識(shí)別。解決方法是開(kāi)啟與USB設(shè)備相關(guān)的選項(xiàng)。就是開(kāi)機(jī)按F2或DEL鍵,進(jìn)入BIOS,把enableusbdevice選擇enable。拔插要小心,讀寫時(shí)千萬(wàn)不可拔出,不然有可能燒毀芯片。XP中任務(wù)欄中多出USB設(shè)備的圖標(biāo),打開(kāi)該圖標(biāo)就會(huì)在列表中顯示U盤設(shè)備,選擇將該設(shè)備停用,然后你再拔出設(shè)備,這樣會(huì)比較安全。

其實(shí)判斷軟件硬件問(wèn)題很簡(jiǎn)單,在別的機(jī)器或換個(gè)系統(tǒng)試試就可以了.有些小的問(wèn)題不妨先用專門軟件格式化下.還有提醒大家WINDOWS下格式化時(shí)要選擇FAT,不要選FAT32。

提示無(wú)法識(shí)別的USB設(shè)備維修

故障提示如圖:

無(wú)法識(shí)別的USB設(shè)備:UnknownUSBDevice.很多人都遇到過(guò)的一個(gè)問(wèn)題,所謂“無(wú)法識(shí)別”對(duì)于操作系統(tǒng)來(lái)說(shuō),或者是驅(qū)動(dòng)程度有問(wèn)題,或者是USB設(shè)備出現(xiàn)了問(wèn)題,或者是計(jì)算機(jī)與US

溫馨提示

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

評(píng)論

0/150

提交評(píng)論