You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
3.4 KiB
C#

6 months ago
using UnityEngine;
using UnityEditor;
using System.Collections;
using RootMotion.FinalIK;
namespace RootMotion.Demos {
/*
* Custom inspector and scene view helpers for the InteractionTarget.
* */
[CustomEditor(typeof(InteractionTarget))]
public class InteractionTargetInspector : Editor {
private InteractionTarget script { get { return target as InteractionTarget; }}
private const string twistAxisLabel = " Twist Axis";
private const float size = 0.005f;
private static Color targetColor = new Color(0.2f, 1f, 0.5f);
private static Color pivotColor = new Color(0.2f, 0.5f, 1f);
void OnSceneGUI() {
Handles.color = targetColor;
Inspector.SphereCap(0, script.transform.position, Quaternion.identity, size);
DrawChildrenRecursive(script.transform);
if (script.pivot != null) {
Handles.color = pivotColor;
GUI.color = pivotColor;
Inspector.SphereCap(0, script.pivot.position, Quaternion.identity, size);
if (script.rotationMode == InteractionTarget.RotationMode.TwoDOF)
{
Vector3 twistAxisWorld = script.pivot.rotation * script.twistAxis.normalized * size * 40;
Handles.DrawLine(script.pivot.position, script.pivot.position + twistAxisWorld);
Inspector.SphereCap(0, script.pivot.position + twistAxisWorld, Quaternion.identity, size);
Inspector.CircleCap(0, script.pivot.position, Quaternion.LookRotation(twistAxisWorld), size * 20);
Handles.Label(script.pivot.position + twistAxisWorld, twistAxisLabel);
}
}
Handles.color = Color.white;
GUI.color = Color.white;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(serializedObject.FindProperty("effectorType"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("multipliers"), true);
EditorGUILayout.PropertyField(serializedObject.FindProperty("interactionSpeedMlp"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("pivot"));
EditorGUILayout.Space();
EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationMode"));
int rotationMode = serializedObject.FindProperty("rotationMode").enumValueIndex;
if (rotationMode == 0)
{
EditorGUILayout.PropertyField(serializedObject.FindProperty("twistAxis"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("twistWeight"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("swingWeight"));
} else if (rotationMode == 1)
{
EditorGUILayout.PropertyField(serializedObject.FindProperty("threeDOFWeight"));
}
EditorGUILayout.PropertyField(serializedObject.FindProperty("rotateOnce"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("usePoser"));
if (serializedObject.ApplyModifiedProperties())
{
EditorUtility.SetDirty(script);
}
}
private void DrawChildrenRecursive(Transform t) {
for (int i = 0; i < t.childCount; i++) {
Handles.DrawLine(t.position, t.GetChild(i).position);
Inspector.SphereCap(0, t.GetChild(i).position, Quaternion.identity, size);
DrawChildrenRecursive(t.GetChild(i));
}
}
}
}