using UnityEngine; using UnityEditor; using System.Collections; using RootMotion.FinalIK; namespace RootMotion.Demos { /* * Custom inspector and scene view helpers for the InteractionTarget. * */ [CustomEditor(typeof(InteractionTarget))] public class InteractionTargetInspector : Editor { private InteractionTarget script { get { return target as InteractionTarget; }} private const string twistAxisLabel = " Twist Axis"; private const float size = 0.005f; private static Color targetColor = new Color(0.2f, 1f, 0.5f); private static Color pivotColor = new Color(0.2f, 0.5f, 1f); void OnSceneGUI() { Handles.color = targetColor; Inspector.SphereCap(0, script.transform.position, Quaternion.identity, size); DrawChildrenRecursive(script.transform); if (script.pivot != null) { Handles.color = pivotColor; GUI.color = pivotColor; Inspector.SphereCap(0, script.pivot.position, Quaternion.identity, size); if (script.rotationMode == InteractionTarget.RotationMode.TwoDOF) { Vector3 twistAxisWorld = script.pivot.rotation * script.twistAxis.normalized * size * 40; Handles.DrawLine(script.pivot.position, script.pivot.position + twistAxisWorld); Inspector.SphereCap(0, script.pivot.position + twistAxisWorld, Quaternion.identity, size); Inspector.CircleCap(0, script.pivot.position, Quaternion.LookRotation(twistAxisWorld), size * 20); Handles.Label(script.pivot.position + twistAxisWorld, twistAxisLabel); } } Handles.color = Color.white; GUI.color = Color.white; } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("effectorType")); EditorGUILayout.PropertyField(serializedObject.FindProperty("multipliers"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("interactionSpeedMlp")); EditorGUILayout.PropertyField(serializedObject.FindProperty("pivot")); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationMode")); int rotationMode = serializedObject.FindProperty("rotationMode").enumValueIndex; if (rotationMode == 0) { EditorGUILayout.PropertyField(serializedObject.FindProperty("twistAxis")); EditorGUILayout.PropertyField(serializedObject.FindProperty("twistWeight")); EditorGUILayout.PropertyField(serializedObject.FindProperty("swingWeight")); } else if (rotationMode == 1) { EditorGUILayout.PropertyField(serializedObject.FindProperty("threeDOFWeight")); } EditorGUILayout.PropertyField(serializedObject.FindProperty("rotateOnce")); EditorGUILayout.PropertyField(serializedObject.FindProperty("usePoser")); if (serializedObject.ApplyModifiedProperties()) { EditorUtility.SetDirty(script); } } private void DrawChildrenRecursive(Transform t) { for (int i = 0; i < t.childCount; i++) { Handles.DrawLine(t.position, t.GetChild(i).position); Inspector.SphereCap(0, t.GetChild(i).position, Quaternion.identity, size); DrawChildrenRecursive(t.GetChild(i)); } } } }