12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEditor;
- using UnityEditor.SceneManagement;
- namespace RootMotion.FinalIK
- {
- [CustomEditor(typeof(EditorIK))]
- public class EditorIKInspector : Editor
- {
- private EditorIK script { get { return target as EditorIK; } }
- public override void OnInspectorGUI()
- {
- base.OnInspectorGUI();
- if (Application.isPlaying) return;
- if (!script.enabled) return;
- EditorGUILayout.Space();
- if (script.defaultPose != null && script.ik != null && !script.ik.GetIKSolver().executedInEditor)
- {
- if (GUILayout.Button("Store Default Pose"))
- {
- script.StoreDefaultPose();
- serializedObject.ApplyModifiedProperties();
- EditorUtility.SetDirty(script.defaultPose);
- AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
- }
- if (script.defaultPose.poseStored && script.defaultPose.localPositions.Length == script.bones.Length)
- {
- if (GUILayout.Button("Reset To Default Pose"))
- {
- script.defaultPose.Restore(script.bones);
- EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
- }
- }
- }
- EditorGUILayout.Space();
- if (script.defaultPose != null && script.defaultPose.poseStored && script.ik != null)
- {
- if (!script.ik.GetIKSolver().executedInEditor)
- {
- bool isValid = script.ik.GetIKSolver().IsValid();
- EditorGUI.BeginDisabledGroup(!isValid);
- if (GUILayout.Button(isValid? "Start Solver": "'Start Solver' disabled for invalid solver setup"))
- {
- bool initiated = script.Initiate();
- serializedObject.ApplyModifiedProperties();
- EditorUtility.SetDirty(script.defaultPose);
- AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
- var ikS = new SerializedObject(script.ik);
- ikS.FindProperty("solver").FindPropertyRelative("executedInEditor").boolValue = initiated;
- ikS.ApplyModifiedProperties();
- script.Update();
- EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
- }
- EditorGUI.EndDisabledGroup();
- }
- if (script.ik.GetIKSolver().executedInEditor)
- {
- if (GUILayout.Button("Stop"))
- {
- var ikS = new SerializedObject(script.ik);
- ikS.FindProperty("solver").FindPropertyRelative("executedInEditor").boolValue = false;
- ikS.ApplyModifiedProperties();
- }
- }
- }
- }
- }
- }
|