public void UpdateController() { if (!Enabled) { return; } var controllerAnchor = NRInput.DomainHand == ControllerHandEnum.Left ? ControllerAnchorEnum.LeftModelAnchor : ControllerAnchorEnum.RightModelAnchor; var pointerAnchor = NRInput.RaycastMode == RaycastModeEnum.Gaze ? ControllerAnchorEnum.GazePoseTrackerAnchor : controllerAnchor; var controller = NRInput.AnchorsHelper.GetAnchor(pointerAnchor); // hand pose var lastState = TrackingState; TrackingState = NRInput.CheckControllerAvailable(NRInput.DomainHand) ? TrackingState.Tracked : TrackingState.NotTracked; if (lastState != TrackingState) { CoreServices.InputSystem?.RaiseSourceTrackingStateChanged(InputSource, this, TrackingState); } if (TrackingState == TrackingState.Tracked) { CoreServices.InputSystem?.RaiseSourcePoseChanged(InputSource, this, new MixedRealityPose(controller.position, controller.rotation)); } // hand interaction if (Interactions == null) { Debug.LogError($"No interaction configuration for Nreal Light Controller Source"); Enabled = false; } for (int i = 0; i < Interactions?.Length; i++) { switch (Interactions[i].InputType) { case DeviceInputType.None: break; case DeviceInputType.SpatialPointer: var pointer = new MixedRealityPose(controller.position, controller.rotation); Interactions[i].PoseData = pointer; if (Interactions[i].Changed) { CoreServices.InputSystem?.RaisePoseInputChanged(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction, pointer); } break; case DeviceInputType.Select: case DeviceInputType.TriggerPress: Interactions[i].BoolData = NRInput.GetButton(ControllerButton.TRIGGER); if (Interactions[i].Changed) { if (Interactions[i].BoolData) { CoreServices.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction); } else { CoreServices.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction); } } break; } } }