I had some issues with jumping so I started to look at random jumping tutorials, and basically all I needed was to reset the y velocity to 0 on jump. Thank you for that.
@@n1k000z It's so you always get the same velocity no matter how fast you spam the jump button. It can cause inaccurate physics predictions like the jump being executed twice, making you jump extra high sometimes.
When you add drag to a rigid body this effects both dimensions in Unity2D. As in rb.drag is altering our jump height. If you stay still (x direction) while jumping your jump is dampened. When you are moving while jumping it is not so the jump is higher. I changed the application of rb.drag to call a method instead. private void ApplyHorizontalDrag() { rb.velocity = new Vector2(rb.velocity.x * Mathf.Clamp01(1 - dragConstant), rb.velocity.y); } This applies the drag only in the x direction leaving the jump unchanged. I replaced the rb.drag = linearDrag with a call for this method in fixed update. The else part of the statement is not needed since this is applied each time and does not change the drag and therefore does not need to be changed back. I used dragConstant = .9f so far but lowering it gives you a softer stop when turning and such.
God, you're really teaching us how to do things profissionally. Really liked your videos and the way you teach. Became sad when I saw the last video you uploaded was 2 years ago. You haven't even finished this 4 parts tutorial ;(. Where are you?
This kind of ground detection works fine for fast and easy prototypes. The problem with this one is obviously when u stand on an edge u will be in the falling state without falling. Sure u can add 2 more RayCasts to be safe for the most parts but if you want it 100% accurate u should sweep ur component. Unity provides u with a Box, Speher, Capsul ... Casts. That should work great for "most" cases
For the ground check it is better to use a sphere cast and not a line cast Also for the short jump you can just put Y velocity to 0 when you release the jump button so the character will fall down as soon as you let the key
Wow, I haven't even finished the video yet but this is amazing. You explain everything perfectly and lay out the videos perfect for beginners. You deserve so much recognition, keep up the amazing work.
"This next part might be a little overwhelming, so I'll explain it slowly." *proceeds to blast through the entire rest of the video* Regardless, very informative and you do explain what you're doing. Maybe just too much all at once for my brain to handle, LOL. It's a me-problem.
one thing i notice that using this code, if you have a running start you'll jump much higher than from a standing start because the force is stacked. This could be a cool feature if that's what you intended
@@Charles-Darwin Pretty much this. Halt velocity and have a bool for IsWallJumping. limits inputs to what you want while latched on and set a new animation frame to show collision with wall surface. add impulse at an angle something like 60deg away from wall when jump is pressed and you're done. fixed wall hold vs sliding down would be design choices but the slide down wall can be achieved with a low gravity multiplier. Finish up by wrapping the input in a countdown that drops the character if no 'jump' input is made in time, resulting in the character letting go of the wall. Hope this helps anyone who comes across it.
Also if you don’t want to be limited to certain layers to walk on just don’t use a layermask or have a layermask helper script that gets all the lays except what you specify
Great video! One issue I've encountered however is that on impact to the ground, the character dips into the ground ever so slightly before popping back out and interrupts the player's velocity. I'm currently using a box collider for my character but also tried an edge collider like how you have it on yours to an even worse effect. Is there a fix to this?
Hey friend, I'm probably too late to be totally helpful HOWEVER... I've found that the player is going to dip into the ground no matter what, but going to your RigidBody 2d settings and changing your Collision Detection to continuous should help with it to some degree
My code and scene is identical but my character very briefly pauses when they hit the ground after a jump. Any idea why? Would love to fix this. Fantastic tutorial though really!
@@SageNode Many of us in the comments have been using a physics material 2d to kind of fix this. I don't think it is perfect but its the best solution so far. Add the material to the ground plane with friction set to 0.01 and bounciness at 0. Have also read something similar but with the material on the player but I haven't tested it yet.
The jumping works fine for me, but when the player reaches the ground, the gravity scale snaps from 5 to 0 quicky, where it stops the player for a millisecond and then walks normally. Any fix to this?
Hello everyone ! does anyone knows why my character loses X velocity when landing ? Except from this problem, it all works pretty good. Thank you for the videos !
@@uba754 Nice! But yeah the physics can be really confusing, and sometimes it's hard to know where to look for a solution, or even tell what the problem is exactly.
So I copied the script, I noticed that when I move horizontally then jump the character jumps higher than when it jumps while standing still, I tried several methods like clamping y velocity, using a targeted height and stop and it and others, none of them gave me that elegant result, any idea how can I fix this?
I want to see as a following to this useful video how you cope with the issue of the slope when the player slides down when staying at the slope and when the player is jumping at the slope when going up and down. This is a very common problem I think, but it`s hard to find good information about it.
Not sure what I'm missing but when my character lands it gets "stuck" for a short moment when landing. But your character seems to go at the same speed after landing.
You could try setting the "Collision Detection" of your character's Rigidbody2D (I assume you are also making a 2D game) to Continuous. This stopped that weird "sinking in" thing when you land. Hope this works out for you too
i copied the code from the description and got error Parameter 'onGround' does not exist. UnityEngine.Animator:SetBool (string,bool) leshen.PlayerController:Update () (at Assets/_Scripts/PlayerController.cs:51)
a problem with your set up is that vertical is only detected to activate the falling animation when you press down the S key. but why would the player be holding down the S key just so we can see the animation play. The fall animation should play when you are falling without having to hold down the S key.
Hi, Great tutorial and a great channel! I implemented the jump and it works great, i want to implement a Platform Effector to some of my platform tiles but theres a problem since the raycast is touching the platform from below when jumping and it thinks the player touched the ground so it would go all up the platform in some heights, tried shortening the raycast but it doesn't work , any suggestions will be very helpful :)
@@joshuabadgett7987 didn't find a solution for it...probably gonna skip on effectors or if i'm brave enough ill change the raycast method to something else, either a collider box at the feet or the first method in this tutorial : ruclips.net/video/CLxXkSIaOAc/видео.html
Yehiel Certner if you can't change the length it's because (probably) you multiplied (in your script) by ground layer and not ground length . If you didn't make this mistake then just try checking the video again
Just a quick doubt, why not use an Empty GameObject with a box collider2D at the bottom of the character to check if the character isGrounded? Raycasting is Wayyy Complicated.
Hey I have a question, so when you hold left or right, it makes you go higher when you jump, why is that? Edit: I figured out why, Am looking for a fix, it's because when you are holding down another button along with jump it acts like it cancels it out?
Hey, Excellent video, if you still answering, i normally use circle or sphere overlapping for detecting ground, I have seen people, like your case that use raycasting, is there any difference? like performance difference? or it doesn't matter in this case?
Regular ray cast are not good for ground detection and stuff. 1. Walk to the very edge of a block or something you will not be grounded and there is one more problem I just forgot. I would you a sphere cast and box cast it’s will cover more thank just a single line so ground checks are more accurate imo
Hey, I'm probably waaaay late for this, but you're getting stuck on tile colliders. The best solution for me was: 1. Create a new Physics Material with Friction set to zero 2. Attach to the Edge Collider 2D If this STILL isn't working, then: 3. Go to your RigidBody 2D settings 4. Change Collision Detection to Continuous As a note, other people have suggested adding a Composite Collider to your tilemap / ground layer, but that solution didn't work for me for some reason haha Hopefully all this info helps you, or some stranger in the future :)
9:33 nope... its actually the opposite, holding jumbutton = short jump and tap long jump... looks pretty much like in this video: rb.gravityScale = gravity; if (rb.velocity.y < 0) { rb.gravityScale = gravity * fallMultiplier; } else if (rb.velocity.y > 0 && (Input.GetKey(KeyCode.Space) || Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))) { rb.gravityScale = gravity * (fallMultiplier/2); }
There is a bug in the code... When standing still, the Linear drag is applied. So when I jump, I cant really jump that high. (The drag changes to 0 when already in the air, but then its too late) However, when running, the drag is 0, and I can jump really high... I dont know how to fix this yet, Ive tried a lot of things...
I got the same problem but I found out the source of the problem. It's the linear drag, that part of the code that's supposed to prevent the player from sliding when it changes directions. Sadly, I don't know the solution but at least the source of the problem was found.
@@memoal-said5111 Toshi 1 second ago Actually I found a better solution that doesnt mess with drag at all, but still gives that smooth movement. void MoveCharacter(float dir) //Dir is the control stick's input. 1 for right, -1 for left and all that. { Vector2 targetVelocity = new Vector2(dir * stats.maxSpeed, rb.velocity.y); //I have my maxSpeed in another script, but whatever. // And then smoothing it out and applying it to the character rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref stats.m_Velocity, stats.m_MovementSmoothing); //SMOOTH DAMP is the key! My Stats movement smoothing is set to 0.05f. Works both when accelerating and stopping. }
Believe it or not. I actually solved this long ago but forgot about this post. My solution was just to use a boolean to check when the player jumps or not and it works. Without that boolean, the issue occurs and I'm surprised that fixed it. XD
My character loses x velocity when he hits the ground after a jump. This feels like he is dragging a bit after every jump. What can be causing it? Did you change the physics material of your tiles?
Hey! Great tutorials! But one thing, I've tried this tutorial now from scratch acouple of times. My character seem to jump the same distance, no matter how hard or light I press the jump button... Don't know if there's something I'm missing :(
The linear drag is 0 when running, and 4 when standing still. When jumping, the height of the jump is affected by the values I mentioned. I don't know how to fix this problem. When standing still, I cant jump that high. only when running, I get max jumping potential. Anyone else getting this problem and know how to fix it?
Actually I found a better solution that doesnt mess with drag at all, but still gives that smooth movement. void MoveCharacter(float dir) //Dir is the control stick's input. 1 for right, -1 for left and all that. { Vector2 targetVelocity = new Vector2(dir * stats.maxSpeed, rb.velocity.y); //I have my maxSpeed in another script, but whatever. // And then smoothing it out and applying it to the character rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref stats.m_Velocity, stats.m_MovementSmoothing); //SMOOTH DAMP is the key! My Stats movement smoothing is set to 0.05f. Works both when accelerating and stopping. }
Guys, I need help. The part where the player has high jump and low jump isn't working. My code is the same as in the tutorial, but for some reason, when I press "jump" it only goes so high, no matter if I hold or just tap the button.
When I run on the edge of platforms it "triggers" the squeeze animation, even though I wasn't even jumping, only running back and forth. Am I the only one with this issue? Any thoughts why?
Add propterties extraJumpTotal(starts at 0) and extraJumpMax(1 for a normal double jump and 2 for triple jump). Then, where you check for jumpTimer && onGround add and else if to see if you have extra jumps left. if(jumpTimer > Time.Time && onGround){ jump(); }else if(extraJumpTotal < extraJumpMax ){ jump(); //
I actually had the same issue as you did. My solution was to use a new boolean called "jumped" and set it to false. I added that boolean to the code that handles linear drag to stop the character from sliding. It's this piece of code you should have in your script if you followed the video fully. Void modifyPhysics() { ... If(Mathf.abs(direction.x) < 0.4 || changingDirection) ... Change the if statement to this instead: If ((Mathf.Abs(direction.x) < 0.4f || changingDirection) && !jumped) The jumped boolean turns true whenever the player pressed down the key that makes the character jump and the book turns first if the player touches the ground again. Also, add the bool inside your key press code that has the function Jump() BEFORE it so it works. I hope it works for you like it has for me.
I don’t understand why you would make IEnumerators for your sprite squeezing when you could make separate animations for them and store them in a separate layer in your animator
The ray cast method to see if you’re grounded isn’t very good because u won’t be able to jump if your character id more than half way off a ledge u should really use boxcast
BTW GUYS, do not use a raycast, use a boxcast, it's similar to a raycast but it simulates a box so if you are still touching the ground but off the edge you will still be able to jump!!!!!
hi there. first of all, thanks for this great tutorial. its very very useful for me. And second, I realised that you used a few second part of brackeys video at 1:30 but at the end of tutorial you didnt thank to him :) just reminding ;) thanks again for tutorial...
This series is the best unity tutorials I've ever seen
Appreciate the feedback
This is one of the best tutorial series for unity I've ever seen.
I think i never subscribed after just one video. But halfway through the video you convinced me. 10/10.
I had some issues with jumping so I started to look at random jumping tutorials, and basically all I needed was to reset the y velocity to 0 on jump. Thank you for that.
yea but can anyone tell me why did he do that i mean we never applied any kind of y velocity before did we?
@@n1k000z It's so you always get the same velocity no matter how fast you spam the jump button. It can cause inaccurate physics predictions like the jump being executed twice, making you jump extra high sometimes.
these tutorials are a godsend. did you/he ever make the wall jump tutorial?
When you add drag to a rigid body this effects both dimensions in Unity2D. As in rb.drag is altering our jump height. If you stay still (x direction) while jumping your jump is dampened. When you are moving while jumping it is not so the jump is higher. I changed the application of rb.drag to call a method instead.
private void ApplyHorizontalDrag()
{
rb.velocity = new Vector2(rb.velocity.x * Mathf.Clamp01(1 - dragConstant), rb.velocity.y);
}
This applies the drag only in the x direction leaving the jump unchanged. I replaced the rb.drag = linearDrag with a call for this method in fixed update. The else part of the statement is not needed since this is applied each time and does not change the drag and therefore does not need to be changed back. I used dragConstant = .9f so far but lowering it gives you a softer stop when turning and such.
God, you're really teaching us how to do things profissionally. Really liked your videos and the way you teach. Became sad when I saw the last video you uploaded was 2 years ago. You haven't even finished this 4 parts tutorial ;(. Where are you?
Thanks for giving me a Jump Start
How can you not subscribe to this Channel?
Great Tutorial as always!
Thanks! Very smart of you ;)
Probably the best jump guide ever💯
Honestly, I love watching unity game devs making devlogs and tutorials so much, even though I don’t use Unity.
This is the first jump tutorial that has worked for me. Thank you!
This is such a great tutorial on character control! Thank you!
This kind of ground detection works fine for fast and easy prototypes. The problem with this one is obviously when u stand on an edge u will be in the falling state without falling. Sure u can add 2 more RayCasts to be safe for the most parts but if you want it 100% accurate u should sweep ur component. Unity provides u with a Box, Speher, Capsul ... Casts. That should work great for "most" cases
lol, or you can literally just add two more raycasts, one for each edge of your player. It's not that hard
Amazing bro the best jump tutorial, watching from mexico
Thanks so much dudeeee! One of the best tutorails ive seen, cant wait to watch more
For the ground check it is better to use a sphere cast and not a line cast
Also for the short jump you can just put Y velocity to 0 when you release the jump button so the character will fall down as soon as you let the key
Thank you very much bro you have helped me a lot, people like you should be more !! I thank you from the bottom of my heart!!!
This helped greatly with my character's jump. Thanks!
Thank you a lot, my dude! It's a very informative and useful tutorial.
My respects to you!
subscribed! Can't wait for the wall jump one :D
Are you still waiting?
@@KING-vy5ky For sure I am!
really great tutorial, quality content 🤙
Wow, I haven't even finished the video yet but this is amazing. You explain everything perfectly and lay out the videos perfect for beginners. You deserve so much recognition, keep up the amazing work.
"This next part might be a little overwhelming, so I'll explain it slowly." *proceeds to blast through the entire rest of the video*
Regardless, very informative and you do explain what you're doing. Maybe just too much all at once for my brain to handle, LOL. It's a me-problem.
one thing i notice that using this code, if you have a running start you'll jump much higher than from a standing start because the force is stacked. This could be a cool feature if that's what you intended
I subscribed to you today. you can explain everyrhing i need really good
"Start Quarantine" - TRIGGERED :D
That's "coroutine."
Great tutorials. I would love to know when you'll release a wall jump tutorial.
Couldn't you do another raycast horizontally and have it interact with a wall layer.
@@Charles-Darwin Pretty much this. Halt velocity and have a bool for IsWallJumping. limits inputs to what you want while latched on and set a new animation frame to show collision with wall surface. add impulse at an angle something like 60deg away from wall when jump is pressed and you're done.
fixed wall hold vs sliding down would be design choices but the slide down wall can be achieved with a low gravity multiplier.
Finish up by wrapping the input in a countdown that drops the character if no 'jump' input is made in time, resulting in the character letting go of the wall. Hope this helps anyone who comes across it.
Also if you don’t want to be limited to certain layers to walk on just don’t use a layermask or have a layermask helper script that gets all the lays except what you specify
What happened to the wall jump tutorial? Your channel is amazing so underrated
in production
@@bungercolumbus Wait how do you know? He hasn't posted in a long time ;(
still in production? :D
Great video! One issue I've encountered however is that on impact to the ground, the character dips into the ground ever so slightly before popping back out and interrupts the player's velocity. I'm currently using a box collider for my character but also tried an edge collider like how you have it on yours to an even worse effect. Is there a fix to this?
Hey friend, I'm probably too late to be totally helpful HOWEVER...
I've found that the player is going to dip into the ground no matter what, but going to your RigidBody 2d settings and changing your Collision Detection to continuous should help with it to some degree
same, have you discover the problem?
Set your Collission Detection to Continuous or try setting interpolate on extrapolate/interpolate in your Rigidbody2D settings
Help
My falling animation only plays when I hold the down key or "S" and only stops when I press the up key or "W".
My code and scene is identical but my character very briefly pauses when they hit the ground after a jump. Any idea why? Would love to fix this. Fantastic tutorial though really!
would also like a solution for this
@@SageNode Many of us in the comments have been using a physics material 2d to kind of fix this. I don't think it is perfect but its the best solution so far. Add the material to the ground plane with friction set to 0.01 and bounciness at 0. Have also read something similar but with the material on the player but I haven't tested it yet.
@@uba754 works like a charm. thanks
the Jump Delay you put in, is that basically coyote time?
best tutorial, thx
Thank you
OMG you are a life saver thanks alot :)
great tutorials
Great job!
How do I fix the hang time before the character falls after holding space
The jumping works fine for me, but when the player reaches the ground, the gravity scale snaps from 5 to 0 quicky, where it stops the player for a millisecond and then walks normally. Any fix to this?
Same problem here. Someone ?
Same problem too, went back to double check everything and seems identical.
I've solved this adding a material with no friction to my player collider... don't know if this is the correct aproach
Hello everyone ! does anyone knows why my character loses X velocity when landing ? Except from this problem, it all works pretty good. Thank you for the videos !
Having the exact same problem I think. As soon as the character lands after a jump they pause for a brief second before continuing to move.
I had the same problem, and fixed it by applying a Physics Material 2D to my ground object with a Friction of 0.01 and Bounciness of 0.
@@torbrandt5546 It seems to have helped a great deal. Hard to say if it is 100% fixed for me but definitely better!
@@uba754 Nice! But yeah the physics can be really confusing, and sometimes it's hard to know where to look for a solution, or even tell what the problem is exactly.
So I copied the script, I noticed that when I move horizontally then jump the character jumps higher than when it jumps while standing still, I tried several methods like clamping y velocity, using a targeted height and stop and it and others, none of them gave me that elegant result, any idea how can I fix this?
Someone said
If(rb.velocity.x > 5) {
Whatever you want
}
But I don't know if it works because i don't know what to write in Whatever I want
I want to see as a following to this useful video how you cope with the issue of the slope when the player slides down when staying at the slope and when the player is jumping at the slope when going up and down. This is a very common problem I think, but it`s hard to find good information about it.
thanks, come back man pls.
Does anyone know why my player slows down when i jump?
Not sure what I'm missing but when my character lands it gets "stuck" for a short moment when landing. But your character seems to go at the same speed after landing.
i have the same problem i dont know what makes it do that
You could try setting the "Collision Detection" of your character's Rigidbody2D (I assume you are also making a 2D game) to Continuous. This stopped that weird "sinking in" thing when you land. Hope this works out for you too
Thanks, I got it to work and it indeed seemed to be Collision Detection needed to be set to Continuous
I have a problem when i jump left or right, i get drag/magnetized to the closest wall how i can fix this?
for some reason the character slows down when hitting the floor, almost stopping, i wanted it to keep it's previous velocity...
i copied the code from the description and got error Parameter 'onGround' does not exist.
UnityEngine.Animator:SetBool (string,bool)
leshen.PlayerController:Update () (at Assets/_Scripts/PlayerController.cs:51)
I have a question, set the collision detection to continuous is a good way or not, I know that this setting may use more resources.
Great video. You earn more subs then you have! :)
a problem with your set up is that vertical is only detected to activate the falling animation when you press down the S key. but why would the player be holding down the S key just so we can see the animation play.
The fall animation should play when you are falling without having to hold down the S key.
Hi, Great tutorial and a great channel!
I implemented the jump and it works great, i want to implement a Platform Effector to some of my platform tiles but theres a problem since the raycast is touching the platform from below when jumping and it thinks the player touched the ground so it would go all up the platform in some heights, tried shortening the raycast but it doesn't work , any suggestions will be very helpful :)
Did you figure out how to fix this? I'm having the same problem.
@@joshuabadgett7987 didn't find a solution for it...probably gonna skip on effectors or if i'm brave enough ill change the raycast method to something else, either a collider box at the feet or the first method in this tutorial : ruclips.net/video/CLxXkSIaOAc/видео.html
Joshua Badgett make sure you * by ground length and not ground layer , that's what I accidentally did
@@smallbeanmusic2187 ??
Yehiel Certner if you can't change the length it's because (probably) you multiplied (in your script) by ground layer and not ground length .
If you didn't make this mistake then just try checking the video again
Is there any difference between using two Raycast and using a single Boxcast?
You can make a video about Power Ups?
Just a quick doubt, why not use an Empty GameObject with a box collider2D at the bottom of the character to check if the character isGrounded? Raycasting is Wayyy Complicated.
hows it complicated? Unity literally did it all for you, you just have to implement the function
Hey I have a question, so when you hold left or right, it makes you go higher when you jump, why is that?
Edit: I figured out why, Am looking for a fix, it's because when you are holding down another button along with jump it acts like it cancels it out?
What about for 3d?
I like having the squish feature on my jump, but i also want my actual jump animation to play as well, how do I get that to work with this squeeze
Hey, Excellent video, if you still answering, i normally use circle or sphere overlapping for detecting ground, I have seen people, like your case that use raycasting, is there any difference? like performance difference? or it doesn't matter in this case?
Regular ray cast are not good for ground detection and stuff. 1. Walk to the very edge of a block or something you will not be grounded and there is one more problem I just forgot. I would you a sphere cast and box cast it’s will cover more thank just a single line so ground checks are more accurate imo
When I just run my player stops moving randomly, and I have to move in the other direction to move again
Hey, I'm probably waaaay late for this, but you're getting stuck on tile colliders. The best solution for me was:
1. Create a new Physics Material with Friction set to zero
2. Attach to the Edge Collider 2D
If this STILL isn't working, then:
3. Go to your RigidBody 2D settings
4. Change Collision Detection to Continuous
As a note, other people have suggested adding a Composite Collider to your tilemap / ground layer, but that solution didn't work for me for some reason haha Hopefully all this info helps you, or some stranger in the future :)
could you share the project?
9:33 nope... its actually the opposite, holding jumbutton = short jump and tap long jump... looks pretty much like in this video:
rb.gravityScale = gravity;
if (rb.velocity.y < 0) {
rb.gravityScale = gravity * fallMultiplier;
}
else if (rb.velocity.y > 0 && (Input.GetKey(KeyCode.Space) || Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))) {
rb.gravityScale = gravity * (fallMultiplier/2);
}
Omg thanks🔥🔥🔥 im having trouble with that and i just search it for a long time, and u juts get the answer, thanks a lot😂🔥
did he ever publish part 4 of this tutorial
Great tutorial, but I feel I must point out that it's pronounced "Co-Routine" not "Quarantine"
Haaaaa thanks
9:08 don't use input.getkeydown instead of input.getkey or input.getbutton why i don't know but this took 2 days from me
There is a bug in the code... When standing still, the Linear drag is applied. So when I jump, I cant really jump that high. (The drag changes to 0 when already in the air, but then its too late)
However, when running, the drag is 0, and I can jump really high...
I dont know how to fix this yet, Ive tried a lot of things...
I got the same problem but I found out the source of the problem. It's the linear drag, that part of the code that's supposed to prevent the player from sliding when it changes directions. Sadly, I don't know the solution but at least the source of the problem was found.
@@memoal-said5111
Toshi
1 second ago
Actually I found a better solution that doesnt mess with drag at all, but still gives that smooth movement.
void MoveCharacter(float dir)
//Dir is the control stick's input. 1 for right, -1 for left and all that.
{
Vector2 targetVelocity = new Vector2(dir * stats.maxSpeed, rb.velocity.y);
//I have my maxSpeed in another script, but whatever.
// And then smoothing it out and applying it to the character
rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref stats.m_Velocity, stats.m_MovementSmoothing);
//SMOOTH DAMP is the key! My Stats movement smoothing is set to 0.05f. Works both when accelerating and stopping.
}
Believe it or not. I actually solved this long ago but forgot about this post. My solution was just to use a boolean to check when the player jumps or not and it works. Without that boolean, the issue occurs and I'm surprised that fixed it. XD
My character loses x velocity when he hits the ground after a jump. This feels like he is dragging a bit after every jump. What can be causing it? Did you change the physics material of your tiles?
i think what is is causing is is the increase of drag when the player is grounded
Changing the physics material is what worked for me
You saved me from glitchy physics hell
Omg this is so good!!!!!!!!!!!!!
Hey! Great tutorials! But one thing, I've tried this tutorial now from scratch acouple of times. My character seem to jump the same distance, no matter how hard or light I press the jump button... Don't know if there's something I'm missing :(
Hey i got the same problem here did you find a solution ?
ok i found a fix don't worry !
@@lerougeun4099 I didn't find one :o Would you care to share?
@@draggmaste Make sure youre using GetButton instead of GetButtonDown when setting up the gravityScale and fallMultiplier. That did it for me
The linear drag is 0 when running, and 4 when standing still. When jumping, the height of the jump is affected by the values I mentioned. I don't know how to fix this problem.
When standing still, I cant jump that high. only when running, I get max jumping potential. Anyone else getting this problem and know how to fix it?
I had that problem before I made the changes to 'modifyPhysics' that includes changing the rigidBody gravityScale and drag values.
@@AnimusBehemoth Can You please share your code on how you fixed it? :)
Actually I found a better solution that doesnt mess with drag at all, but still gives that smooth movement.
void MoveCharacter(float dir)
//Dir is the control stick's input. 1 for right, -1 for left and all that.
{
Vector2 targetVelocity = new Vector2(dir * stats.maxSpeed, rb.velocity.y);
//I have my maxSpeed in another script, but whatever.
// And then smoothing it out and applying it to the character
rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref stats.m_Velocity, stats.m_MovementSmoothing);
//SMOOTH DAMP is the key! My Stats movement smoothing is set to 0.05f. Works both when accelerating and stopping.
}
Forgot to say, the value of ref stats.m_Velocity is vector3.zero.
@@TackleProd That looks like an awesome solution! I'll have to try that
As soon as I added jumping i started sliding on the ground again after moving instead of coming to a halt like in the last tutorial
Guys, I need help. The part where the player has high jump and low jump isn't working. My code is the same as in the tutorial, but for some reason, when I press "jump" it only goes so high, no matter if I hold or just tap the button.
Use a tutorial called better jumping it will work
ya use blackthorn prod
When I run on the edge of platforms it "triggers" the squeeze animation, even though I wasn't even jumping, only running back and forth. Am I the only one with this issue? Any thoughts why?
are you still haveing this problem or did you fix it
great tutorial but how can I make him do double jump ??
Add propterties extraJumpTotal(starts at 0) and extraJumpMax(1 for a normal double jump and 2 for triple jump). Then, where you check for jumpTimer && onGround add and else if to see if you have extra jumps left.
if(jumpTimer > Time.Time && onGround){
jump();
}else if(extraJumpTotal < extraJumpMax ){
jump(); //
Now explain to me how to make a Bubsy 3D style jump and you will truly have become the master.
Please help me, how to make my own pixelart in some online app? ....
I would use Medibangpaint. I have photoshop and ClipStudio Paint and it its just a nicer free program in case you're still looking for one.
@@janinmarquez-medina6265 Thanks ♥️
Can Anyone help me i jump higher when i run than when i stand still
just do
if (rb.velocity.x > .5){
whatever you want
}
@@todd345 i don't know what to write after that
@@efn5520 in "whatever you want" just make jumpSpeed go up by 1 or what ever you want.
@@todd345 My jump also got smaller when i stand still
I actually had the same issue as you did. My solution was to use a new boolean called "jumped" and set it to false. I added that boolean to the code that handles linear drag to stop the character from sliding. It's this piece of code you should have in your script if you followed the video fully.
Void modifyPhysics() {
...
If(Mathf.abs(direction.x) < 0.4 || changingDirection)
...
Change the if statement to this instead:
If ((Mathf.Abs(direction.x) < 0.4f || changingDirection) && !jumped)
The jumped boolean turns true whenever the player pressed down the key that makes the character jump and the book turns first if the player touches the ground again.
Also, add the bool inside your key press code that has the function Jump() BEFORE it so it works.
I hope it works for you like it has for me.
Wait where is the wall jump video?
I don’t understand why you would make IEnumerators for your sprite squeezing when you could make separate animations for them and store them in a separate layer in your animator
Hey, nice Tutorial. I use your Script. The movement worked. But the Jump don't
The ray cast method to see if you’re grounded isn’t very good because u won’t be able to jump if your character id more than half way off a ledge u should really use boxcast
Did you watch the whole video?
I LIKED THIS VIDEO AND HE GOT 1K LIKES FIRST IT WAS 999
Suggestion:
bool DirectionChanged => Mathf.Sign(HorizontalAxisValue) != Mathf.Sign(rb.velocity.x);
Instead of:
bool changingDirections = (HorizontalAxisValue > 0 && rb.velocity.x < 0) || (HorizontalAxisValue < 0 && rb.velocity.x > 0);
🙂
2:23
14:32 "Since this is a QUARANTINE"
Well, he's a fortuneteller with futuresight as well.
oh my
BTW GUYS, do not use a raycast, use a boxcast, it's similar to a raycast but it simulates a box so if you are still touching the ground but off the edge you will still be able to jump!!!!!
Thanks for the suggestion, that's much easier than writing complex code for 2 raycasts!
@@emredesu :) I have code and stuff always willing to help people if you have questions
@@BoltGoesPro I appreciate it! No questions for now, but I'll let you know if I have any c:
@@emredesu okay :)
@@emredesu I've had to fix many people as code online to use it efficiently.
So if you ever want me to check it out, I like helping everyone: D
once again you rush and skip showing the animation transitions at the end of this video just like you did in the first video..... man
figure it out lmao its not hard.
hi there. first of all, thanks for this great tutorial. its very very useful for me.
And second, I realised that you used a few second part of brackeys video at 1:30 but at the end of tutorial you didnt thank to him :)
just reminding ;)
thanks again for tutorial...
Those are all FREE STOCK ASSETS from the Asset Store. Why the fuck would he need to thank Brackeys?!
Nice but please use dark mode😭
u'r cool
What happened to see you next week!?
play the speed at 0.5 from 16:25 and he sounds drunk
'Parameter onGround does not exist'
Create an animation parameter called onGround
This uses the OLD input methods.