//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 = new Vector3(x, y, z); //ставим в начало координат на нижнюю грань и устанавливаем размеры //можно ставить в любое место, всё должно посчитаться transform.position = new Vector3(position.x, position.y + height / 2, position.z); transform.localScale = new Vector3(width, height, width); //следующее звено HingeJoint hinge = GetComponent <HingeJoint>(); GameObject next = hinge.connectedBody.gameObject; rotatingplatformmanipulator2 nextbehavior = hinge.connectedBody.GetComponent <rotatingplatformmanipulator2>(); //размещаем следующее звено next.transform.localScale = new Vector3(nextbehavior.diameter, nextbehavior.width, nextbehavior.diameter); next.transform.position = new Vector3(transform.position.x, transform.position.y + (height + /*mul 2 for cylinder*/ 2 * nextbehavior.width) / 2, transform.position.z); //якорь шарнира hinge.anchor = new Vector3(0.0f, 0.5f, 0.0f); //настраиваем привод шарнира drive.Attach(gameObject, next); drive.AngleRange.SetLimits(angle0, angle1); drive.AngleRange.SetTarget(angle0); //инициализируем следующие звенья nextbehavior.Init(position, angle); //поворачиваем вокруг вертикальной оси transform.RotateAround(position, Vector3.down, angle); }