コード例 #1
0
 void ChangeParent(ChangeParentToPlayer e)
 {
     e.gameobject.transform.SetParent(this.transform);
     if (e.attachToPlayer)
     {
         e.gameobject.GetComponent <SpringJoint>().connectedBody = bikePlate;
     }
 }
コード例 #2
0
    private void AddJoints()
    {
        List <GameObject> collectedObjects = stacking.CollectedCarriables;
        int size = collectedObjects.Count;

        foreach (var collectedObject in collectedObjects)
        {
            collectedObject.AddComponent <Rigidbody> ();

            var boxColliders = collectedObject.GetComponents <BoxCollider> ();

            foreach (var boxCollider in boxColliders)
            {
                boxCollider.enabled = !boxCollider.enabled;
            }
        }

        for (int i = size - 1; i >= 0; i--)
        {
            var setParentEvent = new ChangeParentToPlayer();

            SpringJoint joint = collectedObjects [i].AddComponent <SpringJoint> ();

            if (i > 0)
            {
                joint.connectedBody = collectedObjects [i - 1].GetComponent <Rigidbody> ();
            }
            else
            {
                setParentEvent.attachToPlayer = true;
            }

            //setting joint parameters
            joint.breakForce      = Mathf.Infinity;
            joint.breakTorque     = Mathf.Infinity;
            joint.spring          = springForce;
            joint.damper          = springDampener;
            joint.enableCollision = true;
            joint.tolerance       = lengthTolerance;


            //moving the joint anchor
            joint.connectedAnchor = new Vector3(0, collectedObjects[i].GetComponentInChildren <Renderer>().bounds.min.y, 0);
            print(collectedObjects[i].name + "  " + collectedObjects[i].GetComponentInChildren <Renderer>().bounds.min.y);
            joint.maxDistance = 0f;

            Rigidbody carriableRigidbody = joint.gameObject.GetComponent <Rigidbody>();
            //carriableRigidbody.mass = carriableMass-CarriableMassModifierFactor*(i/size)*(2*collectedObjects [i].GetComponent<Renderer>().bounds.extents.y/maxCarriableHeight);

            carriableRigidbody.mass = size * carriableMass - carriableMass * i;            //* (2 * collectedObjects [i].GetComponent<Renderer> ().bounds.extents.y / maxCarriableHeight);
            //end setting rigidbody parameters
            setParentEvent.gameobject = collectedObjects[i];
            EventManager.Instance.TriggerEvent(setParentEvent);
        }
    }
コード例 #3
0
    /// <summary>
    /// CARRIABLE IS BEING PLACED BACK TO THE STACKED ITEMS
    /// </summary>
    public void PutBackCarriable(int numberOfLostCarriables)
    {
        int indexToCarriableSetBack = stacking.CollectedCarriables.Count - numberOfLostCarriables;

        GameObject carriable = stacking.CollectedCarriables[indexToCarriableSetBack];

        var setParentEvent = new ChangeParentToPlayer();

        SpringJoint joint = carriable.AddComponent <SpringJoint> ();
        Rigidbody   carriableRigidbody = joint.gameObject.GetComponent <Rigidbody>();

        carriableRigidbody.isKinematic = true;

        Vector3 middleOfBike = carriable.GetComponent <CarriablesDrag>().MiddleofBike.transform.position;

        //setting transform parameters
        carriable.transform.position = new Vector3(middleOfBike.x, middleOfBike.y + runningHeight, middleOfBike.z);

        if (indexToCarriableSetBack > 0)
        {
            carriable.transform.rotation = stacking.CollectedCarriables[indexToCarriableSetBack - 1].transform.rotation;
        }
        else
        {
            carriable.transform.rotation = stacking.CollectedCarriables[indexToCarriableSetBack].transform.rotation;
        }

        if (numberOfLostCarriables != stacking.CollectedCarriables.Count)
        {
            joint.connectedBody = stacking.CollectedCarriables[indexToCarriableSetBack - 1].GetComponent <Rigidbody> ();
        }
        else
        {
            setParentEvent.attachToPlayer = true;
        }

        carriableRigidbody.isKinematic = false;

        //setting joint parameters
        joint.breakForce      = Mathf.Infinity;
        joint.breakTorque     = Mathf.Infinity;
        joint.spring          = springForce;
        joint.damper          = springDampener;
        joint.enableCollision = true;
        joint.tolerance       = lengthTolerance;

        //moving the joint anchor
        joint.autoConfigureConnectedAnchor = false;
        if (indexToCarriableSetBack > 0)
        {
            joint.connectedAnchor = new Vector3(0, stacking.CollectedCarriables[indexToCarriableSetBack - 1].GetComponent <CarriablesDrag>().heightOfObject, 0);
        }
        else
        {
            joint.connectedAnchor = new Vector3(0, stacking.CollectedCarriables[indexToCarriableSetBack].GetComponent <CarriablesDrag>().heightOfObject, 0);
        }

        joint.maxDistance = 0f;

        carriableRigidbody.mass   = numberOfLostCarriables;
        setParentEvent.gameobject = carriable;
        EventManager.Instance.TriggerEvent(setParentEvent);

        runningHeight += carriable.GetComponent <CarriablesDrag>().heightOfObject;
        carriable.GetComponent <CarriableHealth>().ResetCurrentLifeCounter();
    }