Steam VR(HTCVIVE)按鍵調(diào)用

    SteamVR_TrackedObject trackdeObjec;  
  
    void Awake() {  
        //獲取手柄上的這個(gè)組件  
        trackdeObjec = GetComponent<SteamVR_TrackedObject>();  
    } 
void FixedUpdate()  
    {   //獲取手柄輸入  
        var device = SteamVR_Controller.Input((int)trackdeObjec.index);  
        //以下是api中復(fù)制出來的按鍵列表  
        /*       public class ButtonMask 
           { 
               public const ulong System = (1ul << (int)EVRButtonId.k_EButton_System); // reserved 
               public const ulong ApplicationMenu = (1ul << (int)EVRButtonId.k_EButton_ApplicationMenu); 
               public const ulong Grip = (1ul << (int)EVRButtonId.k_EButton_Grip); 
               public const ulong Axis0 = (1ul << (int)EVRButtonId.k_EButton_Axis0); 
               public const ulong Axis1 = (1ul << (int)EVRButtonId.k_EButton_Axis1); 
               public const ulong Axis2 = (1ul << (int)EVRButtonId.k_EButton_Axis2); 
               public const ulong Axis3 = (1ul << (int)EVRButtonId.k_EButton_Axis3); 
               public const ulong Axis4 = (1ul << (int)EVRButtonId.k_EButton_Axis4); 
               public const ulong Touchpad = (1ul << (int)EVRButtonId.k_EButton_SteamVR_Touchpad); 
               public const ulong Trigger = (1ul << (int)EVRButtonId.k_EButton_SteamVR_Trigger); 
           } 
           */  
  
           //同樣是三種按鍵方式惩阶,以后不做贅述  
        if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger)) {  
            Debug.Log("按了 “trigger” “扳機(jī)鍵”");  
             
            //右手震動(dòng)  
            //拉弓類似操作應(yīng)該就是按住trigger(扳機(jī))gettouch時(shí)持續(xù)調(diào)用震動(dòng)方法模擬弓弦繃緊的感覺。  
            var deviceIndex2 = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);  
            SteamVR_Controller.Input(deviceIndex2).TriggerHapticPulse(500);  
  
        }  
        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger))  
        {   Debug.Log("按下了 “trigger” “扳機(jī)鍵”");  
  
        }  
        if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger)) {  
            Debug.Log("松開了 “trigger” “扳機(jī)鍵”");  
            
            //左手震動(dòng)  
            var deviceIndex = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);  
            SteamVR_Controller.Input(deviceIndex).TriggerHapticPulse(3000);  
             
            //右手震動(dòng)  
            var deviceIndex1 = SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);  
            SteamVR_Controller.Input(deviceIndex1).TriggerHapticPulse(3000);  
        }  
  
        //這三種也能檢測(cè)到 后面不做贅述  
        if(device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) {  
            Debug.Log("用press按下了 “trigger” “扳機(jī)鍵”");  
        }  
        if (device.GetPress(SteamVR_Controller.ButtonMask.Trigger))  
        {  
            Debug.Log("用press按了 “trigger” “扳機(jī)鍵”");  
        }  
        if (device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))  
        {  
            Debug.Log("用press松開了 “trigger” “扳機(jī)鍵”");  
        }  
  
        //system鍵 圓盤下面那個(gè)鍵   
        // reserved 為Steam系統(tǒng)保留,用來調(diào)出Steam系統(tǒng)菜單 因此貌似自己加的功能沒啥用  
        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.System))  
        {  
            Debug.Log("按下了 “system” “系統(tǒng)按鈕/Steam”");  
        }  
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.System))  
        {  
            Debug.Log("用press按下了 “System” “系統(tǒng)按鈕/Steam”");  
        }  
  
        //ApplicationMenu鍵 帶菜單標(biāo)志的那個(gè)按鍵(在方向圓盤上面)  
        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.ApplicationMenu))  
        {  
            Debug.Log("按下了 “ApplicationMenu” “菜單鍵”");  
        }  
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu))  
        {  
            Debug.Log("用press按下了 “ApplicationMenu” “菜單鍵”");  
        }  
  
        //Grip鍵 兩側(cè)的鍵 (vive雇傭兵游戲中的換彈鍵)扣汪,每個(gè)手柄左右各一功能相同断楷,同一手柄兩個(gè)鍵是一個(gè)鍵。  
        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Grip))  
        {  
            Debug.Log("按下了 “Grip” “ ”");  
        }  
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Grip))  
        {  
            Debug.Log("用press按下了 “Grip” “ ”");  
        }  
  
   
          
        //Axis0鍵 與圓盤有交互 與圓盤有關(guān)  
        //觸摸觸發(fā)  
        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis0))  
        {  
           Debug.Log("按下了 “Axis0” “方向 ”");  
        }  
        //按動(dòng)觸發(fā)  
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Axis0))  
        {  
            Debug.Log("用press按下了 “Axis0” “方向 ”");  
        }  

//ATouchpad鍵 圓盤交互  
        //觸摸觸發(fā)  
       if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Touchpad))  
       {     
           Debug.Log("按下了 “Touchpad” “ ”");  
              
            //方法返回一個(gè)坐標(biāo) 接觸圓盤位置  
            Vector2 cc = device.GetAxis();  
            Debug.Log(cc);  
            // 例子:圓盤分成上下左右  
            float jiaodu = VectorAngle(new Vector2(1, 0), cc);  
            Debug.Log(jiaodu);  
            //下  
            if (jiaodu > 45 && jiaodu < 135)  
            {  
                Debug.Log("下");  
            }  
            //上  
            if (jiaodu < -45 && jiaodu > -135)  
            {  
                Debug.Log("上");  
            }  
            //左  
            if ((jiaodu < 180 && jiaodu > 135) || (jiaodu < -135 && jiaodu > -180))  
            {  
                Debug.Log("左");  
            }  
            //右  
            if ((jiaodu > 0 && jiaodu < 45) || (jiaodu > -45 && jiaodu < 0))  
            {  
                Debug.Log("右");  
            }  
        }  
        //按動(dòng)觸發(fā)  
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))  
        {  
            Debug.Log("用press按下了 “Touchpad” “ ”");  
        }  
  }

//方向圓盤最好配合這個(gè)使用 圓盤的.GetAxis()會(huì)檢測(cè)返回一個(gè)二位向量崭别,可用角度劃分圓盤按鍵數(shù)量  
    //這個(gè)函數(shù)輸入兩個(gè)二維向量會(huì)返回一個(gè)夾角 180 到 -180  
    float VectorAngle(Vector2 from, Vector2 to)  
    {  
        float angle;  
        Vector3 cross = Vector3.Cross(from, to);  
        angle = Vector2.Angle(from, to);  
        return cross.z > 0 ? -angle : angle;  
    }  

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冬筒,一起剝皮案震驚了整個(gè)濱河市恐锣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舞痰,老刑警劉巖土榴,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異匀奏,居然都是意外死亡鞭衩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門娃善,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论衍,“玉大人,你說我怎么就攤上這事聚磺∨魈ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瘫寝,是天一觀的道長(zhǎng)蜒蕾。 經(jīng)常有香客問我,道長(zhǎng)焕阿,這世上最難降的妖魔是什么咪啡? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮暮屡,結(jié)果婚禮上撤摸,老公的妹妹穿的比我還像新娘。我一直安慰自己褒纲,他們只是感情好准夷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莺掠,像睡著了一般衫嵌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彻秆,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天楔绞,我揣著相機(jī)與錄音,去河邊找鬼唇兑。 笑死墓律,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幔亥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼察纯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帕棉!你這毒婦竟也來了针肥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤香伴,失蹤者是張志新(化名)和其女友劉穎慰枕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即纲,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡具帮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了低斋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜂厅。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖膊畴,靈堂內(nèi)的尸體忽然破棺而出掘猿,到底是詐尸還是另有隱情,我是刑警寧澤唇跨,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布稠通,位于F島的核電站,受9級(jí)特大地震影響买猖,放射性物質(zhì)發(fā)生泄漏改橘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一玉控、第九天 我趴在偏房一處隱蔽的房頂上張望飞主。 院中可真熱鬧,春花似錦奸远、人聲如沸既棺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丸冕。三九已至,卻和暖如春薛窥,著一層夾襖步出監(jiān)牢的瞬間胖烛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工诅迷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佩番,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓罢杉,卻偏偏與公主長(zhǎng)得像趟畏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滩租,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容