Unity 室內設計教學 - 貼圖轉換效果
波紋效果 ForceFieldEffects 1. 開啟 [ SineVFX > ForceFieldEffects > Prefabs > CompleteEffects ] 資料夾 … 將 ForceFieldBasic01 預製物件拖曳到 Hierarchy 視窗,重新命名為 Effect … 使用 Unpack 斷開與原始預製物件的連結,再將 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 腳本,程式碼如下: 7. 將此腳本套用到 Apartment_Effect 下的子物件(例如:Wall_Living_Effect 物件,注意 ControlParticles 不需要套用),接著將 Apartment_Effect 下的 ControlParticles 粒子物件拖曳到 ControlParticlesSpawner (Script) 元件下的 Cps 欄位中,最後再將 Bullet Tag 欄位中輸入 SineBullet,再將設置好的 ControlParticlesSpawner 複製並貼上到其他模型物件上。 8. 建立 EffectMeshOff.cs 腳本,程式碼如下:
9. 將此腳本套用到 Apartment_Effect 下的 模型物件上即可完成(注意 ControlParticles 不需要套用)。
製作 VR 材質球建立組合 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 欄位輸入 CeilingEffetc(此為天花板用),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. 依照上述方式將預製的樣式球各自放入生成欄位即可完成。
玩家設定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 腳本,程式碼如下:★ using HurricaneVR.Framework.ControllerInput; public HVRPlayerInputs hVR_Player; void Update() if (leftFist() && OVRInput.Get(OVRInput.Button.Three)&&!OVRInput.Get(OVRInput.Button.Four)) if (leftFist() && OVRInput.Get(OVRInput.Button.Four)&&!OVRInput.Get(OVRInput.Button.Three)) if (leftFist() && OVRInput.Get(OVRInput.Button.Four)&& OVRInput.Get(OVRInput.Button.Three)) bool rightIndex() 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 ))) public GameObject TV; void OnTriggerEnter(Collider other) void Update() 3.將此腳本套用到 remote-control03 物件,並將 TV Scene 物件拖曳到 TV 欄位中,按下 Play 測試拿起遙控器後按下手把的 B 鍵是否能夠正常開關。此階段會發現放開遙控器時按下 B 鍵時依然能夠開啟關閉畫面 4.開啟 HandObjectManager 腳本元件並在 Update 下加入以下程式碼。
整理基本模型 1. 展開 Apartment 物件將底下的門都拖曳搬出成為獨立物件,可建立 Doors 空物件來放門的物件,以方便管理。 2.開始建立開門/關門的動畫這裡使用 door03 物件來示範後續將依照此製作方式的概念來製作其他種類的門,將 door03 物件 Unpack 段開連結並在 door03 下新增兩個空物件當作門板 (A) 與門把 (B) 的轉軸中心(如果模型的軸向中心正確則不需要此步驟),並將結構調整為如下圖方式。★
建立觸發區 1. 開啟 [ HurricaneVR > Framework > Models ] 資料夾,將 SocketOval 物件拖曳到 A 軸物件底下成為子物件並且調整位置與大小,接著新增一個 Box Collider 並調整位置與大小再將 Is Trigger 勾選起來。 建立動畫 1. 在選擇 door03 物件的狀態下打開 Animation 視窗並按下 Create 建立動畫檔命名為 door03_Open 並按下存檔。 2. 將製作完成的 door03_Open 複製產生第二個動畫,重新命名為 door03_Open_Idle 與 door03_Close ,接著看到 Inspector 屬性編輯器 (還在選取 door03 物件的狀態下) 在 Controller 欄位開啟 door03 動畫控制器即可打開 Animator 視窗。 3. 將 door03_Open_Idle 與 door03_Close 動畫拖曳到 Animator 視窗並且連結起來,接著將左側分頁切換到 Parameters 新增一個 Play (Trigger) 參數,如下圖所示: ★ 4. 點選各動畫之間連結的線並修改為以下圖示設定,三條連結皆相同。 ★ 5. 回到 Animation 視窗並將動畫切換到 door03_Open_Idle 在將第一格以外的動畫影格都刪除,再將時間軸調整到 0:01 然後點擊兩次上方的深灰色影格條即可複製出一格。 切換到 door03_Close 並將影格全選接著將 0:00 格左側的拖曳條拖曳到 6:00 (變成右側) 如下圖:
接著再拖曳第一個影格回到 0:00 如下圖: 完成。
建立控制腳本 1. 建立 VR_Animator.cs 腳本,程式碼如下:★
void OnTriggerEnter(Collider other) 2. 將編輯好的 VR_Animator 腳本元件套用到 SocketOval_Out 與 SocketOval_In 物件上並將 door03 物件拖曳到 Animator 欄位中,按下 Play 測試是否正常執行。完成! |