protected virtual void Ungrab(bool carryMomentum, VRTK_ControllerReference controllerReference, GameObject target) { if (bodyPhysics == null) { return; } isClimbing = false; if (positionRewind != null && IsHeadsetColliding()) { positionRewind.RewindPosition(); } if (IsBodyColliding() && !IsHeadsetColliding()) { bodyPhysics.ForceSnapToFloor(); } bodyPhysics.enableBodyCollisions = true; if (carryMomentum) { Vector3 velocity = Vector3.zero; if (VRTK_ControllerReference.IsValid(controllerReference)) { velocity = -VRTK_DeviceFinder.GetControllerVelocity(controllerReference); if (usePlayerScale) { velocity = playArea.TransformVector(velocity); } else { velocity = playArea.TransformDirection(velocity); } } bodyPhysics.ApplyBodyVelocity(velocity, true, true); } grabbingController = null; climbingObject = null; OnPlayerClimbEnded(SetPlayerClimbEvent(controllerReference, target)); }