public virtual void OnSelectionEnd() { if (GetComponent<Rigidbody>()) { GetComponent<Rigidbody>().isKinematic = rigidbodyWasKinematic; if(continuousCollisionDetectionWhenSelected) { switchToOldCollisionMode = true; } } if (maintainMomentumAfterRelease && GetComponent<Rigidbody>() && !GetComponent<Rigidbody>().isKinematic) { // rigidbody.AddForce(AverageBufferContent(velocityBuffer), ForceMode.VelocityChange); GetComponent<Rigidbody>().AddForce(filteredVelocity, ForceMode.VelocityChange); if(selector) // Put this if-clause here just in case because once received NullReferenceException { if(selector.transform.parent) { GetComponent<Rigidbody>().AddTorque(selector.transform.parent.TransformDirection( Mathf.Deg2Rad * selector.angularVelocity), ForceMode.VelocityChange); } else GetComponent<Rigidbody>().AddTorque(Mathf.Deg2Rad * selector.angularVelocity, ForceMode.VelocityChange); } } if(selectionMaterial != null) RemoveMaterialFromEverything(); this.selector = null; }
public virtual void OnSelection(MKWandSelector selector) { this.selector = selector; // "Reset" filtered velocity by temporarily using position noise covariance of 10 updateVelocity(10, Time.deltaTime); positionAtSelection = transform.position; rotationAtSelection = transform.rotation; selectorPositionAtSelection = selector.transform.position; selectorRotationAtSelection = selector.transform.rotation; if(snapToRay) rayEndToPositionAtSelection = Vector3.zero; else rayEndToPositionAtSelection = transform.position - selector.selectionRayEnd; distanceFromSelectionRayOrigin = (selector.selectionRayEnd - selector.selectionRay.origin).magnitude; lastPosition = transform.position; if (GetComponent<Rigidbody>()) { if(continuousCollisionDetectionWhenSelected) { switchToContinuousCollisionMode = true; } rigidbodyWasKinematic = GetComponent<Rigidbody>().isKinematic; GetComponent<Rigidbody>().isKinematic = true; } if (selectionMaterial != null) AddMaterialToEverything(selectionMaterial); UpdateTransform(false); }