版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
基于Unity的駕駛模擬器的設(shè)計與實現(xiàn)目錄TOC\o"1-3"\h\u第1章緒論 第1章緒論1.1研究背景隨著信息科技與現(xiàn)代計算機的飛速發(fā)展,虛擬增強現(xiàn)實攝影技術(shù)已經(jīng)是20世紀(jì)一項必不可缺的全新一代實用技術(shù)。虛擬人和現(xiàn)實的基本視覺實現(xiàn)技術(shù)方法也就是通過利用計算機技術(shù)模擬的各種虛擬人和現(xiàn)實視覺環(huán)境應(yīng)用來實現(xiàn)給虛擬人世界帶來沉浸式的一門視覺技術(shù)[1]。簡單來說,就是把每個人們完全帶到了一個計算機虛擬世界中,把手機虛擬和增強現(xiàn)實完美結(jié)合在一起來,讓每個人們完全沉浸在其中。虛擬三維現(xiàn)實世界是通過產(chǎn)生一個虛擬三維空間的一種虛擬現(xiàn)實世界,利用虛擬電腦技術(shù)模擬了現(xiàn)實的三維世界。使用手機虛擬連接現(xiàn)實的同時人們都可以直接感受到人的視覺,聽覺和手的觸覺。讓更多人真的能夠身臨其境,可以觀察虛擬現(xiàn)實世界的事物[2]。近年來,隨著汽車擁有人數(shù)的逐年上升,漸漸出現(xiàn)了駕駛員非職業(yè)化、交通臃腫混亂、交通事故頻發(fā)等諸多問題。這些問題的解決辦法可以從提高駕駛員的專業(yè)素質(zhì)、加強駕駛員的駕駛培訓(xùn)等方面考慮。汽車駕駛模擬器作為駕駛培訓(xùn)的新手段,相比于傳統(tǒng)駕校培訓(xùn),能夠提供更加安全、便利、高效以及節(jié)能的培訓(xùn)服務(wù)[4]。虛擬駕駛模擬器成功實現(xiàn)了對駕駛景觀的自動虛擬化和自動數(shù)字化,可以有效幫助駕駛技術(shù)不佳的人深入了解駕駛環(huán)境,對于減少交通事故的發(fā)生具有一定的意義。1.2國內(nèi)外現(xiàn)狀得益于微軟C#語言的簡單易上手,Unity在入門領(lǐng)域內(nèi)的發(fā)展非常順利,尤其是相對于競爭對手Unreal引擎,虛幻引擎所采用的C++語言非常繁瑣復(fù)雜,對于剛剛?cè)腴T學(xué)習(xí)的開發(fā)人員來講,學(xué)習(xí)難度過于陡峭,虛幻引擎的開發(fā)者EPIC這個公司對于PC端大型3A游戲的開發(fā)非常擅長,在2020年,他們曾經(jīng)推出過一段實機演示,在演示中,為了渲染一個比較精致的游戲場景,他們同時渲染了萬億級的多邊形,甚至在一個光照場景下,在沒有專用硬件加速的情況下直接拋棄了傳統(tǒng)的光柵化,實現(xiàn)了實時光線追蹤[5]。Unity可以說是現(xiàn)在全世界比較靠前的幾個專業(yè)游戲開發(fā)引擎之一,它可以實現(xiàn)可視化的2D和3D的影視和動畫以及游戲,并且可以創(chuàng)造虛擬的三維二維空間。當(dāng)前,手機游戲開發(fā)的速度崛起的非常之快,現(xiàn)在已經(jīng)是一個單獨的行業(yè),手游和端游市場現(xiàn)在不想上下。Unity在國內(nèi)發(fā)展起步的晚,雖然近些年不斷的追趕中,還是和國外的技術(shù)有很大的差距[6]。但是由于國內(nèi)近些年手游行業(yè)的發(fā)展,所以公司急需大量的Unity人才。在國內(nèi)做3D手游的開發(fā)引擎大多用Unity。這點是毋庸置疑的,例如:王者榮耀,原神。在國外Unity的發(fā)展前景也是非常好的,現(xiàn)在全球都缺少Unity開發(fā)的人才。全球游戲開發(fā)的相當(dāng)大的一部分都掌握在Unity開發(fā)中。所以Unity的發(fā)展前景非常好。Unity3D不僅可以作用于游戲,還可以作用于各領(lǐng)域如AR在設(shè)計,仿真,測試,維修和維護等領(lǐng)域,使用AR來支持制造及相關(guān)領(lǐng)域的應(yīng)用有很多。虛擬現(xiàn)實交互:使用此類工具,聲音交互設(shè)計師可以有效地模擬彈撥原型,并實現(xiàn)與虛擬儀器的多傳感器交互,從而達到前所未有的目的,例如測試創(chuàng)新的彈撥界面或使用有關(guān)演奏動態(tài)的數(shù)據(jù)訓(xùn)練機器學(xué)習(xí)算法,這些信息可從以下位置立即訪問機器[7]。Unity3d引擎作為一款功能強大的游戲引擎,在中國和國外游戲開發(fā)領(lǐng)域都有著重要作用。Unity3d引擎的開源,使得小的游戲公司,乃至個人開發(fā)游戲的難度大大的降低了?,F(xiàn)有Unity3d引擎可以大幅節(jié)省引擎開發(fā)的時間和成本。團隊也不需要為了一個工具從零開始[8]。也許未來有一天,可能我們只需要確定玩法和風(fēng)格,就能靠引擎自動生成一個足夠真實的游戲世界了。第2章相關(guān)理論和技術(shù)2.1游戲的設(shè)計方法與實現(xiàn)技術(shù)角色扮演類游戲,提供了一個虛擬的游戲世界,該世界提供了一個虛擬的角色供玩家選擇操作,最終以讓玩家實現(xiàn)現(xiàn)實世界所不能實現(xiàn)的事件為目的。自從RPG游戲問世以來,一直再發(fā)展進步到如今,迎來了以專業(yè)游戲引擎支持的時代[9]。2.2Unity3D技術(shù)Unity3D是由丹麥Unity技術(shù)公司開發(fā)的多平臺集成游戲開發(fā)工具,是一款跨平臺的3D引擎,用于制作3D游戲、實時三維動畫等互動內(nèi)容。同時,Unity注重教育產(chǎn)業(yè)發(fā)展,致力于先進工業(yè)技術(shù)與高校課程建設(shè)相結(jié)合,開展各種形式的校企合作[10]。Unity3D編輯頁面主要由五個視圖組成,包括Scene(場景視圖)、Game(游戲視圖)、Hierarchy(層級視圖)、Project(工程視圖)和Inspector(檢測視圖),其中Scene(場景視圖)用于編輯整個游戲世界,以編輯和創(chuàng)建特效[11]。Game(游戲視圖)是游戲發(fā)布后在屏幕上的最后一次顯示。屏幕顯示器的內(nèi)容完全取決于相機照亮的部分??梢酝ㄟ^移動攝像機的位置和旋轉(zhuǎn)Scene(場景視圖)中的角度來調(diào)整Game(游戲視圖)中顯示的內(nèi)容。Hierarchy包含當(dāng)前場景中的所有游戲?qū)ο螅ㄖ苯訉嵗蚰J(rèn)實例。還可以將對象拖動到層次結(jié)構(gòu)視圖中的另一個對象,以形成父子關(guān)系。Project存儲所有項目資源文件,并顯示資源、材料、模型、腳本等。Inspector顯示當(dāng)前對象附帶的所有組件,如三維坐標(biāo)、旋轉(zhuǎn)量、比例值和添加的腳本,以便可以使用每個組件編輯場景中的對象。第3章駕駛模擬場景的設(shè)計3.1需求分析在駕駛模擬訓(xùn)練中的人在回路中就是訓(xùn)練駕駛?cè)藛T在系統(tǒng)的回路中所需要進行的操作和仿真,這種仿真需要對實體的動態(tài)特性進行建模并在VR系統(tǒng)的模擬器上運行。此外還要求有模擬生成人的感覺環(huán)境的各種物理效應(yīng)設(shè)備,包括視覺、聽覺、觸覺、動感等人能感覺的物理環(huán)境,由于有操作人員在回路中,人在回路仿真系統(tǒng)必須實時運行[12]。3.2模塊設(shè)計將前期計劃收集的場景數(shù)據(jù)進行整理之后,對整個駕駛場景里的數(shù)據(jù)模型按照一定的數(shù)據(jù)邏輯結(jié)構(gòu)規(guī)則再來進行綜合組織,采用層次結(jié)構(gòu)的數(shù)據(jù)形式再來進行數(shù)據(jù)模型的綜合組織,有利于場景模型的數(shù)據(jù)構(gòu)建、場景的模型合并以及后期場景結(jié)構(gòu)優(yōu)化等等的維護和運營管理[13]。層次結(jié)構(gòu)就是按照一個特殊物體的不同性質(zhì)類別怎么可以對它進行一種層次上的劃分,同一物體類別的一個物體可以分別作為一個不同物體中的集合,而在每一個不同物體中的集合里又可以再分別進行層次細(xì)分[14]。本系統(tǒng)場景以一個藍(lán)色的大天空下的盒子建筑作為主要背景,可以由各種物體建筑物、道路、草地、其余車輛、行人、樹木等各種物體集合組成,而這些物體建筑物又可以細(xì)分為各個商場、紅綠燈、圖書館等,如本框中的下圖所示。這樣我們才能為你組織一個好的數(shù)據(jù)庫,結(jié)構(gòu)清楚、層次明確。虛擬駕駛場景虛擬駕駛場景建筑物地面天空人綠化商場醫(yī)院圖書館……路人騎行者道路紅綠燈樹木圖3.1系統(tǒng)的總體結(jié)構(gòu)圖3.3流程圖虛擬駕駛系統(tǒng)的整體設(shè)計理念應(yīng)該是力求真實,所以對虛擬駕駛的進行實地考察體驗是很非常有必要的[15]。通過駕駛場景實地考察,分析有關(guān)駕駛所有建筑的主體構(gòu)造,收集有關(guān)駕駛所有建筑的結(jié)構(gòu)圖片等等信息,確定建筑物的比例,做出建筑草圖等以方便建筑模型的設(shè)計構(gòu)建。處理從中收集獲取到的網(wǎng)絡(luò)信息,做出網(wǎng)絡(luò)整體規(guī)劃,構(gòu)建三維立體模型,整合各個應(yīng)用場景與模型,最終設(shè)計形成完整的虛擬駕駛服務(wù)系統(tǒng)。具體的軟件實現(xiàn)工作流程主框圖顯示如下圖所示。開始開始收集數(shù)據(jù)及圖片等信息整理信息,做出草圖構(gòu)建部分場景與模型虛擬校園場景整體拼合完成虛擬校園漫游系統(tǒng)的建立結(jié)束3.2總體設(shè)計的流程圖第4章駕駛模擬場景的實現(xiàn)4.1開發(fā)流程4.1.1系統(tǒng)實現(xiàn)的軟硬件環(huán)境開發(fā)本系統(tǒng)的硬件環(huán)境為:處理器:AMDRyzen54500UwithRadeonGraphics內(nèi)存:16GB雙通道顯卡:CPU集成顯卡開發(fā)本系統(tǒng)的軟件環(huán)境為:操作系統(tǒng):Windows10家庭中文版,64-bit開發(fā)工具:UNITYHUB,Notepad++運行軟件:3dmaxunity3d4.1.2信息的收集與處理本文分析使用的原始立體數(shù)據(jù)主要包括有道路、紅綠燈、行人與商場亭子等各類建筑的立體平面圖和獲取的立體照片等基礎(chǔ)信息。為了有效加強虛擬空間校園真實的準(zhǔn)確數(shù)據(jù)性和有效進行虛擬空間的正確管理分析,以下幾點是該虛擬駕駛系統(tǒng)用的數(shù)據(jù)分析:1.通過網(wǎng)上百度電子地圖(簡稱百度電子地圖)可以測量虛擬駕駛車輛內(nèi)主要對象和與實體的地理距離,然后最終確定主要虛擬駕駛對象實體在整個虛擬現(xiàn)實校園環(huán)境中的地理位置。先把這個主體比如虛擬駕駛車輛與建筑物的大小等的數(shù)據(jù)進行測量整理出來,再通過地圖拼接完成其他的,再根據(jù)對于各虛擬駕駛對象這個實體的在整個虛擬環(huán)境中的所在位置,先給它確定一個新的原點,如虛擬駕駛車輛的起始點,然后通過百度電子地圖(也比如有的百度二維地圖)上的原點測距定位功能,測量出各對象中的實體進入到這個原點的一定距離。2.對于部分大型建筑物的樓層高度,從總體的平面圖和數(shù)據(jù)收集后得到的測量數(shù)據(jù)中不能看出獲取的實際情況,自行計算測量可得出其中一層的建筑高度,然后根據(jù)每個樓層高度數(shù)據(jù)的計算可得出總的高度。此外你還可以直接利用一些虛擬化的測量軟件(例如google和谷歌虛擬地球)等來進行各種輔助性的測量。3.對于這些紋理上的數(shù)據(jù)主要還是采用自己相機拍攝的處理方式。由于照片受風(fēng)景拍攝時的氣候天氣及拍攝周圍環(huán)境的因素影響,拍出的風(fēng)景照片通常不能直接配合使用,需要在照片亮度、色調(diào)上都要做出相應(yīng)調(diào)校。另一方面,拍照者在取景時,可能常常會遇到受照片拍攝角度上的限制、行人或路邊樹木照片摻雜等多種因素的直接影響,照片常常拍攝需要及時進行圖像修復(fù)、剪裁等后期曝光處理。4.2場景搭建4.2.1道路及地形的設(shè)計地形模型在虛擬環(huán)境中應(yīng)用分量很大,它對虛擬駕駛的狀態(tài)真實性和虛擬系統(tǒng)正常運行的狀態(tài)實時性都具有重要作用影響。地形立體對象是設(shè)計虛擬地物虛擬駕駛模型系統(tǒng)的理論基礎(chǔ),是設(shè)計布置虛擬地物地形對象虛擬駕駛的重要依據(jù)。地形動態(tài)對象三維動態(tài)模型的基礎(chǔ)建立建設(shè)是設(shè)計虛擬駕駛必不可少的一個重要關(guān)鍵環(huán)節(jié)。對于一個平面上的地形,可以通過使用unity3d的plane節(jié)點,調(diào)節(jié)一個地形高度長寬高低的數(shù)據(jù),并對其進行地形貼圖。對于不同地形紋理的地形如例如綠地等可創(chuàng)建3dobject等先創(chuàng)建一個地形,再對其進行地形貼圖,可將其疊加在整個大學(xué)校園內(nèi)的地面上。像一些小的丘陵、山脈等都是起伏不平的自然地形,也可以創(chuàng)建地形。但我們大學(xué)基本都是平地,所以在此不需用地形突起。在這里,為了讓地面看起來更生動形象,我選擇了用到3dmax模型里面的仿真路面進行拼接。圖4.1圖4.2是地面設(shè)計層次圖地面地面道路紅綠燈圖4.1地面設(shè)計層次結(jié)構(gòu)圖4.2地面效果圖4.2.2天空的設(shè)計為了大大增加三維校園虛擬場景校園真實場景內(nèi)部背景的視覺真實感,可以在三維校園虛擬場景內(nèi)部增加具有藍(lán)天白云夢幻效果的虛擬天空。根據(jù)不同用戶所實際需要的真實使用程度,可以考慮采用以下多種設(shè)計方法組合來進行實現(xiàn):1.導(dǎo)入Unity3D天空盒通過UNITY3D的Window窗口AssetStore里的資源包進行Unity3D天空盒的導(dǎo)入,點擊商店通過Unity官方資源,找到天空盒資源包,在Unity里打開,導(dǎo)入資源包,再通過拖拽的方式進行天空盒的創(chuàng)建。2.制作天空效果可以通過我們運用一個矩形化的天空盒這種制作方法能幫你制作一個矩形化的天空,所謂矩形化的天空盒就是用一個個矩形的長條用方盒子包起來把它作為一種展示矩形天空的一種視覺遠(yuǎn)景或者天空貼圖的一種視覺載體。首先用戶需要直接生成一個盒子體積必須足夠大的立體矩形模型立方體,通過在這個矩形立方體中的矩形模型盒子的5個不同面上分別直接貼上五個可以直接表現(xiàn)不同高空天氣現(xiàn)象模擬圖像效果的。不同的立體矩形盒子天空天氣圖像及其紋理可以直接達到逼真的高空天氣模擬矩形天氣圖像效果。3.Background節(jié)點中,有兩個域值控制天空的顏色,分別是skyColor和skyAngle。skyColor域指定立體空間背景天空的顏色,該域值由一系列紅、綠、藍(lán)顏色組合而成。skyAngle域指定空間背景上需要著色的位置的天空角。UNITY3D瀏覽器就是在這些空間角所指位置進行著色的。第一個天空顏色著色于天空背景的正上方,第二個天空顏色著色于第一個天空角所指定的位置,第三個天空顏色著色于第二個天空角所指定的位置,以此類推。這樣使天空角之間的顏色慢慢過渡,這就形成了顏色梯度,使得天空看起來更為真實。圖4.3天空效果圖4.2.3建筑物的設(shè)計1.建筑物幾何模型的建立建筑物是三維虛擬中和現(xiàn)實世界中的主要建筑景觀,在眾多虛擬駕駛系統(tǒng)中,三維虛擬建筑物的景觀表示和立體建模設(shè)計是最為重要的設(shè)計內(nèi)容。由于高層建筑物結(jié)構(gòu)數(shù)目眾多,為了較好地準(zhǔn)確實現(xiàn)對高層樓群的搭建的構(gòu)筑建模設(shè)計任務(wù),可以根據(jù)實際設(shè)計情況重新確定其建筑設(shè)計基本原則:(1)根據(jù)校內(nèi)現(xiàn)有建筑的整體外觀與建筑結(jié)構(gòu)對建筑模型進行設(shè)計分類,確定新的構(gòu)造設(shè)計模型,對那些外觀和建筑結(jié)構(gòu)相同的建筑也應(yīng)采用同一個構(gòu)造設(shè)計模型。(2)對于較復(fù)雜的系統(tǒng)模型也可采用新方法拆分,使之更加簡單化,然后再對其進行二次建模。目前對大型建筑物的整體建模一般都是采用一種整體建模法,即首先畫一個圓形立方體或一個長方體,然后再對物體表面紋理進行各種紋理上的映射,構(gòu)造一個建筑物整體模型。2.建筑物的紋理映射建筑物本身并非不是一個空白的大面積平面,一般的大型高層建筑物上幾乎都會特別設(shè)一些玻璃窗戶,貼有各式各樣的彩色玻璃瓷磚。目前對于一個大型建筑物窗口及其內(nèi)部窗戶的各種整體窗口建模一般都主要是通過采用多種典型線段繪圖方法應(yīng)用來直接進行窗口構(gòu)造,及描繪出窗口的大部分概念和結(jié)構(gòu)框架,然后對其窗戶進行整體背景圖的渲染。由于虛擬駕駛環(huán)境中的立體模型建筑物特別多,如果你臨時需要一一對其內(nèi)部進行立體化的建模,會不僅需要我們花費大量的空間計算力和時間,而且嚴(yán)重的會影響了系統(tǒng)的正常工作運行以及處理速度。所以,在本整體設(shè)計處理系統(tǒng)中與其對應(yīng)于整個房屋內(nèi)部墻體及其表面的任何一個窗戶和其他裝飾物的花紋都應(yīng)該可以直接采用類似整體紋理映射建?;ハ嘤成涞恼w設(shè)計處理方法對其整體進行類似紋理映射建模。其基本實現(xiàn)操作方法主要原理是:將場景內(nèi)每個帶有建筑各個主體結(jié)構(gòu)和平面的建筑主體紋理抽象圖像模型數(shù)據(jù)分別實時進行隨機映射采集、加工、轉(zhuǎn)換成一個建筑紋理圖像數(shù)據(jù)庫并映射到制圖所符合要求的建筑紋理圖像格式,之后在建筑主體畫面紋理圖像數(shù)據(jù)繪制的整個操作過程中,分別對每個建筑面分別隨機進行一次建筑紋理圖像數(shù)據(jù)隨機映射。商場周圍場景環(huán)境設(shè)計由立體場上場景設(shè)計和建筑布局立體圖書館以及周圍環(huán)境場景設(shè)計環(huán)節(jié)組成,創(chuàng)建逼真的實景虛擬混合現(xiàn)實三維立體教學(xué)場景。采用了以模塊化,組件化作為設(shè)計指導(dǎo)思想,層次清晰、結(jié)構(gòu)合理的unity3d大型圖書館應(yīng)用場景環(huán)境設(shè)計。主體建筑應(yīng)用場景圖的設(shè)計層次結(jié)構(gòu)方式如圖4.4、圖4.5示。建筑場景設(shè)計建筑場景設(shè)計周邊環(huán)境商場樓梯底座建筑主體樓體附件綠化草坪樹木設(shè)計道路設(shè)計圖4.4建筑設(shè)計層次結(jié)構(gòu)4.5商場大型建筑效果圖4.2.4樹木的設(shè)計時刻保持二維紋理樹林圖像的法線矢量指向觀察者,就可以形成非常真實的三維景觀,從不同的角度觀察均可獲得樹木的較為完整的圖像。在UNITY3D中,Billboard節(jié)點提供了這一功能。通過設(shè)定Billboard中axisOfRotation域,可以規(guī)定樹木的旋轉(zhuǎn)軸。4.6樹木效果圖4.7樹木效果圖4.3系統(tǒng)導(dǎo)出要想在unity3d游戲引擎系統(tǒng)中實現(xiàn)虛擬駕駛的效果,需要定義一個人物視角,讓攝像頭跟在人物視角,用鍵盤鼠標(biāo)控制它的行走跳躍與旋轉(zhuǎn),這便達到了漫游虛擬駕駛的效果。接下來是創(chuàng)建第一視角虛擬駕駛的過程。1.將其人物視角命名為第一人稱駕駛,方便查看信息,在inspector面板上添加人物重力rigidbody組件,以及碰撞器Collider的組件(可以在腳本里添加屬性)2.添加Newscript腳本將其命名為第一人稱虛擬駕駛控制器英文版。3.編寫腳本:添加組件[RequireComponent(typeof(Rigidbody))][RequireComponent(typeof(CapsuleCollider))]publicclassRigidbodyFirstPersonController:MonoBehaviour{publicclassMovementSettings{publicfloatForwardSpeed=8.0f;publicfloatBackwardSpeed=4.0f;publicfloatStrafeSpeed=4.0f;publicfloatRunMultiplier=2.0f; publicKeyCodeRunKey=KeyCode.LeftShift;publicfloatJumpForce=30f;publicAnimationCurveSlopeCurveModifier=newAnimationCurve(newKeyframe(-90.0f,1.0f),newKeyframe(0.0f,1.0f),newKeyframe(90.0f,0.0f));[HideInInspector]publicfloatCurrentTargetSpeed=8f;publicvoidUpdateDesiredTargetSpeed(Vector2input){ if(input==Vector2.zero)return; if(input.x>0||input.x<0) { CurrentTargetSpeed=StrafeSpeed; } if(input.y<0) { CurrentTargetSpeed=BackwardSpeed; } if(input.y>0) { CurrentTargetSpeed=ForwardSpeed; }#if!MOBILE_INPUT if(Input.GetKey(RunKey)) { CurrentTargetSpeed*=RunMultiplier; m_Running=true; } else { m_Running=false; }#endif}#if!MOBILE_INPUTpublicboolRunning{get{returnm_Running;}}#endif}publicCameracam;publicMovementSettingsmovementSettings=newMovementSettings();publicMouseLookmouseLook=newMouseLook();publicAdvancedSettingsadvancedSettings=newAdvancedSettings();privateRigidbodym_RigidBody;//剛體privateCapsuleColliderm_Capsule;//碰撞器privatefloatm_YRotation;privateVector3m_GroundContactNormal;privateboolm_Jump,m_PreviouslyGrounded,m_Jumping,m_IsGrounded;publicVector3Velocity{get{returnm_RigidBody.velocity;}}publicboolGrounded{get{returnm_IsGrounded;}}publicboolJumping{get{returnm_Jumping;}}publicboolRunning{get{ returnmovementSettings.Running; }}privatevoidStart(){m_RigidBody=GetComponent<Rigidbody>();m_Capsule=GetComponent<CapsuleCollider>();mouseLook.Init(transform,cam.transform);}privatevoidUpdate(){RotateView();if(CrossPlatformInputManager.GetButtonDown("Jump")&&!m_Jump){m_Jump=true;}}privatevoidFixedUpdate(){GroundCheck();Vector2input=GetInput();if((Mathf.Abs(input.x)>float.Epsilon||Mathf.Abs(input.y)>float.Epsilon)&&(advancedSettings.airControl||m_IsGrounded)){Vector3desiredMove=cam.transform.forward*input.y+cam.transform.right*input.x;desiredMove=Vector3.ProjectOnPlane(desiredMove,m_GroundContactNormal).normalized;desiredMove.x=desiredMove.x*movementSettings.CurrentTargetSpeed;desiredMove.z=desiredMove.z*movementSettings.CurrentTargetSpeed;desiredMove.y=desiredMove.y*movementSettings.CurrentTargetSpeed;if(m_RigidBody.velocity.sqrMagnitude<(movementSettings.CurrentTargetSpeed*movementSettings.CurrentTargetSpeed)){m_RigidBody.AddForce(desiredMove*SlopeMultiplier(),F(xiàn)orceMode.Impulse);}}if(m_IsGrounded){m_RigidBody.drag=5f;if(m_Jump){m_RigidBody.drag=0f;m_RigidBody.velocity=newVector3(m_RigidBody.velocity.x,0f,m_RigidBody.velocity.z);m_RigidBody.AddForce(newVector3(0f,movementSettings.JumpForce,0f),F(xiàn)orceMode.Impulse);m_Jumping=true;}if(!m_Jumping&&Mathf.Abs(input.x)<float.Epsilon&&Mathf.Abs(input.y)<float.Epsilon&&m_RigidBody.velocity.magnitude<1f){m_RigidBody.Sleep();}}else{m_RigidBody.drag=0f;if(m_PreviouslyGrounded&&!m_Jumping){StickToGroundHelper();}}m_Jump=false;}privatefloatSlopeMultiplier(){floatangle=Vector3.Angle(m_GroundContactNormal,Vector3.up);returnmovementSettings.SlopeCurveModifier.Evaluate(angle);}privatevoidStickToGroundHelper(){RaycastHithitInfo;if(Physics.SphereCast(transform.position,m_Capsule.radius*(1.0f-advancedSettings.shellOffset),Vector3.down,outhitInfo,((m_Capsule.height/2f)-m_Capsule.radius)+advancedSettings.stickToGroundHelperDistance,Physics.AllLayers,QueryTriggerInteraction.Ignore)){if(Mathf.Abs(Vector3.Angle(hitInfo.normal,Vector3.up))<85f){m_RigidBody.velocity=Vector3.ProjectOnPlane(m_RigidBody.velocity,hitInfo.normal);}}}privateVector2GetInput(){Vector2input=newVector2{x=CrossPlatformInputManager.GetAxis("Horizontal"),y=CrossPlatformInputManager.GetAxis("Vertical")}; movementSettings.UpdateDesiredTargetSpeed(input);returninput;}privatevoidRotateView(){//avoidsthemouselookingifthegameiseffectivelypausedif(Mathf.Abs(Time.timeScale)<float.Epsilon)return;//gettherotationbeforeit'schangedfloatoldYRotation=transform.eulerAngles.y;mouseLook.LookRotation(transform,cam.transform);if(m_IsGrounded||advancedSettings.airControl){//RotatetherigidbodyvelocitytomatchthenewdirectionthatthecharacterislookingQuaternionvelRotation=Quaternion.AngleAxis(transform.eulerAngles.y-oldYRotation,Vector3.up);m_RigidBody.velocity=velRotation*m_RigidBody.velocity;}}///spherecastdownjustbeyondthebottomofthecapsuletoseeifthecapsuleiscollidingroundthebottomprivatevoidGroundCheck(){m_PreviouslyGrounded=m_IsGrounded;RaycastHithitInfo;if(Physics.SphereCast(transform.position,m_Capsule.radius*(1.0f-advancedSettings.shellOffset),Vector3.down,outhitInfo,((m_Capsule.height/2f)-m_Capsule.radius)+advancedSettings.groundCheckDistance,Physics.AllLayers,QueryTriggerInteraction.Ignore)){m_IsGrounded=true;m_GroundContactNormal=hitInfo.normal;}else{m_IsGrounded=false;m_GroundContactNormal=Vector3.up;}if(!m_PreviouslyGrounded&&m_IsGrounded&&m_Jumping){m_Jumping=false;}}}4.4平臺測試軟件安全測試的最終目標(biāo),就是為了能夠更快、更早地將一個軟件開發(fā)產(chǎn)品或?qū)I(yè)軟件開發(fā)系統(tǒng)中所可能存在的各種安全問題徹底找出原因來,并通過促進軟件開發(fā)各類技術(shù)人員盡快地有效解決各種問題,最終及時地向廣大客戶要求提供一個安全高質(zhì)量的專業(yè)軟件開發(fā)產(chǎn)品,使一個軟件開發(fā)系統(tǒng)更好地能夠滿足用戶的實際需求,同時也能滿足一個軟件開發(fā)組織自身的發(fā)展要求[16]。4.4.1系統(tǒng)測試環(huán)境為了能夠讓本次的系統(tǒng)測試能夠在較普通的家用機器上順利的正常運行,系統(tǒng)測試所要將選用的計算機配置為家庭版,具體的系統(tǒng)配置方法如下:處理器:AMDRyzen54500UwithRadeonGraphics內(nèi)存:16GB硬盤空間:500GB顯卡:CPU集成顯卡網(wǎng)卡:集成10/100/1000以太網(wǎng)卡操作系統(tǒng):Windows10家庭中文版網(wǎng)絡(luò)協(xié)議:TCP/IP瀏覽器:InternetExplorer8.0以上插件:BScontact8.04.4.2測試結(jié)果與優(yōu)化測試的主要評測內(nèi)容為虛擬駕駛系統(tǒng)的發(fā)布之后的整體瀏覽效果。本系統(tǒng)正常運行的測試結(jié)果表明虛擬駕駛系統(tǒng)基本上都能正常且良好的正常運行,用戶基本能以不同的聽覺視點從不同的視覺角度快速進行操作瀏覽。表1優(yōu)化前后結(jié)果對比所用到的方法測試結(jié)果DEF、USE設(shè)置visibilityLimit使用LOD初次加載速度(秒)流暢程度否否否12.2不流暢是否否10.3較不流暢否是否8.7一
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版電力工程項目居間代理傭金服務(wù)合同2篇
- 二零二五版電子商業(yè)買賣合同模板3篇
- 二零二五年度工地鋼管外架施工環(huán)保設(shè)施設(shè)計與安裝承包合同3篇
- 白葉2025版離婚協(xié)議中共同財產(chǎn)分割及子女撫養(yǎng)費用支付合同二零二五年度3篇
- 二零二五版30天退換租免傭租賃服務(wù)合同2篇
- 二零二五年生活垃圾收運一體化服務(wù)合同2篇
- 二零二五年度神東派遣工權(quán)益同工同酬合同3篇
- 2025年度彩鋼圍擋施工及租賃一體化合同3篇
- 二零二五年度食品安全風(fēng)險評估模型構(gòu)建合同3篇
- 二零二五年度鋼筋產(chǎn)品研發(fā)與技術(shù)轉(zhuǎn)移合同3篇
- 優(yōu)秀支行行長推薦材料
- 公司設(shè)備轉(zhuǎn)讓合同協(xié)議書
- 2023年全國統(tǒng)一建筑工程預(yù)算工程量計算規(guī)則完整版
- 教科版四年級科學(xué)下冊第三單元巖石與土壤4.制作巖石和礦物標(biāo)本(教學(xué)設(shè)計)教案
- 大學(xué)《工程力學(xué)》期末考試試題庫含詳細(xì)答案
- 2022年湖北省武漢市中考數(shù)學(xué)試卷含解析
- TLFSA 003-2020 危害分析與關(guān)鍵控制點(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護區(qū)保護成效評估技術(shù)導(dǎo)則第3部分:景觀保護
- 紀(jì)律教育月批評與自我批評五篇
- GB/T 26480-2011閥門的檢驗和試驗
- GB/T 13342-2007船用往復(fù)式液壓缸通用技術(shù)條件
評論
0/150
提交評論