88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|