背景
在引入OpenVR模块后,发现在StartUp时接收Inputdevice信息竟然失灵了。得到的device list count竟然一直是零。
原因考虑是生命周期的问题,也就是说OpenVR模块下,进入应用时还无法感应device,需要在进入应用后持续感知。 虽然StartUp时拿inputDevice,获得的Device数是零,但在进入游戏后手柄的交互动作是生效的,这也可以印证我之前的判断。
解决方法在Update层面持续感应Device,获得后给相应变量赋值就可以开始用自己定义的Controller实例感应动作了:
void Update()
{
//获取控制器信息
if (rightController.isValid)
{
rightController.TryGetFeatureValue(CommonUsages.primaryButton, out bool primaryButtonValue);
if (primaryButtonValue)
{
Debug.Log("Pressing primary button.");
}
}
else
{
var devices = new List();
var characteristics_right = InputDeviceCharacteristics.Right | InputDeviceCharacteristics.Controller;
var characteristics_left = InputDeviceCharacteristics.Left | InputDeviceCharacteristics.Controller;
InputDevices.GetDevicesWithCharacteristics(characteristics_right, devices);
if (devices.Count > 0)
{
rightController = devices[0];
}
}
}