EditorIKInspector.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. using UnityEditor.SceneManagement;
  6. namespace RootMotion.FinalIK
  7. {
  8. [CustomEditor(typeof(EditorIK))]
  9. public class EditorIKInspector : Editor
  10. {
  11. private EditorIK script { get { return target as EditorIK; } }
  12. public override void OnInspectorGUI()
  13. {
  14. base.OnInspectorGUI();
  15. if (Application.isPlaying) return;
  16. if (!script.enabled) return;
  17. EditorGUILayout.Space();
  18. if (script.defaultPose != null && script.ik != null && !script.ik.GetIKSolver().executedInEditor)
  19. {
  20. if (GUILayout.Button("Store Default Pose"))
  21. {
  22. script.StoreDefaultPose();
  23. serializedObject.ApplyModifiedProperties();
  24. EditorUtility.SetDirty(script.defaultPose);
  25. AssetDatabase.SaveAssets();
  26. AssetDatabase.Refresh();
  27. }
  28. if (script.defaultPose.poseStored && script.defaultPose.localPositions.Length == script.bones.Length)
  29. {
  30. if (GUILayout.Button("Reset To Default Pose"))
  31. {
  32. script.defaultPose.Restore(script.bones);
  33. EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
  34. }
  35. }
  36. }
  37. EditorGUILayout.Space();
  38. if (script.defaultPose != null && script.defaultPose.poseStored && script.ik != null)
  39. {
  40. if (!script.ik.GetIKSolver().executedInEditor)
  41. {
  42. bool isValid = script.ik.GetIKSolver().IsValid();
  43. EditorGUI.BeginDisabledGroup(!isValid);
  44. if (GUILayout.Button(isValid? "Start Solver": "'Start Solver' disabled for invalid solver setup"))
  45. {
  46. bool initiated = script.Initiate();
  47. serializedObject.ApplyModifiedProperties();
  48. EditorUtility.SetDirty(script.defaultPose);
  49. AssetDatabase.SaveAssets();
  50. AssetDatabase.Refresh();
  51. var ikS = new SerializedObject(script.ik);
  52. ikS.FindProperty("solver").FindPropertyRelative("executedInEditor").boolValue = initiated;
  53. ikS.ApplyModifiedProperties();
  54. script.Update();
  55. EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
  56. }
  57. EditorGUI.EndDisabledGroup();
  58. }
  59. if (script.ik.GetIKSolver().executedInEditor)
  60. {
  61. if (GUILayout.Button("Stop"))
  62. {
  63. var ikS = new SerializedObject(script.ik);
  64. ikS.FindProperty("solver").FindPropertyRelative("executedInEditor").boolValue = false;
  65. ikS.ApplyModifiedProperties();
  66. }
  67. }
  68. }
  69. }
  70. }
  71. }