void Update() { if (handVRMain_ == null) { handVRMain_ = FindObjectOfType <HandVRMain>(); } if (handVRMain_ == null) { return; } int id = handVRMain_.GetIdFromHandednesses(ThisEitherHand); if (id < 0) { PhysicEnabled = false; if (Time.unscaledTime > currentDisableTime_) { if (renderer_ != null) { renderer_.enabled = false; } } return; } float[] posVecArray = handVRMain_.GetLandmark(id, Index); if (posVecArray != null) { if (renderer_ != null) { renderer_.enabled = true; } PhysicEnabled = true; position_ = new Vector3(posVecArray[0], posVecArray[1], posVecArray[2]); currentDisableTime_ = Time.unscaledTime + DISABLE_TIME; } else { PhysicEnabled = false; if (Time.unscaledTime > currentDisableTime_) { if (renderer_ != null) { renderer_.enabled = false; } } } }
void inputUpdate() { #if DOWNLOADED_ARFOUNDATION int id = handVRMain_.GetIdFromHandednesses(ThisEitherHand); if (!IsTrackingHand || id < 0) { if (!KEEP_TRACKING_GRABED || !inputState_.isGrab) { inputState_.isTracked = false; } InputSystem.QueueStateEvent(ThisEitherHand == EitherHand.Left ? XRController.leftHand : XRController.rightHand, inputState_); return; } inputState_.isTracked = true; var gestures = handVRMain_.GetGestures(id); inputState_.isGrab = gestures[(int)HandVRMain.GestureType.Open] < gestures[(int)HandVRMain.GestureType.Close] || gestures[(int)HandVRMain.GestureType.Open] < gestures[(int)HandVRMain.GestureType.Grab]; int gesturesMaxId = 0; float maxValue = 0f; for (int gestureId = 0; gestureId < gestures.Length; gestureId++) { if (maxValue < gestures[gestureId]) { gesturesMaxId = gestureId; maxValue = gestures[gestureId]; } } inputState_.gestures = (uint)1 << gesturesMaxId; if (handMRManager_.CenterTransform != null) { inputState_.position = HandCenterPosition - handMRManager_.CenterTransform.position; inputState_.gesturePointerPosition = fingers_[8].position - handMRManager_.CenterTransform.position; } else { inputState_.position = HandCenterPosition; inputState_.gesturePointerPosition = fingers_[8].position; } inputState_.position = Quaternion.Inverse(DefaultRotation) * inputState_.position; if (!handMRManager_.IsLockHandRotation) { if (inputState_.gestures == 1) { if (ThisEitherHand == EitherHand.Left) { inputState_.rotation = transform.parent.rotation * handVRMain_.GetHandRotation(id); inputState_.rotation = Quaternion.Inverse(DefaultRotation) * inputState_.rotation; inputState_.rotation *= Quaternion.Euler(0f, BASE_ANGLE, 0f); } else { inputState_.rotation = transform.parent.rotation * handVRMain_.GetHandRotation(id); inputState_.rotation = Quaternion.Inverse(DefaultRotation) * inputState_.rotation; inputState_.rotation *= Quaternion.Euler(0f, -BASE_ANGLE, 0f); } } } else { inputState_.rotation = transform.parent.rotation; inputState_.rotation = Quaternion.Inverse(DefaultRotation) * inputState_.rotation; } inputState_.trackingState = (int)(InputTrackingState.Position | InputTrackingState.Rotation); InputSystem.QueueStateEvent(ThisEitherHand == EitherHand.Left ? XRController.leftHand : XRController.rightHand, inputState_); #endif }