private void UpdateLeftController(InputDevice device) { // LeftHasTrackPad = false; LeftFeatures.Clear(); var inputFeatures = new List <UnityEngine.XR.InputFeatureUsage>(); if (device.TryGetFeatureUsages(inputFeatures)) { foreach (var feature in inputFeatures) { LeftFeatures.Add($"{feature.name}"); if (feature.name == "Secondary2DAxis") { // LeftHasTrackPad = true; } } } LeftXRInputSystem = GetController(LeftDevice.manufacturer?.ToLower(), LeftDevice.name?.ToLower()); LeftController = UpdateController(LeftXRInputSystem, device, HVRHandSide.Left); if (device.isValid) { LeftControllerConnected.Invoke(LeftController); } }
private HVRController UpdateController(XRInputSystem sdk, InputDevice device, HVRHandSide side) { HVRInputSettings inputMap = null; Vector2 deadZone = Vector2.zero; HVRControllerType controllerType; //var hasTrackPad = side == HVRHandSide.Left ? LeftHasTrackPad : RightHasTrackPad; var wasNone = CurrentSDK == InputSDK.None; GetSDK(); if (CurrentSDK == InputSDK.Oculus) { #if !HVR_OCULUS Debug.LogWarning($"OVRInputs cannot be used because HVR_OCULUS define symbol is missing. Oculus Asset and the Hurricane Oculus Integration is required to use OVRInputs." + $"Falling back to XRInputs."); CurrentSDK = InputSDK.XRInput; #endif } if (wasNone && CurrentSDK != InputSDK.None) { Debug.Log($"InputSDK : {CurrentSDK}"); } switch (sdk) { case XRInputSystem.WMROpenVR: inputMap = WMROpenVRInputMap; deadZone = WMRDeadzone; controllerType = HVRControllerType.WMR; break; case XRInputSystem.ReverbG2: deadZone = WMRDeadzone; inputMap = WMRWithButtonsInputMap; controllerType = HVRControllerType.WMRButtons; break; case XRInputSystem.WMR: inputMap = WMRInputMap; deadZone = WMRDeadzone; controllerType = HVRControllerType.WMR; break; case XRInputSystem.OculusOpenVR: inputMap = OculusOpenVRInputMap; deadZone = OculusDeadzone; controllerType = HVRControllerType.Oculus; break; case XRInputSystem.Oculus: inputMap = OculusInputMap; deadZone = OculusDeadzone; controllerType = HVRControllerType.Oculus; break; case XRInputSystem.Vive: deadZone = ViveDeadzone; inputMap = ViveInputMap; controllerType = HVRControllerType.Vive; break; case XRInputSystem.Knuckles: deadZone = KnucklesDeadzone; inputMap = KnucklesInputMap; controllerType = HVRControllerType.Knuckles; break; case XRInputSystem.Cosmos: inputMap = CosmosInputMap; deadZone = CosmosDeadzone; controllerType = HVRControllerType.Cosmos; break; case XRInputSystem.None: inputMap = OculusInputMap; controllerType = HVRControllerType.None; break; default: inputMap = OculusInputMap; deadZone = OculusDeadzone; controllerType = HVRControllerType.Oculus; break; } if (!inputMap) { inputMap = OculusInputMap; } HVRController controller = null; if (side == HVRHandSide.Left) { if (LeftOculusController) { LeftOculusController.enabled = false; } if (LeftSteamController) { LeftSteamController.enabled = false; } if (LeftXRInputController) { LeftXRInputController.enabled = false; } if (LeftInputSystemController) { LeftInputSystemController.enabled = false; } } else { if (RightOculusController) { RightOculusController.enabled = false; } if (RightSteamController) { RightSteamController.enabled = false; } if (RightXRInputController) { RightXRInputController.enabled = false; } if (RightInputSystemController) { RightInputSystemController.enabled = false; } } switch (CurrentSDK) { case InputSDK.None: case InputSDK.XRInput: controller = side == HVRHandSide.Left ? LeftXRInputController : RightXRInputController; HVRXRInputController xrController = controller as HVRXRInputController; if (!controller) { xrController = gameObject.AddComponent <HVRXRInputController>(); controller = xrController; if (side == HVRHandSide.Left) { LeftXRInputController = controller; } else { RightXRInputController = controller; } } break; case InputSDK.Oculus: #if HVR_OCULUS controller = side == HVRHandSide.Left ? LeftOculusController : RightOculusController; if (!controller) { var oculusController = gameObject.AddComponent <HVROculusController>(); controller = oculusController; oculusController.OVRHaptics = OVRHaptics; if (side == HVRHandSide.Left) { LeftOculusController = controller; } else { RightOculusController = controller; } } #endif break; case InputSDK.SteamVR: #if HVR_STEAMVR controller = side == HVRHandSide.Left ? LeftSteamController : RightSteamController; if (!controller) { var steamController = gameObject.AddComponent <HVRSteamVRController>(); controller = steamController; if (side == HVRHandSide.Left) { LeftSteamController = steamController; } else { RightSteamController = steamController; } } #endif break; case InputSDK.InputSystem: #if ENABLE_INPUT_SYSTEM controller = side == HVRHandSide.Left ? LeftInputSystemController : RightInputSystemController; if (!controller) { var inputSystemController = gameObject.AddComponent <HVRInputSystemController>(); controller = inputSystemController; if (side == HVRHandSide.Left) { LeftInputSystemController = inputSystemController; } else { RightInputSystemController = inputSystemController; } } #endif break; default: throw new ArgumentOutOfRangeException(); } if (OverrideDeadzone) { deadZone = DeadzoneOverride; } if (controller != null) { controller.XRNode = side == HVRHandSide.Left ? XRNode.LeftHand : XRNode.RightHand; controller.ThumbstickDeadZone = deadZone; controller.Side = side; controller.InputMap = inputMap; controller.enabled = true; controller.ControllerType = controllerType; } controller.FingerSettings = FingerSettings; return(controller); }