Exemple #1
0
    private void CreateChain(Rigidbody link1, Vector3 differenceVecStep, int count)
    {
        if (count >= chainPoints)
        {
            return;
        }
        GameObject link2;

        if (count == chainPoints - 1)
        {
            link2 = player2.gameObject;
        }
        else
        {
            link2 = Instantiate(ChainLink, player1.position + (count * differenceVecStep), player1.rotation);
            ChainRelatedObjects.Add(link2);
        }
        GameObject joint = Instantiate(SpringJoint);

        ChainRelatedObjects.Add(joint);
        link2.transform.parent = gameObject.transform;
        joint.transform.parent = gameObject.transform;

        Rigidbody link1Rigid = link1.GetComponent <Rigidbody>();
        Rigidbody link2Rigid = link2.GetComponent <Rigidbody>();

        if (link1Rigid == null || link2Rigid == null)
        {
            Debug.LogError("rigidbodies not found in chain links");
        }
        else
        {
            SpringJoint script = joint.GetComponent <SpringJoint>();
            if (script == null)
            {
                Debug.Log("spring joint script not found");
            }
            else
            {
                script.SetHandles(link1Rigid, link2Rigid);
                GameObject line = Instantiate(LineLink, player1.position + (count * differenceVecStep), player1.rotation);
                ChainRelatedObjects.Add(line);
                LineLink lineScript = line.GetComponent <LineLink>();
                line.transform.parent = gameObject.transform;
                if (lineScript == null)
                {
                    Debug.LogError("Line script not found");
                }
                else
                {
                    lineScript.SetLineEnds(link1.transform, link2.transform);
                }
                CreateChain(link2Rigid, differenceVecStep, count + 1);
            }
        }
    }