Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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 lumbryga · Mar 05, 2018 at 07:08 AM · c#scripting problemcharacterjumpphysics2d

How to check if character reached jump apex / peak

So, this is supposedly a simple question, but i'm having problems with this for about two weeks now...

What I need:

I just need to know when my character has reached the jump peak/apex, so I can run an animation at that point and perform other routines.

Where I'm currently at:

I'm checking in the Update() method if the vertical velocity equals 0 and if the character is not on the ground, like this:

 if (Mathf.Approximately(myRB.velocity.y, 0.0f) && !isGrounded) // On Apex (not working on jump peak)
 { 
             Debug.Log("apex");
 }

isGrounded is a boolean variable that is currently working perfectly, which uses a trigger collider.

What I've already also tried:

Checking in the FixedUpdate() method, and not using Mathf.Approximately (just checking with myRB.velocity.y == 0), and all possible combinations with these variations.

What is going on:

As you already know, myRB.velocity.y is positive when jumping, and negative when falling. In theory, with gravity as acceleration, the velocity should gradually reduce from the initial positive value (when the jump starts), until the character reaches the peak of its jump, when, in that exact moment, the velocity equals 0, and then the player starts descending with increasing (in the negative direction) velocity.

After some practical tests, the function only logs "apex" when the character hits its head on a platform above him or when he falls off a platform (only sometimes)...

Tl;dr:

myRB.velocity.y does not equals 0 when the character reaches its jump peak. How can I check if he reached its jump apex via C# script?

Thanks!

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

Answer by fafase · Mar 05, 2018 at 07:53 AM

It could be your velocity is never 0, one frame it is positive and one frame it turns negative. That frame is the highest point (actually the previous was but...).

So when the value flips, you got the moment:

 bool highPt = false;
 void Update()
 {
       if(rb.velocity.y < 0 && this.highPt == false)
       {
             this.highPt = true;
             ProcessHighPt();
       }
       if(isGrounded){ this.highPt = false; }
 }

When the velocity is negative and highPt is false, it will perform the ProcessHighPt. Since you flip the highPt boolean to true, it won't call next frame.

When your character is grounded again, it will set it back to false for next jump.

But you also to make sure that if you collide with something above, you should not run the animation since you did not reach the apex. So you should cancel on collision.

 void OnCollisionEnter2D(Collision2D col){
      CancelApex();
 }

CancelApex would most likely cancel your animation. This is because the FixedUpdate is called before the Collision.

More advanced way would be to register the animation to be triggered on LateUpdate. This way, the FixedUpdate only registers but does not start, then the Collision may or may not unregister, and the LateUpdate performs if registered.

Comment
Add comment · Show 4 · 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 lumbryga · Mar 05, 2018 at 08:04 AM 0
Share

I'm amazed... It worked without a hassle! And I'll also be able to use this scriptable trigger concept with a million of other applications in my game! Thank you so much!!

avatar image unity_5YXzT1bRdzbB2g · Nov 09, 2018 at 03:40 PM 0
Share

Worked for me too!

avatar image MarukunNippon · Apr 24 at 04:10 PM 0
Share

Dude thank you so much for telling me if the velocity of y is flip from positive to negative that's mean it's the peak of a jump thank you so much. I just solved my problem for checking if the player is falling or not, and also solved my jump buffering feature for my platformer game. God bless you bro

avatar image MarukunNippon MarukunNippon · Apr 24 at 04:16 PM 0
Share

Just calculate the velocity of y axis by doing transform.position.y - oldPosition and then I just check if the player is already reach the peak apex and if the velocity.y is less than zero and done, check for falling or not done

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

489 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

Related Questions

Confused as to why he only jumps while walking? 1 Answer

How to make player detect when on ground and when lands on ground 3 Answers

Still constant jumping even with raycasting. 0 Answers

[C#] Jump on slopes 1 Answer

Multiple Cars not working 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