IKSolverLimbInspector.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections;
  4. using System;
  5. namespace RootMotion.FinalIK {
  6. /*
  7. * Custom inspector and scene view tools for IKSolverLimb
  8. * */
  9. public class IKSolverLimbInspector: IKSolverInspector {
  10. #region Public methods
  11. /*
  12. * Draws the custom inspector for IKSolverLimb
  13. * */
  14. public static void AddInspector(SerializedProperty prop, bool editHierarchy, bool showReferences) {
  15. // Draw the trigonometric IK inspector
  16. IKSolverTrigonometricInspector.AddInspector(prop, editHierarchy, showReferences);
  17. EditorGUILayout.Space();
  18. if (showReferences && editHierarchy) {
  19. EditorGUILayout.PropertyField(prop.FindPropertyRelative("goal"), new GUIContent("Avatar IK Goal", "Avatar IK Goal here is only used by the 'Arm' bend modifier."));
  20. }
  21. EditorGUILayout.PropertyField(prop.FindPropertyRelative("maintainRotationWeight"), new GUIContent("Maintain Rotation", "Weight of rotating the last bone back to the rotation it had before solving IK."));
  22. // Bend normal modifier.
  23. EditorGUILayout.PropertyField(prop.FindPropertyRelative("bendModifier"), new GUIContent("Bend Modifier", "Bend normal modifier."));
  24. EditorGUILayout.PropertyField(prop.FindPropertyRelative("bendModifierWeight"), new GUIContent("Bend Modifier Weight", "Weight of the bend modifier."));
  25. if (prop.FindPropertyRelative("bendModifier").enumValueIndex == 4) EditorGUILayout.PropertyField(prop.FindPropertyRelative("bendGoal"), new GUIContent("Bend Goal", "The bend goal Transform (optional, you can also use IKSolverTrigonometric.SetBendGoalPosition(Vector position, float weight)."));
  26. EditorGUILayout.Space();
  27. }
  28. /*
  29. * Draws the scene view helpers for IKSolverLimb
  30. * */
  31. public static void AddScene(IKSolverLimb solver, Color color, bool modifiable) {
  32. if (Application.isPlaying && !solver.initiated) return;
  33. if (!Application.isPlaying && !solver.IsValid()) return;
  34. if (solver.bendGoal != null && solver.bendModifierWeight > 0f) {
  35. Color c = color;
  36. c.a = solver.bendModifierWeight;
  37. Handles.color = c;
  38. Handles.DrawLine(solver.bone2.transform.position, solver.bendGoal.position);
  39. Inspector.SphereCap(0, solver.bendGoal.position, Quaternion.identity, GetHandleSize(solver.bendGoal.position) * 0.5f);
  40. Handles.color = Color.white;
  41. }
  42. IKSolverTrigonometricInspector.AddScene(solver as IKSolverTrigonometric, color, modifiable);
  43. }
  44. #endregion Public methods
  45. }
  46. }