Trying to learn unity, made a very simple platformer start to finish but my ground check is still allowing the player to jump in mid air when they collide with the side of terrain.
It can be fairly tricky to replicate as it only will trigger within a frame or two, but once you learn the timing you can perform it pretty consistently. I’ve tried multiple ground check methods from simple tags that work with the rigidbody, to attaching gizmos at the players feet, and currently I’m using raycasting as I assume it to be the most accurate but the problem still persists. This is just with a very generic jump mind you, when I add in code for jump buffering and coyote time the issue compounds and the frame window for the mid air jump to be executed becomes gigantic. I just want to learn Unity and to start I need a basic but solid player controller which I would have if it weren’t for this issue which I’ve been trying to resolve for about a week. I will gladly compensate anyone who is able to fix this, I’m guessing it’s a simple fix and I’m just too green to hash it out.
What is often happening in these cases is one of the following:
the code you think is executing is not actually executing at all
the code is executing far EARLIER or LATER than you think
the code is executing far LESS OFTEN than you think
the code is executing far MORE OFTEN than you think
the code is executing on another GameObject than you think it is
To help gain more insight into your problem, I recommend liberally sprinkling Debug.Log() statements through your code to display information in realtime.
Doing this should help you answer these types of questions:
is this code even running? which parts are running? how often does it run? what order does it run in?
what are the values of the variables involved? Are they initialized? Are the values reasonable?
are you meeting ALL the requirements to receive callbacks such as triggers / colliders (review the documentation)
Knowing this information will help you reason about the behavior you are seeing.
You can also put in Debug.Break() to pause the Editor when certain interesting pieces of code run, and then study the scene
You could also just display various important quantities in UI Text elements to watch them change as you play the game.
If you are running a mobile device you can also view the console output. Google for how on your particular mobile target.
Here’s an example of putting in a laser-focused Debug.Log() and how that can save you a TON of time wallowing around speculating what might be going wrong:
[FIXED] Happy to say I was finally able to solve the issue and it was as I assumed it would be, very simple lol. All I had to do was change collision detection on the rigibdody from discrete to continuous, so if any newbies like me run into this issue double check that setting. Kurt I appreciate you taking the time to offer your advice, thank you.