コード例 #1
0
    public void Release(float scale = 0, bool GrabbedStatic = false)
    {
        ApplySoap ap = grabbedGO.GetComponent <ApplySoap>();

        if (ap != null)
        {
            ap.grabbed = false;
        }
        if (grabbedGO.GetComponent <Rigidbody2D>() != null)
        {
            grabbedGO.GetComponent <Rigidbody2D>().isKinematic = grabbedStatic;
            grabbedGO.GetComponent <Rigidbody2D>().AddForce(mover.Movement() * scale);
        }
        wait = 0;
        if (triggerCollider != null)
        {
            triggerCollider.enabled = true;
        }

        if (left)
        {
            handLimiter.leftGrabbed = null;
        }
        else
        {
            handLimiter.rightGrabbed = null;
        }

        grabbed       = false;
        hand.grabbing = false;
        Destroy(rj);
        if (GrabbedStatic)
        {
            mover.ReleasedStatic();
        }

        grabbedGO.GetComponent <Rigidbody2D>().freezeRotation = false;
        Debug.Log(changeInAngle);
        grabbedGO.GetComponent <Rigidbody2D>().angularVelocity = changeInAngle * 10f;
        stillRotates = false;

        if (dtj != null)
        {
            dtj.Destroy(); dtj = null;
        }
        //  handRB.gameObject.SetActive(false);
    }
コード例 #2
0
    // grab the given object
    void Grabbed(GameObject grabbable, bool gStatic = false)
    {
        grabbed       = true;
        grabbedGO     = grabbable;
        grabbedStatic = gStatic;
        ApplySoap ap = grabbedGO.GetComponent <ApplySoap>();

        if (ap != null)
        {
            ap.grabbed = true;
        }
        // handRB.gameObject.SetActive(true);
        if (!grabbedStatic)
        {
            previousParent  = grabbedGO.transform.parent;
            storedLocal     = handRB.transform.localPosition;
            storedLayer     = grabbable.layer;
            storedLayerName = LayerMask.LayerToName(grabbable.layer);
            //  Debug.Log(storedLayerName);
            //handRB.transform.position = grabbedGO.transform.position;

            grabbable.layer = LayerMask.NameToLayer("Ignore Player");

            grabbedGO.GetComponent <Rigidbody2D>().velocity = new Vector2(0, 0);

            Joint2D[] connectedJoints = grabbedGO.GetComponentsInChildren <Joint2D>();
            foreach (Joint2D joint in connectedJoints)
            {
                connectedBodies.Add(joint.connectedBody);
                if (grabbedGO.tag != "GrabbableKeepRotation")
                {
                    joint.connectedBody.gameObject.layer = LayerMask.NameToLayer("Ignore Player");
                }
            }
            //Debug.Log("grabbed");
            if (grabbedGO.tag != "GrabbableKeepRotation")
            {
                rj = grabbedGO.AddComponent <RelativeJoint2D>();
                rj.connectedBody     = handRB;
                autoCorrectNextFrame = true;
                angleOffset          = -Extensions.Angle(-transform.up) - grabbedGO.transform.eulerAngles.z;
                rj.correctionScale   = 0.7f;
                grabbedGO.GetComponent <Rigidbody2D>().freezeRotation = true;
            }
            else
            {
                TargetJoint2D joint1 = grabbedGO.AddComponent <TargetJoint2D>();
                TargetJoint2D joint2 = handRB.gameObject.AddComponent <TargetJoint2D>();
                dtj          = new DoubleTargetJoint(joint1, joint2, handRB.transform.position);
                stillRotates = true;

                //TargetJoint2D tj = gr
            }
            changeInAngleTime = Time.time;
            previouseAngle    = grabbedGO.transform.eulerAngles.z;

            ActivateableObject ao = grabbedGO.GetComponent <ActivateableObject>();

            // rj.breakForce = 6000;
        }
        else
        {
            mover.GrabbedStatic(grabbedGO);
        }

        if (left)
        {
            handLimiter.leftGrabbed = grabbedGO.transform;
        }
        else
        {
            handLimiter.rightGrabbed = grabbedGO.transform;
        }

        hand.grabbing  = true;
        previouseAngle = grabbedGO.transform.eulerAngles.z;

        PointGiver pg = grabbedGO.GetComponent <PointGiver>();

        if (pg != null)
        {
            pg.Caught();
        }
    }