void PlayThrowSound() { if (hasThrowSource) { throwSource.volume = MathSupplement.Exerp(0, 1, Mathf.InverseLerp(0.06f, 8, rigidBody.velocity.sqrMagnitude)); throwSource.Play(); } }
private void OnCollisionStay(Collision collision) { if (!enabled) { return; } if (collision.collider.gameObject.layer == InteractionManager.instance.contactBoneLayer) { return; } if (collision.collider.gameObject.tag == "NoSlideParticles") { return; } float particleTValue = Mathf.InverseLerp(0.1f, maxMagnitude, rigidBody.velocity.magnitude); if (HasSoundSource()) { float soundTValue = Mathf.InverseLerp(0, maxSoundMagnitude, rigidBody.velocity.magnitude); interactionSound.SlideSource.volume = slideSoundVolume.Evaluate(soundTValue); } emission.rateOverTime = Mathf.Lerp(0, maxEmissionRate, particleTValue); particle.transform.position = collision.contacts[0].point; bool grabbedByLeft = false; bool grabbedByRight = false; // do grab feedback if (interactionBehaviour.graspingControllers.Count > 0) { // grabbing vibration feedback float leftGrabDistance = 0; float rightGrabDistance = 0; InteractionController leftGrabbingController; InteractionController rightGrabbingController; float hapticTValue = MathSupplement.Coserp(0, 1, Mathf.InverseLerp(minHapticMagnitude, maxHapticMagnitude, rigidBody.velocity.magnitude)); GetGrabbingControllers(out grabbedByLeft, out grabbedByRight, out leftGrabbingController, out rightGrabbingController); if (leftGrabbingController) { leftGrabDistance = interactionBehaviour.GetHoverDistance(leftGrabbingController.GetGraspPoint()); HandFeedback.LeftHand.Amplitude = 1 - Mathf.InverseLerp(0, maxHapticDist, leftGrabDistance); HandFeedback.LeftHand.Frequency = Mathf.Lerp(0, 320, hapticTValue); } if (rightGrabbingController) { rightGrabDistance = interactionBehaviour.GetHoverDistance(rightGrabbingController.GetGraspPoint()); HandFeedback.RightHand.Amplitude = 1 - Mathf.InverseLerp(0, maxHapticDist, rightGrabDistance); HandFeedback.RightHand.Frequency = Mathf.Lerp(0, 320, hapticTValue); } } if (grabbedByLeft != grabbedLeftPreviousFrame) { // state change if (grabbedByLeft) { leftIsGrabbedToken = HandFeedback.LeftHand.OverridePenetrationHaptics.AddLens(new Lens <bool>(0, (grabbed) => true)); } else { leftIsGrabbedToken.Remove(); leftIsGrabbedToken = null; } } if (grabbedByRight != grabbedRightPreviousFrame) { // state change if (grabbedByRight) { rightIsGrabbedToken = HandFeedback.RightHand.OverridePenetrationHaptics.AddLens(new Lens <bool>(0, (grabbed) => true)); } else { rightIsGrabbedToken.Remove(); rightIsGrabbedToken = null; } } // save our state grabbedLeftPreviousFrame = grabbedByLeft; grabbedRightPreviousFrame = grabbedByRight; }