SteamVR Plugin 有一個叫做 ItemPackage 的物件系統,可以把任何物件套上 The Lab 中拿取物品的互動方式,例如:拿桌上的模型、遙控飛機、拿弓箭等等
使用這個系統的好處是,開發者不用考慮拿起物件需要的繁瑣判斷:隱藏控制器、生成物件、設定拿取的手、放回物件歸位、如果手上有東西的話……
這一切 Item Package 都幫我們準備好了!!
本人第一次看到官方範例時,看到上面有這麼多腳本,覺得有點繁雜,但其實套用過程不用修改任何一行程式!
以下逐一說明
事先準備
Item Package 建立在 SteamVR 的 InteractionSystem 之上
- 場景上要有 InteractionSystem 的 Player
2. 準備好已經可以獨立操作的物件,這裡我準備了一個簡單的 VR 手電筒
ㄧ、設定 Item Package
1. 做一個簡化版本
把碰撞、腳本等等功能全都刪掉,留下一個單純用來看的模型。把這個物件做成 Prefab,並命名為 FlashlightPreview
2. 做一個外框版本
用簡化版模型再做一個只有外框線的版本,用於拿起物件後,可以看到原本位置的輪廓。只要把材質球換成 ItemPickupOutline 即可,這個材質球 SteamVR Plugin 裡就有了
也把這個物件做成Prefab,並命名為 FlashlightOutline
做好後場景上的物件們就可以刪掉了
3. 做一個 ItemPackage
把完整版、簡化版、外框線版做成一個 ItemPackage
新增一個空物件,並命名為 FlashlightItemPackage
在空物件上面加上 ItemPackage 腳本,把這個物件做成 Prefab,照上圖把各個物件擺到指定欄位。
因為我的手電筒是單手拿的,所以把 Package Type 設定為 One Handed,Other Hand Item Prefab 可以空著沒關係。
如果是物件手兩隻手拿的話,另外一個物件放在 Other Hand Item Prefab,並記得把 Package Type 設定為 Two Handed。
4. 給原物件加上必要腳本
給原本的物件加上 ItemPackage 會用到的功能,例如:能夠放回去,並自動消失之類的
- Destroy On Detached From Hand
- Hide On Hand Focus Lost
- Item Package Reference:欄位放入剛做好的 FlashlightItemPackage
二、設定 ItemPackageSpawner
真正放在場景上的東西是它
- 在場景上新增一個空物件,並命名為 Flashlight Spawner
- 在空物件上面加上 ItemPackageSpawner 腳本
- Item Package 欄位拉入剛才做好的 FlashlightItemPackage
- 裡面有幾個設定,都蠻白話的,我依手電筒的需求來設定
- 在這個空物件底下放一個簡化版本的模型
6. 最後在 Flashlight Spawner 新增一個 Collider,這個是玩家可以拿取/放下物品的範圍
提供這個 Sample 的專案檔(Github)供參考,但是裡面沒有包含 SteamVR Plugin,請自行再去 Asset Store 下載( SteamVR Plugin / InteractionSystem 裡面也有官方的Demo )
侵删 by呂柏甫