VR 室設展示虛擬實境是一種即時運算產生的 3D 虛擬空間的互動技術,現階段技術可提供視覺、聽覺、觸覺、嗅覺上的模擬與各種互動,為玩家帶來身歷其境的感受。Unity VR 可運用在娛樂、產品行銷、教育訓練等多個領域,這個 VR 展示使用 Unity 遊戲引擎開發,可支援 Meta Quest 2 與 VIVE Focus 3 虛擬實境裝置。
提供 Meta Quest 2 的 APK 檔案,使用 SideQuest 安裝到 Meta Quest 2 使用 [ 下載 ] 連結 [ VR 模型設置 ] [ 材質替換功能 ] [ VR 玩家角色 ] [ 電視遙控 ] [ 開門動畫 ] 建立 URP 專案,可提供更好的 VR 視覺效果並支援 Meta Quest 2 / VIVE Focus 3 設備。 教學內容使用 Japanese Apartment 日式公寓模型示範 [ 連結 ] Hurricane VR - Physics Interaction Toolkit 2.9 [ 連結 ] 這個 VR 室內設計展示提供材質樣式球的設計,玩家可以透過直覺操作快速改變室內的材質。 為了提供更換房間天花板、牆壁、地板材質的功能,模型需要先使用 3D 軟體拆成不同物件。 一、模型設置 材質替換與波紋效果。
1. 開啟 [ JP_Apartment > Scenes ] 資料夾的 Apartment 場景,建議另存新檔,保留原始的展示場景。 將 Apartment 展開後將 apartment01 替換成拆解的模型,再將材質套用回對應的天花板、牆壁、地板。 2. 將 Apartment 複製出一個並重新名命為 Apartment_Effect 給波紋效果使用,接著新增標籤 Wall、WallEffect、floor、floorEffect、Ceiling、CeilingEffect 稍後將會用到。 3. 將拆好的 Apartment 模型展開,將天花板、牆壁、地板並加上 Mash Collider 碰撞器,再加上 作為觸發區的 Box Collider 調整厚度與牆面的距離控制在約 0.015 左右並將 Is Trigger 勾選,修改標籤: 設定天花板 = Ceiling / 牆壁 = Wall / 地板 = Floor ★
波紋效果 1. 開啟 [ SineVFX > ForceFieldEffects > Prefabs > CompleteEffects ] 資料夾,將 ForceFieldBasic01 預製物件拖曳到 Hierarchy 視窗,使用 Unpack 斷開連結,並重新命名為Effect 再將 ForceFieldMeshes 子物件刪除,將複製出來的 Apartment_Effect 模型拖曳到 Effect 物件下成為子物件,再將 ControlParticles 拖曳到 Apartment_Effect 底下成為子物件。 2. 選取 Effect 物件並使用 Inspector 屬性編輯器的 ForceFieldController (Script) 設定,接著點擊一下 Material Layers 下的 ForceFieldDistortion01 材質球將直接開啟材質球的位置,在 Project 視窗中將ForceFieldDistortion01 複製出一個並重新命名為 floor_Effect,修改渲染方式為 SineVFX / ForceFieldAndShieldEffects / ForceFieldBasicTriplanarMultipleLWRP。 3. 再次選取 Effect 物件並看到 Inspector 屬性編輯器下的 ForceFieldController (Script),將修改好的 floor_Effect 拖曳到 Material Layers 下的 Element 1 欄位中,將 Apartment_Effect 物件拖曳到 Get Renderers In Children 欄位中。 4. 將 Apartment_Effect 下的 天花板、牆壁、地板命名為適當的名稱並修改標籤為對應的 WallEffect、floorEffect、CeilingEffect ,再加上 Mash Collider 網格碰撞器。 5. 將各 Effect 用模型的 Mesh Renderer 關閉,並修改底下的 Materials 數量改為 0,完成模型的設置。 6.建立 ControlParticlesSpawner.cs 腳本,程式碼如下: ★ ((( ParticlesSpawnerController )))
7. 將此腳本套用到 Apartment_Effect 下的子物件(例如:Wall_Living_Effect 物件,注意 ControlParticles 不需要套用),接著將 Apartment_Effect 下的 ControlParticles 粒子物件拖曳到 ControlParticlesSpawner (Script) 元件下的 Cps 欄位中,最後再將 Bullet Tag 欄位中輸入 SineBullet,再將設置好的 ControlParticlesSpawner 複製並貼上到其他模型物件上。 8. 建立 EffectMeshOff.cs 腳本,程式碼如下: 9. 將此腳本套用到 Apartment_Effect 下的 模型物件上即可完成(注意 ControlParticles 不需要套用)。 二、材質球 (組合與樣式球) 建立組合 1. 開啟 [ HurricaneVR > TechDemo > Scenes ] 資料夾的 scene_examples 場景,將 SocketExamples 物件展開 SocketExamples > table (1) 將 Small Sockets 物件 CTRL+C 複製並回到自己的場景後按下 CTRL+V 貼上。 2. 展開 Small Sockets 並將 Small Sockets 下不需要的 Readme 與 GameObject 刪除,可將父物件重新命名為 BallSpawnerCreator_Ceiling ( 設置給天花板用的組合 ) 將子物件也重新命名為 BallSpawner ( 生成樣式球用 ),並依需求設置數量與排列(這裡以一行三列示範)。 3. 將調整完成的 BallSpawnerCreator_Ceiling 複製兩個並各自命名為 BallSpawnerCreator_Wall (牆壁用) 與 BallSpawnerCreator_Floor (地板用),完成。
建立樣式球 1. 建立一個 Sphere 並重新命名為 Ceiling_Materials_1 (先以天花板材質球為例),並套用上適當的材質球(例如:apartment_ceiling01_1),可將材質球複製一個並重新命名為 VR ceiling 01 作為替換用。 2. 建立 MaterialBall.cs 腳本,程式碼如下: 3. 將此腳本套用到 Ceiling_Materials_1 物件,接著將 MaterialBall (Script) 下的 Tag Name 欄位輸入 Ceiling;Effetc Tag Name 欄位輸入 CeilingEffet(此為天花板用),Ceiling_Materials_1 物件的標籤修改為 SineBullet。 4. 在 Ceiling_Materials_1 物件上加上 HVR Grabbable (Script) 與 HVR Tag Socketable (Script) 腳本元件,接著看到 HVR Tag Socketable (Script) 腳本元件下的 Tags 欄位點選並選擇 HVR Example Socketables,最後點開在下方的下拉選單並勾選 Small Item 即可。 5. 將 Ceiling_Materials_1 複製出兩個並重新命名為 Wall_Materials_1 與 Floor_Materials_1,再將物件各自的 MaterialBall (Script) 下的 標籤名稱修改為以下名稱: Wall_Materials_1,Tag Name 欄位輸入 Wall;Effetc Tag Name 欄位輸入 WallEffect。 Floor_Materials_1,Tag Name 欄位輸入 floor;Effetc Tag Name 欄位輸入 floorEffect。 基礎樣式球完成。 6. 後續新增樣式球只需要將 Material 材質套用到三種類型的樣式球上並設置為獨立的預製物件即可。
將樣式球放入組合 1. 將樣式球依照需求建立出數個預製物件,這裡建立3個為範例,將 BallSpawnerCreator_Ceiling 組合展開並點選 BallSpawner 子物件,接著看到 Inspector 屬性編輯器下 HVRSocket (Script) 的 Aoto Spawn Prefab 欄位,並將 Ceiling_Materials_1 預製物件拖曳到此欄位中,完成。 2. 依照上述方式將預製的樣式球各自放入生成欄位即可完成。 三、VR 玩家設置 1. 新增一個空物件並命名為 HVRGlobal 接著再套用 HVR Manager、HVR Input Manager、HVR Dont Destroy 三個腳本元件,接著看到 HVR Input Manager (Script) 下的 Oculus - Requires Oculus Asset + Integration 下的 Force OVR Input Update 勾選。 2. 將對應的設定檔套用到對應的欄位中。如下圖: 3. 開啟資料夾 [ Assets > HurricaneVR > Framework > Integrations > Oculus > Prefabs ] 將 Oculus XRRig Variant 玩家預製物件拖曳到 Hierarchy 視窗中。 4. 將 Oculus XRRig Variant 展開並點選 PlayerController 子物件,接著在 Inspector 屬性編輯器看到 HVR Player Controller (Script) 下的 Can Crouch 並取消勾選。 5. 建立 HandObjectManager.cs 腳本,程式碼如下: 6. 將此腳本套用到 PlayerController 物件,並將 PlayerController 物件再拖曳到 Hand Object Manager (Script) 元件下的 HVR_Player 欄位中,接著將 Oculus XRRig Variant 底下的 RightHand 子物件拖曳到 Hand Object Manager (Script) 元件下的 Right Hand 欄位中。 7. 選取 RightHand 物件並在物件上新增一個 Sphere Collider 並調整位置與大小 (位置約 X : 0.03 , Y : 0 , Z : 0.1,大小約 0.01),再將 Is Tirgger 勾選,碰觸區設置完成。 使用 Inspector 的 Tag 下拉選單展開並點選 Add Tag 新增一個 Hand 標籤,將 RightHand 物件的標籤修改為 Hand。★ 8. 點選 LeftHand 物件並在底下新增一個空物件並命名為 UIPos 作為樣式球組合呼叫時的吸附點,調整到適當的位置 ( 約為 X : 0.2 ,Y : 0 ,Z : 0 ) ,接著點選 PlayerController 物件並看到 Hand Object Manager (Script) 底下的 Left Hand UI Pos 欄位並將 UIPos 物件拖曳到欄位中。 9. 看到 Hand Object Manager (Script) 底下的 UI Object、UI Object 2、UI Object 3 欄位,並將先前製作好的 BallSpawnerCreator_Ceiling、BallSpawnerCreator_Wall、BallSpawnerCreator_Floor 三個組合拖曳到欄位中。如下圖:
四、控制電視 電視設置 1. 展開 Apartment 物件並將 tv01 與 remote-control03 物件拖曳出來成為獨立物件,接著在 tv01 底下新增一個 Quad 物件並命名為適當名稱,例如:TV Scene。 2. 建立一個新材質球並命名為 TV Scene 並套用給 TV Scene 物件,接著將材質球的 Scene 變更為 Unlit / Texture。 3. 將準備好的 MP4 影片檔拖曳到 TV Scene 物件上並看到 Inspector 屬性編輯器下的 Video Player 元件,將 Loop 勾選並將 Render Mode 修改為 Material Override,接著按下 Play 測試畫面是否正常顯示,最後調整位置與大小並將物件預設為關閉即可完成。 遙控器設置 1. 選取 remote-control03 物件並在物件上新增 Rigidbody、Mesh Collider、Sphere Collider、HVR Grabbable(Script) 元件,接著將 Mesh Collider 下的 Convex 勾選;將 Sphere Collider 下的 Is Trigger 勾選並調整 Radius 為 0.2。 注意!物件不可設為 Static 狀態,否則將會無法用手拿取。 2.建立VR_TV_Controller.cs 腳本,程式碼如下:★ ((( TVController.cs ))) 3.將此腳本套用到 remote-control03 物件,並將 TV Scene 物件拖曳到 TV 變數欄位,按下 Play 測試遊戲。 拿起遙控器後按下手把的 B 鍵可以打開電視,但放開遙控器時按下 B 鍵時仍可控制電視,這個部份需要修改。 4. 開啟 HandObjectManager 腳本,並在 Update 下加入以下程式碼。 if(!rightIndex()) 此為控制放開遙控器時將無法控制 TV 畫面的開啟關閉,按下 Play 測試是否正常,此部份功能修改完成。 待續,本教學製作中… |