//remember for cylinder, width (y - scale) is half of real public void Init(Vector3 position, float angle) { //следующее звено FixedJoint fixedjoint = GetComponent <FixedJoint>(); GameObject next = fixedjoint.connectedBody.gameObject; leverhinge1manipulator2 nextbehavior = fixedjoint.connectedBody.GetComponent <leverhinge1manipulator2>(); //потребуются звенья lever1manipulator2 lever1 = lever1object.GetComponent <lever1manipulator2>(); rotatingplatformmanipulator2 rotatingplatform = rotatingplatformobject.GetComponent <rotatingplatformmanipulator2>(); //размещаем следующее звено float nexwidth = (transform.position.z - /*mul 2 for cylinder*/ 2 * width / 2) + lever1.width / 2 - rotatingplatform.transform.position.z; next.transform.localScale = new Vector3(nextbehavior.diameter, nexwidth / 2 /*div 2 for cylinder*/, nextbehavior.diameter); next.transform.position = new Vector3(transform.position.x + lever, transform.position.y, transform.position.z - (/*mul 2 for cylinder*/ 2 * width + nexwidth) / 2); //якорь шарнира fixedjoint.anchor = new Vector3(0.0f, 0.5f, 0.0f); //инициализируем следующие звенья nextbehavior.Init(position, angle); //поворачиваем вокруг вертикальной оси transform.RotateAround(position, Vector3.down, angle); }
public void Init(Vector3 position, float angle) { { //соединённое звено HingeJoint hinge = GetComponents <HingeJoint>()[0]; GameObject next = hinge.connectedBody.gameObject; leverhinge1manipulator2 nextbehavior = hinge.connectedBody.GetComponent <leverhinge1manipulator2>(); //размещаем это звено, ориентируясь на соединённое transform.localScale = new Vector3(width, length, width); transform.position = new Vector3(nextbehavior.transform.position.x, nextbehavior.transform.position.y + (length + nextbehavior.diameter) / 2, nextbehavior.transform.position.z - /*mul 2 for cylinder*/ 2 * nextbehavior.transform.localScale.y / 2 + width / 2); //якорь шарнира hinge.anchor = new Vector3(0.0f, -0.5f - nextbehavior.diameter / length / 2, 0.0f); } //поворачиваем вокруг вертикальной оси //именно здесь т.к. эта цепочка звеньев смыкается с другой уже инициализированной цепочкой звеньев transform.RotateAround(position, Vector3.down, angle); { //ещё соединённое звено (из другой цепочки звеньев) HingeJoint hinge = GetComponents <HingeJoint>()[1]; GameObject next = hinge.connectedBody.gameObject; armhinge1manipulator2 nextbehavior = hinge.connectedBody.GetComponent <armhinge1manipulator2>(); //якорь шарнира hinge.anchor = new Vector3(0.0f, 0.5f + nextbehavior.diameter / length / 2, 0.0f); } }