Пример #1
0
    //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);
    }
Пример #2
0
    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);
    }