Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by YTGameDevDave · Nov 09, 2017 at 03:27 AM · animationrotationquaternionmecanim

Can someone please answer my questions for once please.

I have had this problem for months now. The transitions in mecanim are unpredictable. My character, depending on the root's next rotation value will spin around clockwise or counter clockwise. (This is how quaternions work). Now my two questions:

  1. Is it true that mecanim transitions are based on quaternion rotations?

  2. How do I access a transition and how can i reverse the quaternion's rotation?

Thank you,

Dave

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by Daemonhahn · Nov 09, 2017 at 11:15 AM

Not exactly, and Yes.

This is not your problem, your problem is that you are not defining the exit time or transition time / controlling it. If you just let it auto blend it will do very weird stuff.

I recommend reading:

https://docs.unity3d.com/Manual/class-Transition.html

and

https://answers.unity.com/questions/355576/how-to-make-a-instant-transition-with-mecanim.html

If you set the transition period and exit time correctly, it will trim or skip that initial bit of quaternion blending and you will get a smooth animation, with no crazy rotations.

If after all this you still have issues, then it is to do with the state machine itself. Perhaps you need some extra animations that work as interstitials between the rotations you already have? Perhaps you need to align all the pivots and starting rotations and use root motion instead to move.

There's many different ways to get this to stop happening, as well as many things that could cause this. But its not just the way mecanim works, it works very well when set up correctly :)

Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Daemonhahn · Nov 09, 2017 at 12:11 PM 0
Share

Please select my answer as correct if I have helped you! :)

avatar image YTGameDevDave · Nov 09, 2017 at 01:07 PM 0
Share

I was still working out your solution. You helped me understand transitions a lot better now thanks to confir$$anonymous$$g that it works with quaternions. Quaternions will always find the shortest distance on the sphere and I noticed in my 2.5d platformer that my character's pose facing left has a different rotational value in the root. An animation inbetween will definitely fix it and i'll set the transition duration to zero in the mean time. An ideal solution because I have a lot of asymmetry in my game's animations. Your answer really helped me figure out a problem I've had for months. :) Thanks a lot!

This was exactly what I needed: "Perhaps you need some extra animations that work as interstitials between the rotations you already have?"

avatar image Daemonhahn YTGameDevDave · Nov 09, 2017 at 01:11 PM 1
Share

No problem glad I Could help!

Take a look at statemachine behaviours for more advanced state machine magic!

And for a better understanding of the weirdness that is transitions, check out:

https://blogs.unity3d.com/2016/07/13/wait-ive-changed-my-$$anonymous$$d-state-machine-transition-interruptions/?_ga=2.160000509.1361871216.1510141366-945504433.1505133785

Good luck and feel free to P$$anonymous$$ me in the future for any unity related issues!

avatar image
0

Answer by YTGameDevDave · Nov 11, 2017 at 06:33 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;
     }
 }


Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

206 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Rotate bones during mecanim animation with generic avatar 1 Answer

Quaternion rotation not behaving as intended 1 Answer

Any idea why my animation isn't working? 0 Answers

Top-down character running animation based on facing direction 0 Answers

Preserve animation's direction 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges