此教程相關(guān)的詳細(xì)教案,文檔,思維導(dǎo)圖和工程文件會放入 Spatial XR 社區(qū)。這是一個高質(zhì)量 XR 社區(qū),博主目前在內(nèi)擔(dān)任 XR 開發(fā)的講師。此外,該社區(qū)提供教程答疑、及時交流、進階教程、外包、行業(yè)動態(tài)等服務(wù)。
社區(qū)鏈接:
Spatial XR 高級社區(qū)(知識星球)
Spatial XR 高級社區(qū)(愛發(fā)電)
??教程說明
這篇教程將會介紹如何用 Meta 的 Interaction SDK,將遠(yuǎn)處的物體抓取到手上。
環(huán)境配置可參考:https://blog.csdn.net/qq_46044366/article/details/133967343
配置一個基本的玩家物體可以參考前幾期教程:https://blog.csdn.net/qq_46044366/article/details/134097455
系列教程專欄:https://blog.csdn.net/qq_46044366/category_12118293.html
配套的視頻鏈接:
11.如何用VR手勢追蹤遠(yuǎn)距離抓取以及交互
?電腦操作系統(tǒng):Windows 11
使用的 VR 設(shè)備:Meta Quest 3(Quest 系列都適用)
使用的 Unity 版本:2021.3.5 LTS (這里推薦使用 2021 及以上的 LTS 版本)
Meta XR SDK 版本:v57
官方文檔:https://developer.oculus.com/documentation/unity/unity-gs-overview/
遠(yuǎn)距離抓取腳本介紹文檔:
https://developer.oculus.com/documentation/unity/unity-isdk-distance-hand-grab-interaction/
遠(yuǎn)距離抓取配置過程文檔:https://developer.oculus.com/documentation/unity/unity-isdk-create-distance-grab-interactions/
最終實現(xiàn)的效果:
??玩家配置 DistanceHandGrabInteractor
在 Unity 編輯器的 Project 窗口欄中搜索 DistanceHandGrabInteractor 物體:
將這個 Prefab 拖到場景中,作為玩家物體上 HandInteractorsLeft 和 HandInteractorsRight 物體的子物體:
點擊 DistanceHandGrabInteractor 物體,將玩家物體上的 OVRHmd 物體拖到 HmdRef 腳本中的 Hmd 變量上:
展開 DistanceHandGrabInteractor,激活 Visuals 子物體下的 HandGrabVisual 和 HandGrabGlow 物體:
點擊 HandGrabVisual 物體,將對應(yīng)手部的 Synthetic Hand 進行賦值:
點擊 HandGrabGlow 物體,按下圖所示進行賦值,另一只手同理:
在玩家物體的 LeftHand 和 RightHand 下添加 HandVelocityCalculator Prefab,然后引用到 DistanceHandGrabInteractor 腳本中的 Velocity Calculator 中:
最后,需要把 DistanceHandGrabInteractor 物體拖到 HandInteractorsLeft 和 HandInteractorsRight 物體的 Best Hover Interactor Group 腳本中:
??物體配置 DistanceHandGrabInteractable
接下來,我將配置一個具有物理碰撞效果和自定義抓取手勢的物體。
首先物體的身上需要有碰撞體,剛體,Grabbable 腳本,Physics Grabbable 腳本。
然后為物體錄制抓取手勢,可以參考這期教程:Unity Meta Quest 一體機開發(fā)(九):【手勢追蹤】通過錄制抓取手勢實現(xiàn)自定義抓取姿勢
錄好手勢后找到物體的 HandGrabPose 子物體,修改手指的自由度(我這里將所有手指的自由度改為了 Locked):
然后在物體的 HandGrabInteractable 子物體上添加 DistanceHandGrabInteractable 腳本,腳本上的Pointable Element 需要添加物體的 Grabbable 腳本,然后將物體身上的 Physics Grabbable 腳本拖到 DistanceHandGrabInteractable 腳本的 Physics Grabbable 變量上:
??調(diào)整物體飛向手部的速度
在 HandGrabInteractable 物體上添加 Move Towards Target Provider 腳本,然后將腳本拖到 DistanceHandGrabInteractable 腳本的 Movement Provider 變量上:
修改 Travel Speed 可以修改物體飛向手部的速度。Travel Speed 越大,物體飛向手部所花的時間越長。
??調(diào)整探測物體的范圍
DistanceHandGrabInteractor 會有自己的探測范圍,在范圍內(nèi)的物體才能夠觸發(fā)遠(yuǎn)距離抓取。
我們找到玩家身上的 DistanceHandGrabInteractor 腳本:
默認(rèn)引用了三個 Frustum,我們可以定位到這三個 Frustum 的位置:
?HandFrustumNarraw
HandFrustumNarraw 被賦給了 Selection Frustum 變量,表示的是遠(yuǎn)距離抓取的探測范圍,會從手部發(fā)出一個錐體的探測范圍,在此范圍內(nèi)的物體會被選中,有資格觸發(fā)遠(yuǎn)距離抓取。最靠近范圍中心的物體會被選中。調(diào)整 Conical Frustom 腳本的參數(shù)可以修改探測范圍。
?HandFrustumWide
同樣是從手部發(fā)出一個錐體范圍,但是范圍比 Narraw 更大。如果 HandFrustumWide 被賦給了 Deselection Frustum 變量,當(dāng)物體被選中后,必須要退出 HandFrustumWide 的范圍才能視為取消選中,而不是退出 Narraw 的范圍。
?HeadFrustum
從頭部發(fā)出一個錐體范圍。如果 HeadFrustum 被賦給了 Aid Frustum 變量,當(dāng)物體同時進入到 Aid Frustum 和 Selection Frustum 的范圍內(nèi),才能被選中。也就是說我們要用手對準(zhǔn)可抓取物體,并且看向可抓取物體時,如果物體同時進入到了這兩個范圍內(nèi),才能觸發(fā)遠(yuǎn)距離抓取。文章來源:http://www.zghlxwxcb.cn/news/detail-802114.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-802114.html
到了這里,關(guān)于Unity Meta Quest 一體機開發(fā)(十一):【手勢追蹤】遠(yuǎn)距離抓取的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!