HTC VIVE開發筆記(一)使用SteamVR外掛進行基本的互動
阿新 • • 發佈:2019-01-09
1、獲取手柄的引用:目前沒有區分左右手柄
private SteamVR_TrackedObject trackedobj;
private SteamVR_Controller.Device device;
trackedobj = GetComponent<SteamVR_TrackedObject>();
device = SteamVR_Controller.Input((int)trackedobj.index);
之後應該是可以通過判斷這個index來判斷是哪一個手柄吧。SteamVR中把所有可以追蹤的裝置都儲存在了這個TrackedObject類裡,通過GetComponet方法,就能獲取到當前追蹤到的物體,並獲取到手柄的輸入(在Update方法中進行,這樣才能一直更新,否則如果是在Start方法中獲取的輸入,就只有第一次儲存的device可以來與物體進行互動)。之後的操作都是基於這個device來做了。
2、獲取touch pad的座標
device.GetAxis().x
device.GetAxis().y
3、監聽Trigger有沒有被按下,或鬆開
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
GetPressDown方法將返回一個布林值,同理,鬆開為,GetPressUp.
ButtonMask這裡也就類似鍵盤的判斷了,可以修改為手柄上不同按鍵的名稱,來進行相應的判斷和處理。
4、用手柄抓取和鬆開Cube的流程
首先要給手柄和要抓取的物體都加上一個Collider。將手柄的Collider的isTrigger勾上,這時候其實手柄並不是一個碰撞體了,感覺就有點像是一個虛的東西,只是作為一個監聽觸發事件的物體。
遇到一個很愚蠢的問題,就是如何來調整Collider的大小,因為在Scene下面看不見手柄的模型,那麼我是這麼做的,開始play,然後看到手柄後暫停遊戲,回到Scene模式下,並根據手柄大小調節Collider,記錄一下引數。然後停止遊戲,把引數改了。就醬。
然後來看看用到的一些函式。
private void OnTriggerEnter(Collider other)
當碰撞體other進入到了當前的Trigger裡時,這個Enter方法被呼叫。這裡要把這個collider的transform.gameObject儲存下來。
interactBox = other.transform.gameObject;
TODO:弄清楚Collider.transform.gameObject和Collider.gameObject有啥區別,為啥不能直接儲存other.gameObject
當碰撞體離開Trigger時(OnTriggerExit),把interactBox清空。
進行抓取操作,並使得抓取到的物體綁在手柄下,跟著手柄的變化而變化。就是要把這個collider節點綁在父節點(手柄)下。
//獲取trigger鍵是否按下
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("Trigger down");
if (interactBox != null)
{
interactBox.transform.parent = transform;
Rigidbody rig = interactBox.GetComponent<Rigidbody>();
rig.useGravity = false;
rig.isKinematic = true;
}
}
//獲取trigger鍵是否鬆開
if (device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("Trigger up");
interactBox.transform.parent = null;
Rigidbody rig = interactBox.GetComponent<Rigidbody>();
rig.useGravity = true;
rig.isKinematic = false;
}
因為是Unity新手,一開始不太理解,這裡的transform為什麼就是手柄的transform。。因為這個指令碼是綁在手柄下面的,相當於就是一個類吧,transform就是其中的一個成員,就可以直接這麼訪問了。
通過
interactBox.transform.parent = transform;
將碰撞到的物體的變換矩陣綁到父節點的變換矩陣下。接著修改一些剛體的引數。
通過今天的學習,對Unity以及Htc vive的開發又熟悉了一點。