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(); }
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(); }