示例#1
0
    public void ForceDrop()
    {
        waitingOnFirstRelease = false;
        if (HeldObject != null)
        {
            var tempObject = HeldObject;

            if (HeldObjectInteractable.type == Interactable.InteractableType.Grabable)
            {
                if (grabJoint)
                {
                    DestroyJoint();
                }

                Vector3 RadiusVector = HeldObject.transform.position - Transform.position;
                HeldObject.GetComponent <Rigidbody>().AddForce(InteractorVelocity + Vector3.Cross(InteractorAngularVelocity, RadiusVector), ForceMode.VelocityChange);
                HeldObject.GetComponent <Rigidbody>().AddTorque(InteractorAngularVelocity / (1 + RadiusVector.magnitude), ForceMode.VelocityChange);
            }
            else if (HeldObjectInteractable.type == Interactable.InteractableType.Climbable)
            {
                ClimbScript.RemoveInfluencer(this);
                Climbing = false;

                Vector3 RadiusVector = HeldObject.transform.position - Transform.position;
                XRRigRigidbody.AddForce(-XRRigRigidbody.velocity, ForceMode.VelocityChange); // zero the velocity
                XRRigRigidbody.AddForce(-InteractorVelocity, ForceMode.VelocityChange);      // fling
            }
            else if (HeldObjectInteractable.type == Interactable.InteractableType.JointManipulator)
            {
                if (grabJoint)
                {
                    DestroyJoint();
                }

                Vector3 RadiusVector = HeldObject.transform.position - Transform.position;
                HeldObject.GetComponent <Rigidbody>().AddForce(InteractorVelocity + Vector3.Cross(InteractorAngularVelocity, RadiusVector), ForceMode.VelocityChange);
            }

            HeldObject             = null;
            HeldObjectInteractable = null;
            tempObject.GetComponent <Interactable>().Drop();
        }
    }