Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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
1
Question by Dnileok · May 24, 2014 at 01:40 PM · rotationrigidbodyquaternionlimitaircraft

Preventing rotation of rigidbody at a specific rotation

I have a rigidbody with 4 wheel colliders attached. To get the rigidbody airborne I first add a force to the front of rigidbody then I add a force to the back of the rigidbody. This causes the it to become airborne.

Once the rigidbody has become airborne I want it to stop rotating and remain level to the surface normal below it.

The closest I have come to doing this is to do a raycast downward from the rigidbody to get the hit.normal then monitor the dot product between hit.normal and the rigidbody transform.up and once this value is close to 1 stop kill all angular velocity.

However the problem Im experiencing is since im using forces to make the rigidbody airborn the Z value is sometimes not level thus causing the dot product to never be near 1.

I also thought freezing the Z and Y rotations would help stabilize it a bit but I still get some rotation along the Z axis.

I then tried to store the rotation of the rigidbody prior to becoming airborne and rotate it back to that rotation once airborne but I could not get it to rotate smoothly. And it failed in certain cases such as if it became airborne on an incline and the surface it would land on is level.

Here is a little Visual representation of what Im describing as well as some code I currently have. Id apperiate any advise or suggestions. Thanks.

alt text

     void Grounded_Update()
     {        
         if(controller.OllieInput())
         {
             
 
             rigidbody.constraints = RigidbodyConstraints.FreezeRotationY |  RigidbodyConstraints.FreezeRotationZ;
 
             rigidbody.AddForceAtPosition(backForce,backForceLoc.transform.position);
             //Add back force after a certain time
             Invoke ("addingForce",timeBetweeenSecondForce);
 
             
 
             rigidbody.constraints = RigidbodyConstraints.None;
 
             currentState = PlayerStates.Airborne;
 
         }
     void Airborne_FixedUpdate()
     {
         
         if(!isBoardLevel)
         {    
             
             RaycastHit hit;
             //sometimes doesnt level off since the z axis rotation is not near 0
             //the force will cause the board to roll a bit 
             
             if(Physics.Raycast(transform.position, -transform.up, out hit))
             {
                 float dot = Vector3.Dot(transform.up,hit.normal);
 
                 if(dot <= 1 && dot >= 0.999)
                 {
                     
                     rigidbody.angularVelocity = Vector3.zero;
                     isBoardLevel = true;
                     
                 }
             }
         }
     }
board.png (24.7 kB)
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

0 Replies

· Add your reply
  • Sort: 

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

20 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

Related Questions

Limit Rotation of Rigidbody to 45 Degrees (Handlebars on a Bicycle) 1 Answer

Player character X rotation going haywire on game start 1 Answer

Rotating Rigidbodies 2 Answers

Finding A Rigidbody's Rotation Speed And Direction 2 Answers

Limit distance from center 0 Answers


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