void OnSceneGUI()
    {
        //reference to the class of object used to display gizmo
        VRBasics_Hinge hinge = (VRBasics_Hinge)target;

        //reference to the hinge joint the gizmo displays
        HingeJoint hingeJoint = hinge.GetComponent <HingeJoint> ();

        if (hingeJoint.useLimits != hinge.useLimits)
        {
            hingeJoint.useLimits = hinge.useLimits;
        }

        if (hingeJoint.limits.min < -179.9f)
        {
            hinge.limitMin = -179.9f;
            //adjust the limits of the hinge
            hinge.SetLimits();
        }

        if (hingeJoint.limits.max < 0.0f)
        {
            hinge.limitMax = 0.0f;
            //adjust the limits of the hinge
            hinge.SetLimits();
        }

        //this checks if the limits of the hinge joint were changed on the hinge joint itself
        if (hingeJoint.limits.max != hinge.limitMax || hingeJoint.limits.min != hinge.limitMin)
        {
            hinge.limitMax = hingeJoint.limits.max;
            hinge.limitMin = hingeJoint.limits.min;
            //adjust the limits of the hinge
            hinge.SetLimits();
        }

        //in edit mode
        if (!Application.isPlaying)
        {
            //at runtime this is taken care of by the physics engine
            //prevent the hinge from moving away from the fulcrum of the lever during edit mode
            hinge.transform.localPosition = Vector3.zero;
            //prevents the hinge from rotating away from the fulcrum of the parent
            hinge.transform.localEulerAngles = Vector3.zero;
        }

        //reference to the parent class
        VRBasics_Lever lever = hinge.transform.parent.gameObject.GetComponent <VRBasics_Lever> ();

        //DRAW HINGE
        hinge.DrawGizmo();

        //DRAW LEVER
        lever.DrawGizmo();
    }
Exemplo n.º 2
0
    public void DrawGizmo()
    {
        //reference to the parent class
        VRBasics_Lever lever = transform.parent.gameObject.GetComponent <VRBasics_Lever> ();

        //reference to the hinge joint the gizmo displays
        HingeJoint hingeJoint = GetComponent <HingeJoint> ();
        //reference to the limits of the hinge joint
        JointLimits limits = hingeJoint.limits;

        //color of gizmo
        Handles.color = Color.cyan;

        //an empty game object used to aid in positioning
        GameObject dummyTrans = GetDummy();

        //DRAW HINGE
        if (useLimits)
        {
            //draw an arc representing the movement of the lever
            Handles.DrawWireArc(lever.transform.position, lever.transform.right, lever.transform.up, limits.min, lever.length);
            Handles.DrawWireArc(lever.transform.position, lever.transform.right, lever.transform.up, limits.max, lever.length);

            //draw a empty dot at min end of the arc
            dummyTrans.transform.position  = lever.transform.position;
            dummyTrans.transform.rotation  = lever.transform.rotation;
            dummyTrans.transform.position += dummyTrans.transform.up * lever.length;
            dummyTrans.transform.RotateAround(lever.transform.position, lever.transform.right, limits.min);
            Handles.DrawWireDisc(dummyTrans.transform.position, lever.transform.right, 0.015f);

            //draw a empty dot at max end of the arc
            dummyTrans.transform.position  = lever.transform.position;
            dummyTrans.transform.rotation  = lever.transform.rotation;
            dummyTrans.transform.position += dummyTrans.transform.up * lever.length;
            dummyTrans.transform.RotateAround(lever.transform.position, lever.transform.right, limits.max);
            Handles.DrawWireDisc(dummyTrans.transform.position, lever.transform.right, 0.015f);
        }
        else
        {
            //draw an arc representing the movement of the lever
            Handles.DrawWireArc(lever.transform.position, lever.transform.right, lever.transform.up, 360, lever.length);
            //draw a empty dot at min end of the arc
            dummyTrans.transform.position  = lever.transform.position;
            dummyTrans.transform.rotation  = lever.transform.rotation;
            dummyTrans.transform.position += dummyTrans.transform.up * lever.length;
            dummyTrans.transform.RotateAround(lever.transform.position, lever.transform.right, 0);
            Handles.DrawWireDisc(dummyTrans.transform.position, lever.transform.right, 0.015f);
        }

        //remove the dummy
        DestroyImmediate(dummyTrans);
    }
    void OnSceneGUI()
    {
        //reference to the class of object used to display gizmo
        VRBasics_Lever lever = (VRBasics_Lever)target;

        VRBasics_Hinge hinge = lever.hinge.GetComponent <VRBasics_Hinge> ();

        //DRAW LEVER
        lever.DrawGizmo();

        //DRAW HINGE
        hinge.DrawGizmo();
    }