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); } } }