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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HTC View 手柄操作简介

發布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTC View 手柄操作简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

核心類簡介:
SteamVR_TrackedObject
此類用于根據硬件設備,并為硬件設備分配相應的索引
SteamVR_Controller.Device
最重要的類,封裝了跟蹤設備的全部信息,例如手柄的各種交互相應勾動扳機等。
SteamVR_Controller.ButtonMask
手柄各按鍵的名稱
SteamVR_Controller
此類通常使用靜態方法Input根據設備索引值獲取對應的設備(Device)對象

HTC View 手柄按鍵簡介:

每個按鈕的名稱都在ButtonMask中定義好了:

public class SteamVR_Controller {public class ButtonMask{public const ulong System = (1ul << (int)EVRButtonId.k_EButton_System); // reservedpublic 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);} }

實際上在SteamVR_TrackedObject類枚舉類型EIndex中,已經預先定義了16個設備索引,頭盔默認索引為0

using UnityEngine; using Valve.VR;public class SteamVR_TrackedObject : MonoBehaviour {public enum EIndex{None = -1,Hmd = (int)OpenVR.k_unTrackedDeviceIndex_Hmd,Device1,Device2,Device3,Device4,Device5,Device6,Device7,Device8,Device9,Device10,Device11,Device12,Device13,Device14,Device15} }

簡單示例:
1,通過手柄游戲對象上的SteamVR_TrackedObject組件進行獲取,,,
//獲取跟蹤對象 此時通過trackObj.index 就可以訪問到設備對象

SteamVR_TrackedObject trackObj = this.GetComponent<SteamVR_TrackedObject>();

2,通過找到索引獲取到設備(Device)對象,
這時就用到了SteamVR_Controller.Input方法傳入上面獲取的到設備索引,就可以訪問到設備中的方法,相應手柄操作,,,

//通過設備索引獲取到相應設備對象Device SteamVR_Controller.Device device= SteamVR_Controller.Input((int)trackObj.index);

3,調用Divice中的相應函數,來獲取手柄的按鍵操作,,,
按鍵: Device.GetPressDown(按下) / GetPressUp(抬起) / GetPress(一直按)
觸摸鍵:Device.GetTouchDown / GetTouchUp / GetTouch

void Update { //按下Tigger鍵if(device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger){Debug.Log("您按下了Trigger")} }

觸摸板:
通過獲取用戶觸摸操作,然后根據當前的狀態進行獲取,,,Touchpad圓盤坐標是和平面直角坐標系一致,,上下和左右都是(-1,1)值,,,

void Update {//按下Touchpad鍵if(device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad){Debug.Log("您按下了Touchpad")} }

手柄的震動: TriggerHapicPulse
手柄震動是通過TriggerHapicPulsefangf ,第一個參數可以理解為震動強度,默認500,不要超過4000,,第二個參數默認就好,不用填寫
簡例:按下Trigger觸發震動:

private SteamVR_Controller.Device device; void Strar(){ //獲取設備 device = SteamVR_Contorller.Input((int)GetComponent<SteamVR_TrackedObject>().index) } void Update{if(device.GetPress(SteamVR_Controller.ButtonMask.Trigger)){device.Trigger.TriggerHapicPulse(1000);} }

Device常用屬性:
valid:GetControllerStateWithPose() 函數調用是否成功;
connected:判斷設備是否連接
hasTracking :判斷設備是否正常跟蹤
結果得到三個參數:
outOfRange:判斷設備是否超出范圍
calibrating:判斷設備是否正在校正
uninitialized:判斷設備是否未初始化

transform:獲取的結果是包含12個元素的一維數組,通過SteamVR_Utils.RigidTransform函數將12元素重組為3×4的矩陣針對Unity的坐標系進行修正,同時添加了懟position和rotation的方便的引用

velocity和angularVelocity:兩個速度也針對Unity的坐標系進行修正,Lighthouse跟蹤的空間軸方向與Unity存在偏差,,,

上面描述所對應的SteamVR插件中寫好的類:

public class Device//最重要的類,封裝了跟蹤設備的全部名稱{public Device(uint i) { index = i; }public uint index { get; private set; }public bool valid { get; private set; }//GetControllerStateWithPose()函數調用是否成功;public bool connected { get { Update(); return pose.bDeviceIsConnected; } }//判斷設備是否連接public bool hasTracking { get { Update(); return pose.bPoseIsValid; } }//判斷設備是否跟蹤正常 //判斷設備是否超出范圍 public bool outOfRange { get { Update(); return pose.eTrackingResult == ETrackingResult.Running_OutOfRange || pose.eTrackingResult == ETrackingResult.Calibrating_OutOfRange; } }//判斷設備是否正在校正 public bool calibrating { get { Update(); return pose.eTrackingResult == ETrackingResult.Calibrating_InProgress || pose.eTrackingResult == ETrackingResult.Calibrating_OutOfRange; } }//判斷設備是否未初始化public bool uninitialized { get { Update(); return pose.eTrackingResult == ETrackingResult.Uninitialized; } }//獲取的結果是包含12個元素的一維數組,通過SteamVR_Utils.RigidTransform函數//將12個元素重組為3X4矩陣并針對Unity的坐標系進行修正,同時添加了對position和rotation方便的引用public SteamVR_Utils.RigidTransform transform { get { Update(); return new SteamVR_Utils.RigidTransform(pose.mDeviceToAbsoluteTracking); } }//velocity和angularVelocity :這兩個速度也針對Unity的坐標系進行修正,lighthouse跟蹤的空間軸方向與Unity存在偏差。public Vector3 velocity { get { Update(); return new Vector3(pose.vVelocity.v0, pose.vVelocity.v1, -pose.vVelocity.v2); } }public Vector3 angularVelocity { get { Update(); return new Vector3(-pose.vAngularVelocity.v0, -pose.vAngularVelocity.v1, pose.vAngularVelocity.v2); } }

總結

以上是生活随笔為你收集整理的HTC View 手柄操作简介的全部內容,希望文章能夠幫你解決所遇到的問題。

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