一、交互
VRTK在VRTK - Scripts - Interactions - Interactors中提供了多個用于交互的組件,其中最常用的就是 VRTK_InteractTouch 和 VRTK_InteractGrab ,這兩個組件可以用于實現撿拾等效果。

注意,VRTK_InteractTouch 組件是交互的核心,因為真正的事件觸發是在這個組件中實現的。
二、抓取
如果要實現抓取效果,不然要在手柄控制器上添加 VRTK_InteractTouch 和 VRTK_InteractGrab 兩個組件,還要在需要被抓取的物體上添加碰撞器和 VRTK_InteractAbleObject 組件,并勾選組件的 Is Grabbable 屬性,該組件用于將物體變為可交互物體,勾選 Is Grabbable 屬性則是用于指定該物體可以被抓取。

注意,在模擬器中控制抓取是一件比較困難的事情,要求手柄必須到達物體的可抓取位置才會出現抓取效果,所以有時候沒成功抓取并不是配置錯了,可能只是操作不對而已。
三、拋投
當物體被手持后,松開交互鍵時會有拋投效果出現,我們可以通過設置 VRTK_InteractGrab 組件的 Throw Multiplier 屬性來改變拋投力度,該值越大,拋投力度越大。

四、高亮顯示
如果要查看物品是否可以被撿拾,可以使用 Object Highlighter 屬性來實現,組要配合 VRTK_Highlighter 相關的組件,如下圖:

但實際上這種方式已經過時,新的方式是直接給物體添加 VRTK_InteractObjectHighlighter 組件,并進行相應設置,如下圖:

五、實際項目中的抓取
前面是交互的基本講解,下面將針對實際開發的物品抓取做詳細講解。
六、抓取方式
抓取方式就是將物品拿到手中后的動態效果。比如,如果我將抓取方式設置為 VRTK_SpringJointGrabAttach 組件,則當我拿著這個物品揮動手臂時就好像用一個橡皮筋拴著物品甩動(程序運行時物品會增加一個 Spring Joint 彈簧關節),物品會離開自己的手向前飛,飛到一定程度后再往回飛。那么假如我撿起來的道具是一個有彈力屬性的流星錘,就可以使用這種方式。
在不設定的情況下 VRTK 會默認為物品添加 VRTK_FixedJoinGrabAttach 組件(固定關節抓取),但實際上比較常用的組件是 VRTK_ChildOfControllerGrabAttach ,該組件會將抓取的道具模型放到 [VRSimulator_CameraRig] 下。VRTK為我們提供了很多種抓取方式,如下:

七、轉成子物體抓取方式 VRTK_ChildOfControllerGrabAttach
此組件能夠讓抓取到的物體變成某個節點的子物體,當物體被抓取時,其模型會被放到 [VRSimulator_CameraRig] 下的模型下的一個節點上。比如我當前的物體就被放到了 Simulator - [VRSimulator_CameraRig] - RightHand - Hand 下,如圖:

通常我們需要另外指定其他的節點作為被抓取物品的根節點,以方便進行后期處理。處理方法為先給手柄控制器增加一個子節點名為 Weapons(名字自己隨便起,我的例子是拿各種武器,所以用Weapons命名),給 Weapons 節點增加 Rigidbody 剛體,并勾選 Is Kinematic 屬性(開啟動力學,使物體不受外力的影響)。

然后將 Weapons 節點拖拽到手柄控制器 VRTK_InteractGrab 組件的 Controller Attach Point 屬性上。

抓取后結果如圖:

原文鏈接:https://blog.csdn.net/xiaoyaoACi/article/details/120269507