使用头盔为HTC Vivo ,SteamVR插件版本为2.7.3
直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR;
//首先该脚本和SteamVR_TrackedObject脚本同级绑定在模型身上,注意该示例只
//适合处理使用了一个Tracker的情况
public class FindTrackerExample : MonoBehaviour
{
//声明设备类型,Tracker一般是该类型
ETrackedDeviceClass deviceClass = ETrackedDeviceClass.GenericTracker;
private int deviceIndex = -1;
IEnumerator Start()
{
//确保Tracker设备已经被开启了,且被SteamVR系统管理
//判断SteamVR系统是否初始化成功了,没成功跳过这一帧继续等待
while (SteamVR.initializedState != SteamVR.InitializedStates.InitializeSuccess)
{
yield return null;
}
//遍历所有可能接入的设备,一般是16个
for (int i = 0; i < OpenVR.k_unMaxTrackedDeviceCount; i++)
{
if (!OpenVR.System.IsTrackedDeviceConnected((uint)i))
{
continue;
}
//已连接的设备获取设备类型,判断类型是否相同,通过类型判断是否找到
//了那个唯一的Tracker
//注意我假定了只有一个Tracker设备
if (OpenVR.System.GetTrackedDeviceClass((uint)i) == deviceClass)
{
deviceIndex = i;
break;
}
}
//通过遍历没找到所以还是-1
if (deviceIndex == -1)
{
Debug.LogError("Can't find any usable tracker!");
}
else
{
GetComponent<SteamVR_TrackedObject>().index = (SteamVR_TrackedObject.EIndex)deviceIndex;
}
}
/// <summary>
/// 这个方法可以通过获取的索引得到设备序列号
/// 可以帮助处理多个Tracker设备的情况
/// </summary>
/// <param name="deviceIndex"></param>
/// <returns></returns>
private string GetDeviceSerialNumber(uint deviceIndex)
{
var error = ETrackedPropertyError.TrackedProp_Success;
var capacity = OpenVR.System.GetStringTrackedDeviceProperty(deviceIndex,
ETrackedDeviceProperty.Prop_SerialNumber_String, null, 0, ref error);
if (capacity > 1)
{
var result = new System.Text.StringBuilder((int)capacity);
OpenVR.System.GetStringTrackedDeviceProperty(deviceIndex, ETrackedDeviceProperty.Prop_SerialNumber_String,
result, capacity, ref error);
return result.ToString();
}
return "Unknown";
}
}