摘要:隨著計算機(jī)網(wǎng)絡(luò)的發(fā)展和信息化技術(shù)的整合升級,很多高校都實現(xiàn)了自己的校園漫游系統(tǒng),但大部分高校的校園瀏覽系統(tǒng)借助二維圖形技術(shù)實現(xiàn),瀏覽的身臨其境和景物的真實度較差,不能為用戶提供良好的使用體驗。隨著數(shù)字化技術(shù)的不斷發(fā)展以及VR技術(shù)的興起,漫游瀏覽系統(tǒng)在漫游方式上發(fā)生了翻天覆地的變化。用戶可以借助Unity3D開發(fā)VR設(shè)備,能夠在自然、逼真且沉浸感強(qiáng)的虛擬校園中進(jìn)行瀏覽,感知更加精準(zhǔn)化,交互方式更加多維性。
關(guān)鍵詞:校園漫游;VR技術(shù);Unity3D
中圖分類號:G642 ? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2022)31-0096-03
1 引言
在新冠肺炎疫情暴發(fā)的大背景下,很多校園在封閉管理的情況下,為了維持學(xué)生的學(xué)習(xí)進(jìn)度,開啟了網(wǎng)絡(luò)教學(xué),例如網(wǎng)絡(luò)課堂教學(xué),或是以網(wǎng)絡(luò)直播的方式進(jìn)行。但筆者認(rèn)為,在線教學(xué)只是滿足學(xué)生在學(xué)習(xí)上的需求,社交需求、辦公需求等很多需求,戶外運動需求是無法滿足的。
以設(shè)備安裝、場景漫游、互動展示為例,設(shè)計了包含教室會議、課堂互動等一體的Unity3D模擬場景,形成適合學(xué)生生活學(xué)習(xí)的校園模擬仿真立體化系統(tǒng),通過游戲手柄、射線等方式對房屋進(jìn)行場景漫游,為學(xué)生提供互動真實的漫游體驗。
2 Steam VR Plgin
1) 擁有Unity和HTC Vive
①Unity官網(wǎng)https://unity.cn/下載。
②HTC官方旗艦店各方電商網(wǎng)站均有。
2) Steam VR Plugin的下載
①Asset Store中搜索Steam VR Plugin。
②下載并導(dǎo)入插件。
③打開SteamVR文件夾,查看Prefabs。
3) 配置攝像機(jī)以及對應(yīng)的控制器
把插件中的腳本SteamVR_Camera掛到任一camera上,然后點擊expand即可。而對于控制器手柄,則先建立一個游戲物體,接著進(jìn)行腳本SteamVR_ControllerManager添加操作,并構(gòu)建2個相關(guān)子游戲物體,按照系統(tǒng)配置需要,進(jìn)行腳本SteamVR_TrackedObject添加操作,并將相應(yīng)的Index設(shè)置為None,接著完成左右兩個手柄添加;最后再在兩個子游戲物體上各添加一個游戲物體,添加腳本SteamVR_RenderModel用于渲染手柄的模型,并且跟蹤手柄的位置。至此,就可以完成設(shè)置并開展工程了。
3 關(guān)于Steam VR插件中的代碼事件
3.1 SteamVR_GazeTracker.cs 提供凝視時的事件
這個腳本的作用是判斷當(dāng)前物體是否被用戶(頭顯)注視,進(jìn)入注視后會出現(xiàn)回調(diào),離開注視時也會出現(xiàn)回調(diào)。在注視狀態(tài)下的物體與實際注視點的距離范圍被定義為小于0.15米,而在0.4米以上離開注視狀態(tài)的距離范圍。之所以有一個大致的范圍,并且使用了一個平面進(jìn)行相交,是因為注視這個動作比較粗糙,玩家想要精準(zhǔn)地觀看難度比較大。
3.2 SteamVR_LaserPointer.cs 應(yīng)該是鐳射光線
這個腳本的作用與上面的SteamVR_GazeTracker相關(guān)并類似。GazeTracker是通過頭顯的正視方向與物體相交來計算交點的。而這里就是通過所謂的激光束來和物體進(jìn)行交互的。激光束是手柄指向的方向,在游戲中可以渲染出一個方向的激光束,特別是通過手柄進(jìn)行UI操作菜單的時候。在github openvr的sample目錄下的unity_teleport_sample示例有使用,它被加到右手柄上同上面的GazeTracker一樣,觸發(fā)的事件所帶的參數(shù)。
3.3 SteamVR_Teleporter.cs 傳送功能
此腳本在github上的openvr的samples里面的unity_teleport_sample示例中有使用,從名字上看是用來做瞬移的。這個例子是在場景中放一些球,然后把這個腳本放在右邊的控制器上,也就是通過右邊的控制器可以做瞬移。其做法是會從控制器上發(fā)出激光束,按下扳機(jī)鍵,就能瞬間移動到激光束所指之處。通過觀察球的相對位置,可以看出位置的變換。這在游戲中很常見,拿鼠標(biāo)一點,被操作的對象就會過去(當(dāng)然過去有兩種方式,一種是慢慢走過去,一種是直接跳過去),另一種是看到的校園地圖。
3.4 SteamVR_TestThrow.cs 投擲東西
這個腳本上面的測試場景的控制腳本,要與SteamVR_TrackedObject一起使用。實際上它會加到手柄上。
3.5 SteamVR_TrackedController.cs 手柄按鈕事件的接口
這個腳本對控制器的輸入做了一個簡單的封裝,將原始的輸入數(shù)據(jù)轉(zhuǎn)化成事件回調(diào)模式,它在SteamVR_LaserPointer.cs和SteamVR_Teleporter.cs中有使用,也就是在github上openvr中的teleporter示例中有使用。在SteamVR_Teleporter.cs中,如果當(dāng)前物體上沒有SteamVR_TrackedController.cs,會自動添加它(在老版的插件中,如果沒有添加,會報錯)。
4 VRTK實現(xiàn)與Vie控制器的交互
4.1 觸摸交互對象(VRTK_InteractTouch)
將腳本T進(jìn)行添加,主要是添加到之前設(shè)置的控制器上,尤其是觸摸交互類型的那種腳本。
4.2 抓取交互對象(VRTK_InteractGrab)
VRTK與Vie控制器交互,在控制器中需運用抓取腳本以及VRTK_ControllerEvents腳本,后者可對按鈕事件作出監(jiān)聽,并參照實際操作需要,迅速判斷獲得是否存在AliasGrabOn或AliasGrabOff 事件,從而明確對象后續(xù)應(yīng)如何處理,如是否應(yīng)進(jìn)入抓取環(huán)節(jié)或是否應(yīng)進(jìn)入釋放環(huán)節(jié)。
控制器對象可運用VRTK_InteractTouch 腳本,以獲知何時可交互對象能夠被觸摸。僅有可被觸摸的物品方可抓取。
若控制器在運行過程中,同時滿足下述兩項條件:一是,觸碰到VRTK_InteractableObject腳本;二是,isGrabbable 標(biāo)志位呈現(xiàn)為“真”。此時判定該游戲?qū)ο罂勺ト?,則按下相應(yīng)的抓取按鈕,使得抓取對象以及對其對象能夠被放至控制器,直至松開該按鈕進(jìn)行釋放操作。
松開抓取按鈕,此時若互動對象能夠被抓取,可能夠按一定速率往松開方向逐步推進(jìn),即完成模擬拋擲操作任務(wù)。
可交互物體在達(dá)成碰撞體激活條件之后能夠完成觸發(fā),在此狀態(tài)下剛體可實施拾取操作,進(jìn)而達(dá)成移動目的。
4.3 使用可交互對象(VRTK_InteractUse)
一種腳本而且是可交互使用、添加至[CameraRig] 之前設(shè)定的相關(guān)控制器的對應(yīng)目標(biāo)對象,此后還需要進(jìn)行另外的一個步驟,比如說是把VRTK_ControllerEvents用來做其他的流程,比如是進(jìn)行監(jiān)聽。這種監(jiān)聽要監(jiān)聽特定的事件,比如AliasUseOn 和AliasUseOff,從而確定是否應(yīng)該繼續(xù)進(jìn)行下去,還是說需要進(jìn)行停止的程序。
在這時,還需要考慮其他的因素,比如添加VRTK_InteractTouch,從而來決定什么時候可以接觸,什么時候不可以接觸?;究梢源_定的是進(jìn)行有效的接觸才能產(chǎn)生有效使用。
如果說發(fā)生了以下的情況,如觸碰VRTK_InteractableObject 腳本同時isGrabbable 標(biāo)志位呈現(xiàn)為“真”,此時表示“有效”。
4.4 自動抓取可交互對象(VRTK_ObjectAutoGrab)
對VRTK_ObjectAutoGrab腳本作出進(jìn)一步的處理和應(yīng)用,比如把它放到控制器上,然后再進(jìn)行之后的抓取步驟,從而實現(xiàn)自動這一程序和要求。之后可以接著進(jìn)行下一次操作,比如把[CameraRig] 進(jìn)行添加,主要是添加到控制對象上,之后再次添加
VRTK_InteractGrab 腳本。在進(jìn)行Clone Grabbed Object的步驟中,如果進(jìn)行以下操作也就是勾選,那么這樣一來會添加到控制器上,其他的就會留在之前的場景中。
5 簡單激光指針與傳送(VRTK_SimplePointer)
簡單指針腳本從控制器尾部發(fā)出一個光束來控制世界指針,控制玩家瞬間轉(zhuǎn)移。
這在場景中對指向?qū)ο笫怯杏玫?,它可以判斷所指向的對象使用控制器抓起與握住物體,使用控制器與物體互動。
期間默認(rèn)激光射線通過控制器的抓握鍵來激活。偵聽的事件是把游戲物體變成交互式的UI元素,所以相關(guān)的文件都存放在VRTK這個文件中,此文件可以通過復(fù)制完成到現(xiàn)有的所有工程中。
簡單指針腳本添加到預(yù)制里的控制器對象上,同時添加需要腳本來監(jiān)聽啟用和禁用光束的控制器按鈕事件,Examples文件夾包括了該工具集中的實例的場景中。
5.1 可調(diào)節(jié)性的垂直高度傳送器(VRTK_HeightAdjustTeleport)
該傳送器能夠結(jié)合傳送位置,判斷目標(biāo)對象是否位于其余對象的頂部區(qū)域,因此可以改變相應(yīng)的y位置,從而滿足實際調(diào)節(jié)需要。
和建好場景之后,直接加到游戲場景中,無須多余的操作。當(dāng)開始運行時,從頭盔就可以看到兩個控制器手柄。
Play Space Falling 選項表示參與者頭盔在處于對象上方時,此時可直接判斷是否能夠自動傳送至其他對象頂部位置,在模擬爬梯操作時具有實踐意義,無須通過指針光束進(jìn)行定位。若不勾選此選項,玩家就可以在所站物體的相同Y高度(即物體外部有一部分游玩區(qū))的空中行走。
激光束默認(rèn)按控制器上的抓握鍵Grip來激活。在預(yù)制體下面的控制器對象上,并且對外提供事件處理監(jiān)聽器。原因是系統(tǒng)菜單按鈕行為是Steam平臺提供的,它不能被覆蓋。
5.2 基礎(chǔ)性物理傳送器(VRTK_BasicTeleport)
基礎(chǔ)傳送器的實時性,直接由彈性變形元件感測壓力帶動指針變動。 基礎(chǔ)傳送器腳本采用精密壓力矯正器或者是物理系統(tǒng)重量設(shè)置傳送器。
靜止壓力與差型號經(jīng)過傳送器后產(chǎn)生位移,當(dāng)彈力膜收到張力,將電阻力量與剛體形變拉長,變細(xì),即可崩壞以及彈力增大。
5.3 貝瑟爾指向性地添加性控制器
可將腳本添加至[CameraRig]中所預(yù)制形成的控制器。
最重要的是開始使用函數(shù)中調(diào)用游戲體發(fā)射的函數(shù),該函數(shù)實例化一個子類游戲體,對游戲體的剛體施加一定的力,發(fā)射出去之后,經(jīng)過一段時間即可銷毀。VRTK_ControllerEvents腳本可用于監(jiān)聽按鈕開關(guān)光束。
在開始運行時,設(shè)置一個旋轉(zhuǎn)速度,在結(jié)束運動時候設(shè)置為0,這實現(xiàn)了通過觸發(fā)器的時候膠囊體是一直旋轉(zhuǎn)的,松懈時可以立刻停止。貝瑟爾生成的激光射線并不是直線,而是曲線,允許用戶在消失的物體頂端爬動。
5.4 頭部裝置設(shè)定淡出顯示碰撞器
該設(shè)置可以了解參與者VR頭盔何時會觸碰其他相關(guān)游戲?qū)ο?,此時會形成一個單色。目的是處理玩家將頭放入一個游戲?qū)ο笾?,就是文章所提到的菟葵,能夠獲知對象內(nèi)部裁剪情況,并不是如預(yù)期一般。
這一情況主要是由于若參與者將頭擺放至不應(yīng)擺放的位置,則會形成一種特定顏色(比如紅色),而不是綠色。這會讓玩家意識到自己做錯了事情,然后可能自然而然地就會反觀自己的行為是否出錯。若頭盔發(fā)生碰撞,那么傳送行為將被立刻禁止,防止有類似穿墻的外掛行為發(fā)生 。
5.5 呈現(xiàn)碰撞結(jié)束標(biāo)記
虛擬現(xiàn)實用戶在游戲呈現(xiàn)上有身體的概念,可結(jié)合用戶自身所處位置,采取持續(xù)沖撞的方式強(qiáng)化身體概念。在整個游戲過程中,碰撞及剛性車身能夠防止游戲玩家出現(xiàn)穿墻或其他實體碰撞物的情況。在系統(tǒng)設(shè)計中,碰撞體高度一般與玩家頭盔具體高度相關(guān),若玩家蹲下或者需要上坡或者下坡,碰撞體收縮的幅度一樣大,這就意味著在較低的空間里可能會去蹲下爬行通過。
參考文獻(xiàn):
[1] 李歡.基于Unity+3D的室內(nèi)VR仿真設(shè)計[J].科技創(chuàng)新與應(yīng)用,2019(10):40-42.
[2] 朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J].計算機(jī)系統(tǒng)應(yīng)用,2012(10):36-39.
【通聯(lián)編輯:李雅琪】
收稿日期:2022-04-11
基金項目:廣東省普通高校青年創(chuàng)新人才類項目:《基于VR技術(shù)的虛擬校園漫游系統(tǒng)的開發(fā)與研究》(編號:2019GKQNCX001)
作者簡介:劉順裕,男,廣東江門人,本科,主要研究方向為計算機(jī)應(yīng)用技術(shù)、數(shù)字媒體技術(shù)。