public void _AutoSetParameters() { ConeConstraintMB mb = this; Transform j = mb.transform; Transform jparent = j.parent; Transform jchild = mb.nextJoint; // decide the refAxis { Vector3 axis = Vector3.zero; if (jparent != null) { axis = (j.position - jparent.position).normalized; } else { axis = (jchild.position - j.position).normalized; } mb.refAxis = Misc.InverseTransformDirection(jparent, axis); //convert to parent space } //decide the angle limit mb.angleLimit = DEF_ANGLELIMIT; // decide the min/max limit mb.minTwistLimit = DEF_MinTwist; mb.maxTwistLimit = DEF_MaxTwist; mb.CalcInitData(); //calc startlocalRot }
public override void OnInspectorGUI() { ConeConstraintMB mb = (ConeConstraintMB)target; mb.enabled = EditorGUILayout.Toggle("Enabled", mb.enabled); EditorGUI.BeginChangeCheck(); mb.nextJoint = EditorGUILayout.ObjectField("nextJoint", mb.nextJoint, typeof(Transform), true) as Transform; if (EditorGUI.EndChangeCheck()) { EUtil.RepaintSceneView(); } if (mb.nextJoint == null) { EditorGUILayout.LabelField("Set the nextJoint first..."); return; } else { EUtil.PushGUIEnable(mb.enabled); EditorGUILayout.BeginHorizontal(); { GUILayout.Space(30f); if (EUtil.Button("ReInit", "decide all the parameters with default method", Color.green)) { Undo.RecordObject(mb, "AutoInit"); mb._AutoSetParameters(); EUtil.RepaintSceneView(); } GUILayout.Space(30f); } EditorGUILayout.EndHorizontal(); // angle limit EditorGUI.BeginChangeCheck(); float newAngleLimit = EditorGUILayout.Slider(CONT_AngleLimit, mb.angleLimit, 0, 180f); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(mb, "Modify Angle Limit"); mb.angleLimit = newAngleLimit; EUtil.RepaintSceneView(); } // ref-Axis EditorGUI.BeginChangeCheck(); Vector3 newRefAxis = EUtil.DrawV3P(CONT_RefAxis, mb.refAxis); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(mb, "Modify ref axis"); mb.refAxis = newRefAxis; mb.CalcInitData(); //!! recalc the startTwistRot EUtil.RepaintSceneView(); } mb.limitTwist = EditorGUILayout.Toggle(CONT_LimitTwist, mb.limitTwist); if (mb.limitTwist) { float min = mb.minTwistLimit; float max = mb.maxTwistLimit; EditorGUI.BeginChangeCheck(); EUtil.DrawMinMaxSlider("Twist Limits", ref min, ref max, -180f, 180f); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(mb, "Modify twist limits"); mb.minTwistLimit = min; mb.maxTwistLimit = max; EUtil.RepaintSceneView(); } EditorGUILayout.LabelField("Current twist: " + mb.CalcTwist()); } ms_showDisplaySetting = EditorGUILayout.Foldout(ms_showDisplaySetting, "Display Settings:"); if (ms_showDisplaySetting) { EditorGUI.BeginChangeCheck(); ms_markerSize = EditorGUILayout.FloatField("Marker size", ms_markerSize); ms_markerColor = EditorGUILayout.ColorField("Marker color", ms_markerColor); if (EditorGUI.EndChangeCheck()) { EUtil.RepaintSceneView(); } } EUtil.PopGUIEnable(); } }