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 /
  • Help Room /
avatar image
0
Question by adammidasrich · Feb 17, 2018 at 07:35 PM · c#input.getaxisinput manager

Physics behaving differently when switching controls from Input.GetKeyDown to Input.GetAxis - C#

I'm pretty new to this programming lark, but every problem I've come across so far I've managed to find a solution to. This one however has finally driven me to ask a question. Google doesn't know, and Its broken me.


My requirements:
I want the user to be able to assign whatever button they want to make the character jump by using the Input Manager.


The issue:
my previous code using Input.GetKeyDown works perfectly, but I have now amended this to use the Input Manager (via Input.GetAxis) and it appears that 1 of 3 things (or a combination of these) is happening:


  1. The player mass is lighter

  2. The jump force is greater

  3. Gravity is weaker .


As a result the character accelerates off of the screen at an insane speed, and takes a good few seconds to come back down to solid ground.


Interestingly, if I decrease the public jump force variable for the player in the inspector (from 90 to about 20) I get a similar-ish jump to before, but it is erratic: the jump height alters with each and every jump (almost as if a slightly different amount of force is being applied each time).


Previous code:

 public float jumpForce = 90f;
 Rigidbody2D rb2d;
 
 void Start ()
 {
     rb2d = GetComponent<Rigidbody2D>();
 }
 
 void FixedUpdate ()
 {    
     if (Input.GetKeyDown (KeyCode.Keypad0))
     {
         jump ();
     }
 }
 
 void jump ()
 {
     rb2d.AddForce (new Vector2 (0, jumpForce));
 }



New Code:

 public float jumpForce = 90f;
 Rigidbody2D rb2d;
 
 void Start ()
 {
     rb2d = GetComponent<Rigidbody2D>();
 }
 
 void FixedUpdate ()
 {    
         jumpDetector = (Input.GetAxis ("Jump"));
 
         if (jumpDetector > 0)
         {
                 jump ();
         }
 }
 
 void jump ()
 {
     rb2d.AddForce (new Vector2 (0, jumpForce));
 }



Input Manager settings
(ignoring any settings that are blank or unticked)
Name: Jump
Positive Button: space
Gravity: 1000
Dead: 0.001
Sensitivity: 1000
Type: Key or Mouse Button
Axis: X axis
Joy Num: Get Motion from all Joysticks


Player Rigidbody2D Settings:

Body Type: Dynamic
Material: None
Simulated: Ticked
Use Auto Mass: No
Mass: 0.35
Linear Drag: 0
Angular Drag: 0.05
Gravity Scale: 1.3
Collision Detection: Discrete
Sleeping Mode: Start Awake
Interpolate: Interpolate
Freeze Position: No
Freeze Rotation: Yes


Physics2D Settings:
X: 0
Y: -10
Default Material: None
Velocity Iterations: 8
Position Iterations: 3
Velocity Threshold: 1
Max Linear Correction: 0.2
Max Angular Correction: 8
Max Translation Speed: 100
Max Rotation Speed: 360
Baumgarte Scale: 0.2
Baumgarte Time Of Impact: 0.75
Time To Sleep: 0.5
Linear Sleep Tolerance: 0.01
Angular Sleep Tolerance: 2
Default Contact Offset: 0.01
Queries Hit Triggers: Yes
Queries Start In Colliders: Yes
Change Stops Callbacks: No


I would kill for any sort of advice on this. I was about 5 inches away from a finished game, and it feels like the finish line has just been moved another 30 miles.

Thanks in advance!

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
Best Answer

Answer by adammidasrich · Feb 19, 2018 at 07:34 PM

I DID IT!!!!


I can only come to one logical conclusion for the behaviour change.


Input.GetKeyDown only returns true for the frame in which it was pressed, which means it almost immediately becomes false and therefore can only apply the jumpForce once.


The code I had written for Input.GetAxis behaves in exactly the same way as Input.GetKey, where it returns true for as long as the button is pressed. If I held the jump button for 4 frames the jumpDetector variable would be greater than 0 for all 4 frames, and therefore the jumpForce would be 90*4. This also explains why the jump height was inconsistent.


So how did I fix it?


While researching all of the different input options I came across Input.GetButtonDown. I had previously ignored this because I assumed this was essentially Input.GetKeyDown for Joypads, but having exhausted every other avenue possible, something in the description finally jumped out at me:


"Returns true during the frame the user pressed down the virtual button identified by buttonName."


IT USES THE INPUT MANAGER!!!


New code below:

     public float jumpForce = 90f;
     Rigidbody2D rb2d;
 
 
     void Start ()
     {
         rb2d = GetComponent<Rigidbody2D>();
     }
 
     void Update ()
     {    
         if (Input.GetButtonDown("Jump"))
         {
             jump ();
         }
     }
 
     void jump ()
     {
         rb2d.AddForce (new Vector2 (0, jumpForce));
     }



I also moved the jump function into Update, it just seemed to respond better than FixedUpdate.


Needless to say it works perfectly and I feel like an idiot. I can only hope this stops someone else from tearing their hair out!

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

497 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 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 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

How to make an object rotate in the direction using horzontal and vertical input axis? 0 Answers

How to get maximum value of a direction working with Joysticks? 1 Answer

Unitys New Input System Errors in the generated code. 1 Answer

Limit a rotation (transform.Rotate with Input.GetAxis) ? [C#] 1 Answer

Calling GetButtonDown on an input axis 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