Removed support for Animator parameters support

This feature was always more theoretical than practical
This commit is contained in:
Pascal Serrarens 2023-01-20 15:06:19 +01:00
parent abab50dc76
commit 168e30c094
4 changed files with 3 additions and 136 deletions

View File

@ -377,24 +377,11 @@ namespace Passer {
#region Animations
private SerializedProperty animatorParamForwardProp;
private SerializedProperty animatorParamSidewardProp;
private SerializedProperty animatorParamRotationProp;
private SerializedProperty animatorParamHeightProp;
private void InitAnimations(HumanoidControl humanoid) {
animatorParamForwardProp = serializedObject.FindProperty("animatorParameterForwardIndex");
animatorParamSidewardProp = serializedObject.FindProperty("animatorParameterSidewardIndex");
animatorParamRotationProp = serializedObject.FindProperty("animatorParameterRotationIndex");
animatorParamHeightProp = serializedObject.FindProperty("animatorParameterHeightIndex");
}
private void InitAnimations(HumanoidControl humanoid) { }
bool showAnimatorParameters = false;
private void AnimatorInspector(HumanoidControl humanoid) {
AnimatorControllerInspector(humanoid);
AnimatorParametersInspector(humanoid);
}
private void AnimatorControllerInspector(HumanoidControl humanoid) {
@ -423,44 +410,6 @@ namespace Passer {
EditorGUILayout.EndHorizontal();
}
private void AnimatorParametersInspector(HumanoidControl humanoid) {
if (showAnimatorParameters && humanoid.animatorEnabled && humanoid.targetsRig.runtimeAnimatorController != null) {
if (animatorParameterNames == null)
animatorParameterNames = GetAnimatorParameters(humanoid);
EditorGUI.indentLevel++;
GUIContent forwardSpeedText = new GUIContent(
"Forward Speed",
"Animator parameter controlling the forward motion animation"
);
animatorParamForwardProp.intValue = SetAnimatorInput(forwardSpeedText, animatorParamForwardProp.intValue, ref humanoid.animatorParameterForward);
GUIContent sidewardSpeedText = new GUIContent(
"Sideward Speed",
"Animator parameter controlling the sideward motion animation"
);
animatorParamSidewardProp.intValue = SetAnimatorInput(sidewardSpeedText, animatorParamSidewardProp.intValue, ref humanoid.animatorParameterSideward);
GUIContent turnSpeedText = new GUIContent(
"Turn Speed",
"Animator parameter controlling the rotation animation"
);
animatorParamRotationProp.intValue = SetAnimatorInput(turnSpeedText, animatorParamRotationProp.intValue, ref humanoid.animatorParameterRotation);
GUIContent headHeightText = new GUIContent(
"Head Height",
"Animation parameter controlling the squatting animation"
);
animatorParamHeightProp.intValue = SetAnimatorInput(headHeightText, animatorParamHeightProp.intValue, ref humanoid.animatorParameterHeight);
EditorGUI.indentLevel--;
}
else
showAnimatorParameters = false;
}
protected GUIContent[] animatorParameterNames;
public GUIContent[] GetAnimatorParameters(HumanoidControl humanoid) {
if (humanoid == null || humanoid.targetsRig.runtimeAnimatorController == null)

View File

@ -9,57 +9,6 @@
/// when setting the Runtime Animator Controller parameter which is standard
/// [Unity Animator Controller](https://docs.unity3d.com/Manual/class-AnimatorController.html).
///
/// Humanoid Control can control the animator controller using a number of float Animation
/// Parameters. These can be set in the Params section and refer to the
/// [Animation Parameters](https://docs.unity3d.com/Manual/AnimationParameters.html)
/// of the Animator Controller.
///
/// float Forward Speed | The forward/backward speed. Negative is backward walking. Unit is units(meters) per second.
/// float Sideward Speed | The left/right speed. Negative is left strafing. Unit is units(meters) per second
/// float Turn Speed | The turning speed around the Y axis. Negative is turning left. Unit is full rotations (360 degrees) per second.
/// float Head Height | The head height relative to the standing position. Negative is crouching. Positive is reaching up. Unit is meters.
///
/// Please note the unit of the parameters. Great care should be paid to this when creating the animations,
/// because it is not possible to use root motion (see below).
/// If the animation root speed does not match the required units of speed,
/// you can adjust them using the Speed parameter of the Animation State (see
/// [Unity3d Animation States](https://docs.unity3d.com/Manual/class-State.html)).
/// For example, when the turning animation is set up such that it takes 4 seconds for a full rotation,
/// the Speed parameter should be set to 0.25.
///
/// Root Motion
/// ===========
/// or the animations to work well they should not contain root motion.
/// This is because we need to be able to move the character from the VR headset,
/// not from the animation, or players will get motion sickness.
///
/// To get the right behaviour, ensure that the following options are checked on the imported animations:
///
/// Loop Time -> Loop Pose
/// Root Transform Rotation -> Bake Into PoseRoot Transform Position(Y) -> Bake Into Pose
/// Root Transform Position(XZ) -> Bake Into Pose
///
/// Animation Restrictions
/// ======================
/// The animations are controlled by the Animation Parameters which are derived from the head movements.
/// In order to match the movements of the player, the animations should be set in a specific way.
///
/// - The animation being player when Forward Speed = 1 should ensure
/// that the head speed is exactly 1 unit(meter) per second.
/// If the head speed in the animation is different you may see feet slipping
/// over the ground because the animation is played too fast or too slow.
/// - The Forward Speed should only have effect on the forward/backward (Z-axis) speed of the avatar.
/// If this is not ensured, the animations will be wrong.
/// For example when the head moves to the left when forward speed = 1, the sideward speed will also be activated,
/// resulting in unwanted animations.
/// - The same is true for the Sideward Speed and Turn Speed,
/// but then limited to the sideward (X-axis) motion and rotation along the Y axis.
/// - The Head height is used to change the vertical position of the avatar.
/// A value of -0.3 can result in a crouching with even lower values resulting in a crawling position.
/// Positive values like 0.1 can result in a reaching position when the avatar stands on his toes.
/// - As with the other parameters, the Head Height parameter should only have effect
/// on the Y position of the head.All other movements must be avoided in this animation.
///
/// Targets
/// =======
/// When the Animation option is enabled on the Humanoid Control script,

View File

@ -44,7 +44,6 @@ namespace Passer.Humanoid {
Animator targetAnimator = hipsTarget.humanoid.targetsRig;
// Don't use procedural if the animator controller plays an animation clip
if (targetAnimator.runtimeAnimatorController != null &&
hipsTarget.humanoid.animatorParameterForward == null &&
targetAnimator.GetCurrentAnimatorClipInfoCount(0) > 0)
return;

View File

@ -1330,7 +1330,6 @@ namespace Passer.Humanoid {
UpdateTargetsAndMovements();
CalculateVelocityAcceleration();
UpdateAnimation();
UpdatePoseEvent();
}
@ -2336,35 +2335,6 @@ namespace Passer.Humanoid {
}
#region Animation
public string animatorParameterForward;
public string animatorParameterSideward;
public string animatorParameterRotation;
public string animatorParameterHeight;
// needed for the Editor
public int animatorParameterForwardIndex;
public int animatorParameterSidewardIndex;
public int animatorParameterRotationIndex;
public int animatorParameterHeightIndex;
private void UpdateAnimation() {
if (targetsRig.runtimeAnimatorController != null) {
if (animatorParameterForward != null && animatorParameterForward != "") {
targetsRig.SetFloat(animatorParameterForward, velocity.z);
}
if (animatorParameterSideward != null && animatorParameterSideward != "") {
targetsRig.SetFloat(animatorParameterSideward, velocity.x);
}
if (animatorParameterRotation != null && animatorParameterRotation != "") {
targetsRig.SetFloat(animatorParameterRotation, turningVelocity);
}
if (animatorParameterHeight != null && animatorParameterHeight != "") {
float relativeHeadHeight = headTarget.neck.target.transform.position.y - avatarNeckHeight;
targetsRig.SetFloat(animatorParameterHeight, relativeHeadHeight);
}
}
}
private void PostAnimationCorrection() {