private GameObject ConnectToParent(Creature parent, Creature child, GameObject parentObject) { int[,] connections = parent.JointArray; int parentPoint = -1, childPoint = -1; //Gets connection details for (int i = 0; i < 6; i++) //Width of 2D joint array connections = 6 { if (child.ID == connections[i, 0]) { parentPoint = i; childPoint = connections[i, 1]; } } //Get parents connetion point transform Transform parentPointPos = GetPointPos(parentObject, parentPoint); //Get vector3 direction from parent connection point to parent center Vector3 directionFromParent = GetDirection(parentPointPos, parentObject.transform); //Move turtle to parent connection point turt.MoveTurtleTo(parentPointPos.position); //Rotate turtle to face direction from connection point to center of parent turt.FaceTurtleTo(directionFromParent); //Add child object to scene GameObject childObject = AddToScene(child); //Get distance from child object to connection point Transform childPointPos = GetPointPos(childObject, childPoint); float childSpacing = GetDistance(childObject.transform, childPointPos); //Move turtle into possition turt.MoveTurtle(directionFromParent.x, directionFromParent.y, directionFromParent.z, childSpacing); //Move child object to new turtle possition childObject.transform.position = turt.GetTurtlePosition(); //Make sure child object is rotated correctly for jointing CorrectRotation(childObject, childPoint, parentPointPos); CharacterJoint charJoint = childObject.AddComponent <CharacterJoint>(); Vector3 localPoint = childPointPos.InverseTransformPoint(childPointPos.position); charJoint.anchor = localPoint; charJoint.connectedBody = parentObject.GetComponent <Rigidbody>(); charJoint.enableCollision = true; SoftJointLimitSpring springA = charJoint.twistLimitSpring; springA.damper = 1f; charJoint.twistLimitSpring = springA; SoftJointLimitSpring springB = charJoint.swingLimitSpring; springB.damper = 1f; charJoint.swingLimitSpring = springB; charJoint.autoConfigureConnectedAnchor = true; return(childObject); }