這篇文章是【Oculus Interaction SDK】系列的一部分,如果發現有對不上的對方,可以回去翻看我之前釋出的文章,或在評論區留言。如果文章的內容已經不適用於新版本了,也可以直接聯絡我,我會持續更新文章內容。
當前適用版本:
文章最近更新日期:2023.02.10
實現按壓互動需要在控制器和手的互動器列表中新增對應的 PokeInteractor
我們使用的 OculusInteractionSampleRig 中自帶有該互動器。如果你的互動器列表中沒有此物體,請自行新增,新增的方法在之前的文章中有過描述
【Oculus Interaction SDK】(一)設定 VR 相機與控制器 && 實現簡單的抓取功能 - 千葉Christa - 部落格園 (cnblogs.com)
新建一個 Cube,命名為 3D Button,為其新增 Poke Interactable
元件
給 3D Button 建立一個空的子物體 Proximity Field,新增對應的 Proximity Field
元件(根據不同形狀選擇對應的元件即可)
參照一下自己的 Transform
可以看到我們的方塊上出現了一個藍色的包圍盒
在 3D Button 下繼續建立空的子物體,命名為 Surface 並新增元件 Plane Surface
建立一個子物體,命名為 Surface,新增元件 Plane Surface
,調整一下 Transform > Rotation,使其方向與圖中保持一致
這個平面的位置就是 Select 事件的觸發位置
回到 3D Button,對 Poke Interactable 進行賦值
完成之後可以看到這個藍色的標記,這個圓點標記了按壓的方向和按壓動作開始的檢測位置
圓點和平面之間的距離是 Hover 事件觸發的距離
通過調整 Pose Interactable 的引數 Max Distance,讓檢測面位於立方體表面
為了更加直觀,我們通過一個新元件來視覺化按動觸發的效果,新增 Interactable Debug Visual
元件
這樣按壓的互動就完成了
雖然實現了按壓互動,但是按鈕並沒有跟隨手指被按下去,這並不是我想要的效果
我希望按鈕可以在 Hover 這段區域內跟隨手指移動,但現在控制 Hover 範圍的 Surface 是按鈕的子物體,一旦按鈕移動 Surface 也會一起移動,這顯然是不對的
所以,我需要把按鈕獨立出來,讓按鈕的移動不影響設定好的按壓範圍
首先,刪除 3D Button 的 Mesh Filter、Mesh Renderer 和 Box Collider
建立一個空的子物體 Button Visual,在 Button Visual 下建立一個 Cube 子物體作為按鈕
並將 3D Button 的 Interactable Debug Visual 元件的引數 Renderer 的參照改為 Cube,使 Cube 依舊能夠給出反饋(當然也可以不要)
給 Button Visual 新增 Poke Interactable Visual
元件,這個元件能夠實現按鈕按下的效果
這個元件在發生互動時,會將自身(Button Visual)的 Y 軸位置從原位置變為 0,在這個區域內的物體才會受到影響
所以,這裡需要將 Button Visual 的 Y 軸位置修改為 0.5(與圓點位置保持一致),將 Cube 的 Y 軸位置修改為 -0.5(與原外觀保持一致)
現在可以簡單看一下效果了
再給按鈕套上一個外殼,大功告成!
在上面的效果圖中,我們可以看到手會穿透按鈕,這樣的效果並不是很好,我希望手在按壓到按鈕底部時可以被限制在按鈕表面
接下來就來解決這個問題!
在 Project 視窗中搜尋 HandSynthetic,找到 OVRLeftHandSynthetic / OVRRightHandSynthetic 使其成為 LeftHand / RightHand 的子物體
(在第五章有同樣的步驟,已經新增過的就不用新增了)
給 HandSynthetic 新增 Hand Poke Limiter Visual 元件,並進行賦值(此步開始左右手類似,只描述一隻手的設定方法)
因為 HandSynthetic 的子物體中也有 Hand Visual 元件,而我們只需要一個,在這裡需要禁用 LeftHandVisual
現在來看看最終效果吧!
https://www.youtube.com/watch?v=IDE3eYDadig