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
0
Question by Benjam · Apr 21, 2013 at 12:45 PM · velocitygravity

Gravity on object not working correctly

Hello Unity community,

I am having a slight issue with rigid body gravity. The gravity is set in the rigid body properties as default, when I am moving my character and jump in the air the character falls briefly then stops falling and continues moving forward until I let go of the controller at which point gravity kicks back in.

I think it has something to do with the change in forces I am applying to the character but I assumed that gravity being a constant would apply itself to the Y velocity.

Anyway here is my code for the movement and the jump

private Vector3 jumpVelocity = new Vector3 (0, 12, 0);

     void move()
     {        
         float maxVel = 30.0f;
         
         if(leftThumbValueX > 0.01 || leftThumbValueX < -0.01 && isGrounded == true)
         {
             //applies a velocity change in the direction character is facing
             if(leftThumbValueX < -0.01)
             {
                 rigidbody.AddForce(transform.forward.normalized * (leftThumbValueX*=-1), ForceMode.VelocityChange);
             }
             else
             {
                 rigidbody.AddForce(transform.forward.normalized * leftThumbValueX, ForceMode.VelocityChange);
             }        
             
             //clamps Roybot to maximum velocity
             if(velocity.z >= maxVel)
             {
                 rigidbody.velocity = maxVelocity;
             }
             
             if(velocity.z <= -maxVel)
             {
                 rigidbody.velocity = -maxVelocity;
             }
         }        
         //print(thumbValue);
         print(rigidbody.velocity);
     }

and here is the jump function:

 void jump()
     {
         if(aButton > 0 && isGrounded)
         {
             rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
             isGrounded = false;
         }
     }
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

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by AlucardJay · Apr 21, 2013 at 04:06 PM

Everytime you state rigidbody.velocity , you are directly modifying the velocity, so gravity is overwritten. So you have to factor in gravity before you hard code the velocity. This doesn't mean having to calculate it manually, simply use the current velocity.y somewhere in your calculations.

 Vector3 calcVel = Vector3.zero;
 
 //clamps Roybot to maximum velocity
 if(velocity.z >= maxVel)
 {
     calcVel = maxVelocity;
     calcVel.y += rigidbody.velocity.y;
     rigidbody.velocity = calcVel;
 }
  
 if(velocity.z <= -maxVel)
 {
     calcVel = -maxVelocity;
     calcVel.y += rigidbody.velocity.y;
     rigidbody.velocity = calcVel;
 }
Comment
Add comment · Show 1 · 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 Benjam · Apr 21, 2013 at 05:51 PM 0
Share

Thanks a lot this worked a treat :)

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

12 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

Related Questions

Gravitational pull without losing speed 1 Answer

Jumping a specific height using Velocity & Gravity 1 Answer

How to set velocity of Rigidbody without changing gravity? 1 Answer

Climb Down Ladder in 2D Platformer Game 1 Answer

Firing projectile in curve 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