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.

49 lines
2.4 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System;
namespace RootMotion.Dynamics {
[CustomEditor(typeof(CharacterJoint))]
public class CharacterJointInspector : JointInspector {
private static Color
highTwistColor = new Color(1, 0.75f, 0, 0.3f),
lowTwistColor = new Color(0.8f, 0.65f, 0, 0.3f),
swing1Color = new Color(0, 1, 0, 0.3f),
swing2Color = new Color(0, 0, 1, 0.3f);
public static void DrawJoint(CharacterJoint joint, bool modifiable = true, float alphaMlp = 1f) {
if (joint == null) return;
Vector3 axis = Vector3.zero;
if (joint.axis != Vector3.zero) axis = joint.axis.normalized;
Vector3 swingAxis = Vector3.zero;
if (joint.swingAxis != Vector3.zero) swingAxis = joint.swingAxis.normalized;
Vector3 crossAxis = swingAxis;
if (swingAxis != axis) crossAxis = Vector3.Cross(swingAxis, axis);
float newLowTwistLimit = DrawJointLimit(joint as Joint, "Low Twist Limit", axis, joint.lowTwistLimit.limit, MlpAlpha(lowTwistColor, alphaMlp), -25, modifiable);
joint.lowTwistLimit = NewJointLimit(newLowTwistLimit, joint.lowTwistLimit, -180, 180);
float newHighTwistLimit = joint.highTwistLimit.limit;
if (newLowTwistLimit != 0 || (newLowTwistLimit == 0 && newHighTwistLimit != 0)) newHighTwistLimit = DrawJointLimit(joint as Joint, "High Twist Limit", axis, joint.highTwistLimit.limit, MlpAlpha(highTwistColor, alphaMlp), 25, modifiable);
joint.highTwistLimit = NewJointLimit(newHighTwistLimit, joint.highTwistLimit, -180, 180);
float newSwing1Limit = DrawJointLimit(joint as Joint, "Swing1 Limit", swingAxis, -joint.swing1Limit.limit, MlpAlpha(swing1Color, alphaMlp), 25, false);
newSwing1Limit = DrawJointLimit(joint as Joint, "Swing1 Limit", swingAxis, -newSwing1Limit, MlpAlpha(swing1Color, alphaMlp), 25, modifiable);
joint.swing1Limit = NewJointLimit(newSwing1Limit, joint.swing1Limit, 0, 180);
float newSwing2Limit = DrawJointLimit(joint as Joint, "Swing2 Limit", crossAxis, -joint.swing2Limit.limit, MlpAlpha(swing2Color, alphaMlp), 25, false);
newSwing2Limit = DrawJointLimit(joint as Joint, "Swing2 Limit", crossAxis, -newSwing2Limit, MlpAlpha(swing2Color, alphaMlp), 25, modifiable);
joint.swing2Limit = NewJointLimit(newSwing2Limit, joint.swing2Limit, 0, 180);
}
public void OnSceneGUI() {
DrawJoint(target as CharacterJoint);
}
}
}