- Home /
Changing Quaternion Components of Root - Animation
My problem is the rotation of the root to the next animation, the character should be turning counter clockwise instead of clockwise.
How do I access the Quaternion values of animations? I need to multiply the W and Z components by -1. Is this impossible with Mecanim? It would save me a tremendous amount of work.
Is there a way to do this with Last Update during an animation?
Answer by YTGameDevDave · Nov 11, 2017 at 06:37 PM
I counter rotated the rotation of the transition to reverse it. this is the code for in your character's controller script, should be in LateUpdate. RootHips is the variable that carries the gameobject of the actual root of your rig (not the parent root but the hips of the skeleton, the actual root of the skeleton).
if (ReverseTransitionRotation == true) {
n += Time.deltaTime * 10f;
if (n >= 1) {
n = 1;
}
a = Mathf.Lerp (0f, 360f, n);
RootHips.transform.eulerAngles = new Vector3 (RootHips.transform.eulerAngles.x, RootHips.transform.eulerAngles.y - a, RootHips.transform.eulerAngles.z);
} else {
n -= Time.deltaTime * 10f;
if (n <= 0) {
n = 0;
}
a = Mathf.Lerp (0f, 360f, n);
RootHips.transform.eulerAngles = new Vector3 (RootHips.transform.eulerAngles.x, RootHips.transform.eulerAngles.y - a, RootHips.transform.eulerAngles.z);
}
this is the code for in the animator, add this script to any clip you want the transition rotation reversed.
public class InverseTransitionRotation : StateMachineBehaviour {
int li;
float t;
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
animator.GetComponent<Player1Controls>().ReverseTransitionRotation = true;
t = 0;
}
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
li = layerIndex;
t += Time.deltaTime;
//in this if-statement insert your input for the first transition's 'transition duration'
if (t >= 0.1f) {
if (animator.IsInTransition (li) == true) {
animator.GetComponent<Player1Controls> ().ReverseTransitionRotation = false;
}
}
}
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
t = 0;
}
}
Your answer
Follow this Question
Related Questions
Can the mecanim animators Controller var be set in code? 1 Answer
Accessing AnimationState in Animator 0 Answers
How to stop mesh disappearing during Animator state transition blend time? 1 Answer
Animation events firing all at once in mirrored blend tree 1 Answer
What are those white curves in the animation transition panel - And can I read it in script? 0 Answers