


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