日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VRTK射线检测

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VRTK射线检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VRTK射線檢測回調事件

本人在工作中做VR隱患排查項目開發的時候,有個功能需要做到:按下手柄觸摸板發送射線,松開觸摸板的時候處理射線最后檢測到的那個游戲物體。

功能構思:1、按下觸摸板,從手柄上發射射線;

    ? ?2、當射線停留在某個游戲物體上時,將此游戲物體添加到List列表中;

    ? ?3、當射線移開此物體,停留在下一個游戲物體時,移除List列表中剛剛檢測到的游戲物體(由于射線是一直檢測的,所以當你不停的移動射線時,會不停的添加和移除射線檢測到的游戲物體);

    ? ?4、當射線停留在你想處理的某游戲物體上時(此時游戲物體添加到List列表中),松開觸摸板,此時可以對此游戲物體進行一系列邏輯處理;

    ? ?5、邏輯處理完成后,會執行移除List列表中的游戲物體,以便于下次使用射線檢測。? ??

獲取射線碰撞到的某個物體這一類功能。可以通過VRTK里面的事件回調獲取。

想使用VRTK射線檢測,首先需要打開unity,導入SteamVR SDK和VRTK插件,在此不做演示。

在VRTK的腳本中,有VRTK_ControllerPointerEvents_ListenerExample和VRTK_DestinationMarker兩個腳本。

下面貼上本人代碼以供參考:

?

public class Test() {private VRTK_Pointer rightHandPointer;//右手柄Pointer組件private List<GameObject> lists = new List<GameObject>();//創建列表void Start(){rightHandPointer=VRTK_DeviceFinder.GetControllerRightHand().GetComponent<VRTK_Pointer>();//獲取右手柄的VRTK_Pointer組件//rightHandPointer.GetComponent<VRTK_DestinationMarker>().DestinationMarkerEnter+= Test_DestinationMarkerEnter;//當射線進入的時候     rightHandPointer.GetComponent<VRTK_DestinationMarker>().DestinationMarkerExit += Test_DestinationMarkerExit;//當射線離開的時候     rightHandPointer.GetComponent<VRTK_DestinationMarker>().DestinationMarkerHover += Test_DestinationMarkerHover;//當射線停留的時候//rightHandPointer.GetComponent<VRTK_DestinationMarker>().DestinationMarkerSet+= Test_DestinationMarkerSet;//當目標標記在場景中活動時發出,以確定最后的目的地位置(用于選擇和傳送)   }//處理 射線停留在游戲物體上private void Test_DestinationMarkerHover(object sender, DestinationMarkerEventArgs e){if (e.target != null)//當射線檢測到游戲物體時,添加到列表中       lists.Add(e.target.gameObject);Debug.Log("獲取射線檢測到的游戲物體的名字:"+e.target.name);}//處理 射線移開游戲物體時private void Test_DestinationMarkerExit(object sender, DestinationMarkerEventArgs e){//這段話意思是:當SelectionButton不再按下的時候,表示選中此游戲物體if (!rightHandPointer.IsSelectionButtonPressed()){//處理選中的游戲物體Debug.Log("獲取射線檢測到的游戲物體的名字:"+e.target.name);}//當射線離開游戲物體時,移出列表     lists.Remove(e.target.gameObject);} }

?

轉載于:https://www.cnblogs.com/yzx885059439/p/10869150.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的VRTK射线检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。