void OnSceneGUI() { //Debug.Log(this.target.GetType()); EnhanceCharacterJoint script = (EnhanceCharacterJoint)this.target; if (script != null) { CharacterJoint joint = (CharacterJoint)script.gameObject.GetComponent(typeof(CharacterJoint)); Vector3 twistAxis = joint.transform.TransformDirection(joint.axis).normalized; Vector3 swing1Axis = joint.transform.TransformDirection(joint.swingAxis).normalized; Vector3 swing2Axis = Vector3.Cross(twistAxis, swing1Axis); var position = joint.transform.position; float size = HandleUtility.GetHandleSize(position); Handles.color = new Color(1, 0.5f, 0); // orange == twist, direction = swing1, rotates about twist axis Handles.DrawWireArc(position, twistAxis, swing1Axis, joint.highTwistLimit.limit, size); Handles.DrawWireArc(position, twistAxis, swing1Axis, joint.lowTwistLimit.limit, size); Handles.DrawLine(position, position + Quaternion.AngleAxis(joint.highTwistLimit.limit, twistAxis) * swing1Axis * size); Handles.DrawLine(position, position + Quaternion.AngleAxis(joint.lowTwistLimit.limit, twistAxis) * swing1Axis * size); Handles.color = new Color(0, 0.3f, 0); // green=swing1, direction=twistAxis rotates about swing1Axis Handles.DrawWireArc(position, swing1Axis, twistAxis, joint.swing1Limit.limit, size); Handles.DrawWireArc(position, swing1Axis, twistAxis, -joint.swing1Limit.limit, size); Handles.DrawLine(position, position + Quaternion.AngleAxis(joint.swing1Limit.limit, swing1Axis) * twistAxis * size); Handles.DrawLine(position, position + Quaternion.AngleAxis(-joint.swing1Limit.limit, swing1Axis) * twistAxis * size); Handles.color = new Color(0, 0, 0.5f); // blue=swing2, direction=twistAxis, rotates about swing2 axis Handles.DrawWireArc(position, swing2Axis, twistAxis, joint.swing2Limit.limit, size); Handles.DrawWireArc(position, swing2Axis, twistAxis, -joint.swing2Limit.limit, size); Handles.DrawLine(position, position + Quaternion.AngleAxis(joint.swing2Limit.limit, swing2Axis) * twistAxis * size); Handles.DrawLine(position, position + Quaternion.AngleAxis(-joint.swing2Limit.limit, swing2Axis) * twistAxis * size); } }
public override void OnInspectorGUI() { targetScript = (EnhanceCharacterJoint)target; twistColor = EditorGUILayout.ColorField("Twist Color", twistColor); swing1Color = EditorGUILayout.ColorField("Swing 1 Color", swing1Color); swing2Color = EditorGUILayout.ColorField("Swing 2 Color", swing2Color); EditorUtility.SetDirty(targetScript); Repaint(); }
public void OnSceneGUI() { targetScript = (EnhanceCharacterJoint)target; Color blackColor = Color.black; CharacterJoint joint = targetScript.GetComponent <CharacterJoint>(); Vector3 jointCenter = joint.transform.TransformPoint(joint.anchor); Vector3 twistAxis = joint.transform.TransformDirection(joint.axis).normalized; Vector3 forwardAxis = joint.transform.TransformDirection(Vector3.forward); // 90 to the twist axis Vector3 twist90 = Vector3.Cross(twistAxis, forwardAxis); // high limit Handles.color = twistColor; Handles.DrawSolidArc(jointCenter, twistAxis, twist90, -joint.highTwistLimit.limit, 1); // Low limit blackColor.a = twistColor.a; Handles.color = Color.Lerp(blackColor, twistColor, 0.85f); Handles.DrawSolidArc(jointCenter, twistAxis, twist90, -joint.lowTwistLimit.limit, 1); // Swing axis Vector3 swingAxis = joint.transform.TransformDirection(joint.swingAxis).normalized; Handles.color = swing1Color; Handles.DrawSolidArc(jointCenter, swingAxis, twistAxis, -joint.swing1Limit.limit, 1); Handles.DrawSolidArc(jointCenter, swingAxis, twistAxis, joint.swing1Limit.limit, 1); // 90 to the Swing axis and twist Vector3 swingOrtho = Vector3.Cross(swingAxis, twistAxis); Handles.color = swing2Color; Handles.DrawSolidArc(jointCenter, swingOrtho, twistAxis, -joint.swing2Limit.limit, 1); Handles.DrawSolidArc(jointCenter, swingOrtho, twistAxis, joint.swing2Limit.limit, 1); }