예제 #1
0
    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;
    }
예제 #2
0
    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);
    }