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#
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);
|
|
}
|
|
}
|
|
}
|