InteractionTargetInspector.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections;
  4. using RootMotion.FinalIK;
  5. namespace RootMotion.Demos {
  6. /*
  7. * Custom inspector and scene view helpers for the InteractionTarget.
  8. * */
  9. [CustomEditor(typeof(InteractionTarget))]
  10. public class InteractionTargetInspector : Editor {
  11. private InteractionTarget script { get { return target as InteractionTarget; }}
  12. private const string twistAxisLabel = " Twist Axis";
  13. private const float size = 0.005f;
  14. private static Color targetColor = new Color(0.2f, 1f, 0.5f);
  15. private static Color pivotColor = new Color(0.2f, 0.5f, 1f);
  16. void OnSceneGUI() {
  17. Handles.color = targetColor;
  18. Inspector.SphereCap(0, script.transform.position, Quaternion.identity, size);
  19. DrawChildrenRecursive(script.transform);
  20. if (script.pivot != null) {
  21. Handles.color = pivotColor;
  22. GUI.color = pivotColor;
  23. Inspector.SphereCap(0, script.pivot.position, Quaternion.identity, size);
  24. if (script.rotationMode == InteractionTarget.RotationMode.TwoDOF)
  25. {
  26. Vector3 twistAxisWorld = script.pivot.rotation * script.twistAxis.normalized * size * 40;
  27. Handles.DrawLine(script.pivot.position, script.pivot.position + twistAxisWorld);
  28. Inspector.SphereCap(0, script.pivot.position + twistAxisWorld, Quaternion.identity, size);
  29. Inspector.CircleCap(0, script.pivot.position, Quaternion.LookRotation(twistAxisWorld), size * 20);
  30. Handles.Label(script.pivot.position + twistAxisWorld, twistAxisLabel);
  31. }
  32. }
  33. Handles.color = Color.white;
  34. GUI.color = Color.white;
  35. }
  36. public override void OnInspectorGUI()
  37. {
  38. serializedObject.Update();
  39. EditorGUILayout.PropertyField(serializedObject.FindProperty("effectorType"));
  40. EditorGUILayout.PropertyField(serializedObject.FindProperty("multipliers"), true);
  41. EditorGUILayout.PropertyField(serializedObject.FindProperty("interactionSpeedMlp"));
  42. EditorGUILayout.PropertyField(serializedObject.FindProperty("pivot"));
  43. EditorGUILayout.Space();
  44. EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationMode"));
  45. int rotationMode = serializedObject.FindProperty("rotationMode").enumValueIndex;
  46. if (rotationMode == 0)
  47. {
  48. EditorGUILayout.PropertyField(serializedObject.FindProperty("twistAxis"));
  49. EditorGUILayout.PropertyField(serializedObject.FindProperty("twistWeight"));
  50. EditorGUILayout.PropertyField(serializedObject.FindProperty("swingWeight"));
  51. } else if (rotationMode == 1)
  52. {
  53. EditorGUILayout.PropertyField(serializedObject.FindProperty("threeDOFWeight"));
  54. }
  55. EditorGUILayout.PropertyField(serializedObject.FindProperty("rotateOnce"));
  56. if (serializedObject.ApplyModifiedProperties())
  57. {
  58. EditorUtility.SetDirty(script);
  59. }
  60. }
  61. private void DrawChildrenRecursive(Transform t) {
  62. for (int i = 0; i < t.childCount; i++) {
  63. Handles.DrawLine(t.position, t.GetChild(i).position);
  64. Inspector.SphereCap(0, t.GetChild(i).position, Quaternion.identity, size);
  65. DrawChildrenRecursive(t.GetChild(i));
  66. }
  67. }
  68. }
  69. }