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.
68 lines
2.8 KiB
C#
68 lines
2.8 KiB
C#
6 months ago
|
using UnityEngine;
|
||
|
using UnityEditor;
|
||
|
using System.Collections;
|
||
|
|
||
|
namespace RootMotion.FinalIK {
|
||
|
|
||
|
/*
|
||
|
* Custom inspector and scene view tools for Constraints
|
||
|
* */
|
||
|
public class ConstraintsInspector: IKSolverInspector {
|
||
|
|
||
|
#region Public methods
|
||
|
|
||
|
/*
|
||
|
* Draws the custom inspector for Constraints
|
||
|
* */
|
||
|
public static void AddInspector(SerializedProperty prop) {
|
||
|
if (!prop.isExpanded) return;
|
||
|
|
||
|
// Main properties
|
||
|
EditorGUILayout.PropertyField(prop.FindPropertyRelative("target"), new GUIContent("Target", "Target transform for the pelvis (optional). If assigned, will overwrite pelvis.position in each update."));
|
||
|
EditorGUILayout.PropertyField(prop.FindPropertyRelative("positionOffset"), new GUIContent("Pos Offset", "Pelvis offset from animation. If there is no animation playing and Fix Transforms is unchecked, it will make the character fly away."));
|
||
|
EditorGUILayout.PropertyField(prop.FindPropertyRelative("positionWeight"), new GUIContent("Pos Weight", "The weight of lerping the pelvis to bipedIK.solvers.pelvis.position."));
|
||
|
EditorGUILayout.PropertyField(prop.FindPropertyRelative("rotationOffset"), new GUIContent("Rot Offset", "Pelvis rotation offset from animation. If there is no animation playing and Fix Transforms is unchecked, it will make the character spin."));
|
||
|
EditorGUILayout.PropertyField(prop.FindPropertyRelative("rotationWeight"), new GUIContent("Rot Weight", "The weiight of slerping the pelvis to bipedIK.solver.pelvis.rotation."));
|
||
|
|
||
|
EditorGUILayout.Space();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Draws the scene view helpers for Constraints
|
||
|
* */
|
||
|
public static void AddScene(Constraints constraints, Color color, bool modifiable) {
|
||
|
if (!constraints.IsValid()) return;
|
||
|
|
||
|
Handles.color = color;
|
||
|
GUI.color = color;
|
||
|
|
||
|
// Transform
|
||
|
Inspector.SphereCap(0, constraints.transform.position, Quaternion.identity, GetHandleSize(constraints.transform.position));
|
||
|
|
||
|
// Target
|
||
|
Handles.color = new Color(color.r, color.g, color.b, color.a * constraints.positionWeight);
|
||
|
Handles.DrawLine(constraints.transform.position, constraints.position);
|
||
|
Handles.color = color;
|
||
|
|
||
|
if (Application.isPlaying && modifiable && (constraints.positionWeight > 0 || constraints.rotationWeight > 0)) {
|
||
|
Inspector.CubeCap(0, constraints.position, Quaternion.Euler(constraints.rotation), GetHandleSize(constraints.transform.position));
|
||
|
|
||
|
// Manipulating position and rotation
|
||
|
switch(Tools.current) {
|
||
|
case Tool.Move:
|
||
|
constraints.position = Handles.PositionHandle(constraints.position, Quaternion.Euler(constraints.rotation));
|
||
|
break;
|
||
|
case Tool.Rotate:
|
||
|
constraints.rotation = Handles.RotationHandle(Quaternion.Euler(constraints.rotation), constraints.position).eulerAngles;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Handles.color = Color.white;
|
||
|
GUI.color = Color.white;
|
||
|
}
|
||
|
|
||
|
#endregion Public methods
|
||
|
}
|
||
|
}
|