Crouch - 2D Platformer Player Controller - Part 27

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
what is up guys welcome to barton my name is heinrich and today we're going to give our player the ability to crouch now with our current finite state machine setup that we're using it's very simple to add the ability to crouch if we take a look at our state machine diagram over here we just have two extra states that are children of our grounded state so we have our crouch move state and our crouch idle state and we simply have transitions between our move and crouch move idle and crouch idle and then transitions between the two and this all just relates with our y input and our x input so before we get started with this let's go ahead and fix a bug from a previous episode this bug relates to our ledge climb so currently as we have it set up there is no tolerance involved with detecting the corner so if we go ahead and grab it most of the time it works but i've noticed sometimes recently it doesn't work quite the way you want it to so what we're going to go ahead and do is just add a little bit of tolerance to when we detect the corner or when we determine what the corner position is [Music] and so all we need to do is go ahead and open up our player script because here is where we have the function where we determine the corner position underneath our other functions so just as a little reminder over here we cast a horizontal layout from the character to determine the distance from our character to ledge the x distance which we then save over here so now instead of this we're going to add a little bit of tolerance to our x distance and it doesn't have to be anything big all we're going to say is plus 0.015 f and that should work just fine and then next we have a raycast hist2d y hit which is our vertical ray being fired down to determine the top of our corner we're just going to add a little bit of tolerance there as well and we're going to add this to our distance so over here we have ledgecheck.position.y minus wallcheck.position.y we're just going to go ahead and add 0.015 f so this is not going to change what our actual corner coordinate is instead it's going to make the rays that we fire out go a little bit further than where we think it should go that way we can guarantee that we'll find the corner so after doing this i haven't encountered any other issues let's go ahead and get started with the crouching so the first thing we want to do is let's go ahead and come to our states folder so scripts player player states and these are going to be sub states let's go ahead and create a new c sharp script and this is going to be our player crouch idle state go ahead and open that up and then next let's go ahead and create another c sharp script this one is going to be player crouch move state and let's go ahead and open that up as well so starting with our crouch move state let's go ahead and delete the pre-generated code and instead of inheriting from mono behavior we're going to inherit from our player grounded state we can then go ahead and click on the class name control full stop and we can generate our constructor so let's go ahead and save that and then move on to our crouch idle state and do the same thing so get rid of the pre-generated code change it from mono behavior to player grounded state and generate the override or the constructor so now that we have the basis for these two states let's go ahead and come to our player script and create our state objects so underneath state variables let's go ahead and close this so in state variables we'll go ahead and create a public player crouch idle state and we'll just call it crouch idle state don't forget to give it a public getter and a private setter and then next let's go ahead and declare our crouch move state so public player crouch move state call it crouch move state and then give it the public getter and the private setter so after creating the variables to store these two states we'll come to our unity callback functions and in our awake function let's go ahead and call those constructors to create the state objects so first we have our crouch idle state and we'll just say equals new player crouch idle state we'll pass in this as our player state machine as our state machine player data as our player data and then finally our animation boolean name we'll just say crouch idle next we can go ahead and say crouch move state equals a new player crouch move state with this as our player state machine as our state machine player data as our player data and then finally our animation blue name is crouch move just like that so now before we do anything else in our crash move and crouch idle states let's go ahead and set up the transitions to these two states so if we take a look at our state machine diagram we have transitions going from our move state to our crouch move state and vice versa and then from our idle state to our crouch idle state so let's go ahead and open up our idle state and our move state and a quick way to do this is just come to our state variables hold in control and then click on the class file we want to open so if we click on player idle state it'll open up our player idle state file and if we start to make changes it'll just add it over here or we can just drag it over like that okay so how the transition to our crouch data is going to work simply involves our y input if we have a negative y input for example we're holding s or down on our joystick we want to go into the crouch state so the first thing we need to do is read in our y input now because we'll be using our y input in our crowd states and our move states instead of reading it in in each of these states individually let's go ahead and come to our player ground estate and read it in over here so i'll come up to the top and create another protected end call it y input and then let's come down to our logic update function and after we read in our x input we can just go ahead and say y input equals player dot input handler dot normalized input y so now all of our grounded states have access to this variable so let's go back to our player idle state and now in our logic update function here we can create an else if to transition to our player crouch idle state so we'll just come and say else if our y input equals equals negative one so we're holding down or holding on s then we want to transition to our crotch idle state so state machine dot change state to player dot crouch idle state like that now we just need to remember that over here we have this and not is exiting state which stops us from transitioning to a different state if our parent state has already started a transition so what we're going to do is just get rid of this and then we'll create another if statement to hold this boolean so only if we're not exiting the state will we do these two checks so just go ahead and move this in here just like that now let's go ahead and open up our player move state which is over here and we're just going to do the exact same thing so we basically have the exact same transition so we'll just say else if y input equals equals negative one then state machine dot change state to player dot move state sorry not player dot move state player dot crouch move state like that and let's go ahead and create the encompassing not is exiting state if statement so if not is exiting state then we want to do all of this and don't forget to remove it from here perfect so now we have transitions set up to go to our crowd states so now we can confirm that this works by setting up our actual animation transitions so let's go ahead and come back to unity and now unfortunately i need to point out that there's some mistakes in the sprite sheet that some of you likely have so if we go ahead and look at our character one sprite sheet if we open it up in the sprite editor i think it's underneath our movement sprite there's just some rogue pixels that shouldn't be here like on this sprite some of these outline pixels should not be here so i have provided a modified version of the sprite sheet in the description it's underneath part 27 folder on google drive and i'll make sure that all other sprite sheets on there are correct that way if you're newer you likely should not have this issue but if you do go ahead and follow along as we fix this so let's go ahead and import our new sprite sheet which in this case is just player movement as i've removed the two attack animations from it because that's a whole different system that we'll get into later anyway we can go ahead and click on that and set up our settings so our pixels per unit is 16. our filter mode is going to be point no filter our sprite mode should be set to multiple and we can go ahead and set our compression to none go ahead and apply that and then click on sprite editor slice grid by cell size and 64 by 64 is perfect go ahead and apply that and now all you need to do is the tedious task of replacing all of our sprites from our animations so basically we're just going to bring up our animation window click on our player and we'll just start at the top with our full animation so our full animation currently has three frames which if we increase the size we can see is going to be this frame to this frame so this is player movement 10 to player movement 12. so go ahead and select all three of those and then just drag it in like we usually would it should replace the sprites that are in here already next we have our idle animation which is just the first four frames of our sprite sheet next we have our jump up one now remember this is just a single sprite so jump up one means that there's no x input so that should be this frame this is frame seven now before we do jump up one x let's just go ahead and come to jump up two which is frame eight jump up three is then frame nine perfect next we can do the animations with x inputs so jump up one x that is going to be this frame which is nope this frame which is frame four drag that up next is jump up two x which is frame five and then finally jump up three x which is frame six after that we have our landing animation which is frame 13 to 15. go ahead and drag that in next we have our ledge climb animation in this case we actually don't have to change this one because this was a separate file and all these frames are correct so we can skip all of these three next we have our move animation which is going to be let's find it this frame told this frame which in this case i can't actually see it is frame 21 total 32 so go ahead and drag that up perfect next we have our wall climb animation which is down here this should be the last 12 frames before our crouch animation so this one so basically all of these ones that look like easy climbing we can just go ahead and drag that in it still works and then next we have our wall grab animation which we just had one frame the first frame just like that and then finally we have our wall slide animation which again is just one frame and it's given over here perfect so now we've replaced all of our frames and we can go ahead and delete our broken sprite sheet that is our character one so just click delete delete perfect now one more thing we need to do is just click on our player and over here in our sprite renderer let's go ahead and add our first player movement sprite as our default sprite why did that wait let's go ahead and close our animation window i don't think it should be doing that okay yeah so i was trying to record something okay so the sprite is currently missing because we deleted the sprite sheet that uh this correlated with so let's go ahead and drag in our first sprite like that and our everything is back to normal let's go ahead and create our crouch animations so we'll bring up our crouch i mean our animation window again navigate to our animations folder which is here player and let's go ahead and create a new clip we'll just call the first one crouch idle and then let's create a new clip that is going to be our crouch move clip or our crouch move animation so let's go back to our sprite sheet over here and our crouch animation is at the end so we'll start here till this should be 12 objects perfect go ahead and drag that in we'll change our sample rate to 15 let's see how that looks and there's our crouch animation you must please excuse how crappy it looks this one's very difficult but i think it it works and then next we need to go ahead and create our crouch idle animation now if we look at our normal idle animation our sample rate is 5 so let's do the same over here and our idle animation is just the first four frames over here just like that perfect okay so now we have our two crouch animations we can go ahead and close our animation window and let's go ahead and take a look at our animator so over here we now have our crouch idle and our crouch move state let's go ahead and just drag that up to our normal idle and normal move just for some organization and let's make some space beneath this for these two states just put the crouch idle here and the crouch move so next we need to go ahead and create the booleans that we set up in the constructor so let's create a new boolean and we'll just call this crouch idle move that to the top and then create another boolean and this one is going to be crouch move and move that to the top okay so let's start with a transition from entry to our crouch idle state click on that the condition for this is that crouch idle is true then we make a transition from crouch idle to exit click on that here we want to untick has exit time and set the transition duration to zero under conditions we'll just say that crouch idle must be false now let's move up our crouch move to the top and make a transition from entry to crouch move click on it add a condition which is crouch move must be true and then make a transition from crouch move back to exit click on that untick has exit time set the transition duration to zero and underneath the conditions we have crouch move must be false so yeah let's go ahead and test our transitions to those states if we run the game and then hold down s you can see our character crouches of course if we let go of s nothing happens because we have not set up those transitions yet but let's go ahead and test the crouch move state as well so we'll just start moving one way and then hold s and as you can see our character crouches and we're in the crouch move animation perfect everything is working splendidly so now before we can go ahead and do anything in our crouch states like setting the movement speed for the crouch move and things like that we need to go ahead and create that data so let's go ahead and open up our player data class which is under player data player data let's go ahead and create a new header and we'll just call this crouch states we'll just put both move and idle in the same header and basically all we need right now is a public float that we'll call crouch move speed let's look at our naming actually here we say movement velocity so we'll say crouch movement velocity by default let's go ahead and set that equal to five so this is all we need here right now we'll come back here in just a second for something else okay so now let's go ahead and take a look at our player crouch idle state the only function that we're going to override so control full stop generate override is our logic update function so we can deselect all and click logic update and in here all that we need to do is set up the transitions to go if we're in our crouch idle state up to our idle state if we no longer hold down or to go to our crouch move state if we give x input and seeing as our x and y input is already being read in in our player grounded state we don't have to worry about any of that over here so in our logic update function all we need to say is if not is exiting state and then inside of this we say if x input does not equal zero so we're holding a or d or left and right with the joystick then we want to transition to our player crouch move state so we'll say state machine dot change state 2 player dot crouch move state and then else if so in this case our y input does not equal negative one so we're no longer holding down then state machine dot change state to player dot idle state and that's basically it for the crouch idle state now in our player crouch move state we're essentially going to do the same thing so control full stop to generate our overrides deselect all and let's just get our logic update function in here we start off yet again with if not is exiting state then if x input equals equals zero then we want to transition to our idle state so we can say state machine dot change state to player dot idle state then we can say else if in this case we let go of y so y input does not equal negative one then state machine dot change state to player dot move state and actually this should not be idle state this should be crouch idle state like that so now this is just our transition logic what we also need to do is set our player velocity and check if we should be flipping or not so we'll just say inside of our if not is exiting state we'll say player dot set velocity x and we're going to set it to our player data dot crouch movement velocity we then also want to check if we should be flipping with player dot check if should flip and to this we simply pass our x input like that and that should be all the transition setup let's take a look at how it works so if we run the game if we hold s we crouch if we let go we stand back up if we hold s we crouch if we then hold d we start we we start crouch walking not quite what okay let's see what's going on so in our player set velocity x we should also be passing in or multiplying this with our facing direction so multiply with player dot facing direction so let's go ahead and try that out now we also don't seem to have our transition to our crouch idle state oh okay no we do so another thing we have to also come back to our crouch idle state and in our enter function for this actually set our velocity to zero so let's go ahead and generate overrides and let's just add our enter function and then in here all we say is player dot set velocity zero like that okay so the skeleton for our crouch is basically there but we're not quite done yet there's one more thing we need to take care of and to demonstrate what that is let's just go ahead and build a little area that requires us to actually crouch so in our scene view i'm going to just make a little cave over here okay so now we have a little area over here that requires us to crouch so let's go ahead and run the game and take a look at what happens so if we run up to the area as you can see we cannot head through the little hole if we hold s and crouch down and try and move through it we still can't move through it and why it's because we didn't do anything to our collider so let's go ahead and take care of that so what we need to do is we need to define two different colliders for our player one is going to be our crouch collider and one is going to be our normal standing collider now we're not actually going to create two separate colliders we just need to decide what the different sizes of those colliders are going to be and then we'll change the collider's size in code whenever we crouch or stand back up so if we take a look at our player you can see we have our green collider outline over here so what we're going to do is if we take a look at our box collider 2d component over here we can see that we have an offset and a size so what an offset is it's basically what is the center of this collider relative to the center of the game object so obviously the center of this game object over here is 0 0. now our collider is centered at x0 so there's no x offset like this but it's moved down 0.16 units you can see if we change this to zero this green rectangle center is on this game object center over here let's just go ahead and change that back negative 0.16 and now our size is the width of a rectangle is 0.6 units and the height is 1.6 units so let's quickly go back to our player data script over here and let's define two more floats we're going to have a public float called crouch collider height and by default we're going to set that to something that's less than one i think 0.8 f should work then we can go ahead and create another public float this one is going to be our stand collider height and in this case we're going to set it equal to 1.6 f which is the same as what we have it set in unity itself here 1.6 we're not going to do anything with the width of the collider but you can use the exact same method we're about to use to also increase the width and decrease the width of the collider now unfortunately it's not as simple as just setting the height or changing the y value of the size of the collider because with that comes a change in the offset of the collider if we decrease the y over here you can see in this case the center stays the same the offset stays to what it's currently set to but we need the bottom of the collider to still line up with the feet so what we need to do is change the size of the collider like this and then also change the offset of the collider to be where we need it to be and to do that is very simple so let's go ahead and come to our player script and in our other functions region over here we're going to create a function that changes or sets our collider height now before we can do that we first need to get access to our collider component so let's come back up to our variables come to components and let's declare a public box collider 2d and we'll just call it movement collider we'll give it a getter and a private setter and then we can close this and come to our unity callback functions and in our start function let's go ahead and get that component so we'll say movement collider equals get component of type box collider 2d like that and now we're ready to go so let's minimize our unity callback functions and come down to our other functions so in here let's just go ahead and create a public void function that we'll call set collider height like that now this function is going to have an input parameter that is going to be a float and we'll just call it height now in this function the first thing we're going to do is save the center of our collider in other words the offset so i'll just say vector2 call it center because it makes a little more sense than offset and we'll set it equal to our movement collider dot offset next let's go ahead and define the size of the collider that we want so we'll just use our workspace for this and we'll say workspace dot set and we're going to set the x to what it currently is so just movement collider dot size dot x like that and then our y is just going to be height so now to actually change the collider size all we say is movement collider dot offset equals workspace but we still need to take into account that y offset that we need to change and this is where our center comes in so before this let's just go ahead and say center dot y so this is our current center minus equals our desired height minus our current height so movement collider dot size dot y and then of course we'll divide this by two and so the reason we divide this by two is because let's take a look at this for every two units that are y size decreases our offset only decreases by half of that so for every two size one offset unit perfect so now that we know what the center is supposed to be after we set the collider size which i made a mistake here this is supposed to be dot size we can go ahead and set the offset with movement collider dot offset equals center and so now no matter what height we pass through this function it'll change size of the collider correctly holding the bottom of the collider in the same position and we can think about why that makes sense for a second for when i made another mistake this bracket is supposed to become over here like that okay wait this is actually supposed to be plus equals sorry about that so now that we have our set collider height function let's go ahead and call this function from our states to change our size so let's start with our player crouch idle state and in our enter function we'll just say player dot set collider height and we'll set this to player data dot crouch collider height so this should set the y size to 0.8 and now we also need to set this back to our stand height in our exit function so let's go ahead and generate the override for that deselect all exit if i said enter i meant to say exit so we say player dot set collider height to player data dot stand collider height just like that and i can come and do the same thing in our player crouch move state so let's generate our enter and exit function exit like that in our enter function we can go ahead and say player dot set collider height to our player data dot crouch collider height and then in the exit function we'll say player dot set collider height to player data dot stand collider height just like that let's go ahead and try it out so back in unity we can run the game and just immediately here we can see our collider if we have gizmos turned on if we crouch you can see how the collider shrinks but the bottom of the glider stays at the same position so this means now that we can crouch and enter this area where we before could not okay awesome so what is our next problem well say we crouch and we walk into this little cave area and we stop crouching this happens because our collider gets set to big again and so we get stuck between the floor and the ceiling we can still move and eventually get out of it but you know this is definitely a bug and not a feature so what do we do about this so we're going to do is basically just add a ceiling check if we're crouching and we're standing over here like we do a ground check we're gonna do a little check right above the player over here and if we detect a ceiling we won't allow him to exit the crouching states so it's super simple to fix so all we do is come to our player game object and create a new empty game object and we'll just call it ceiling check c e i ceiling i hope that's right okay this game object does not need to be at the head of the player if we go ahead and move over here you can see it's about shoulder height so if we look at this game object where it's placed originally or the center of our game object that's about right let's go ahead and come back to our player script and let's come to our check transforms let's create one for our ceiling check so serialize field to expose it to the unity editor private transform ceiling check and so now if we go back to unity we can go ahead and drag that in if we click on our player over here we have a slot for our ceiling check so just drag that in and now we can go ahead and come back to our player function or player script and come to our check functions and basically just duplicate our check if grounded for our ceiling so public bool check 4 ceiling and then in here all we say is return physics 2d dot overlap circle and to this we then pass our ceiling check dot position with our player data dot ground check radius it's okay if it's the same and then we pass in our player data dot what is ground now let's come to our player grounded state and let's create a boolean where we can store our ceiling check this boolean we want to be accessible to our crouch states though so let's go ahead and declare a protected bull and we'll just call it is touching ceiling like that and then in our do checks function we'll just say is touching ceiling equals player dot check for ceiling now we can come to our player crouch move state and over here where we would transition out of the crouch states so if y input does not equal negative one we can just say and not is touching ceiling we can then come to our player crouch idle state function and do the exact same thing so else if y input does not equal negative one and not is touching ceiling so if we come back to unity and test that out let's see what happens go ahead and crouch walk in here and if we let go of s you can see nothing happens so now we're staying in the crouch state even though we're no longer holding down s we can move left and right and as soon as we leave this he will stand up automatically perfect so everything is working the way it should so far and so in this case we should really be done except not quite because we have a ledge climb there's a little bit of extra complexity so currently okay we have this ledge climb if we you know grab the ledge and give directional input we climb it okay to demonstrate this i need to build another little area real quick okay so now we have this little area over here that is only accessible you know you can't crouch walk into it okay so now if we ledge climb up here still the same issue we get up here we're stuck inside we can crouch and then now we're in here and we can't stand back up until we leave but we need to make it so that when we're about to climb into a little area like this we do a check to see if there's space and then based on that determine if we should go to our normal idle state or if we should go to our crouch idle state so we obviously want to go to our crouch idle state in this case now how are we going to do that we're going to use our corner position that we know and we're going to fire a ray upwards to determine if there's enough space for the character to stand and if there's not enough space we'll instead transition to the crouch idle animation or state instead of our normal idle state so let's take a look at how we're going to do that so this change we're just going to make in our player ledge climb state itself so let's go ahead and open that up player states sub state ledge climb state in here let's go ahead and declare a private boolean [Music] that is just going to be our is touching ceiling boolean like we have in our player grounded state but we're not going to use our player's check for ceiling function because that just does it where the player currently is we need to do a check for where the player is going to be and after declaring our is touching ceiling boolean let's just come down to the bottom of the state and declare a private void function that we'll just call check for space now inside this function we simply need to say is touching ceiling equals physics 2d dot raycast and the position we want to cast this array from is our corner position but again we're going to add a little offset to it to avoid detecting the corner itself and to move it more into the cave but just by a little bit so we will say corner position to start off with and now let's add some to the y of that corner position so we'll say plus open up some brackets and say vector 2 dot up and then we multiply this with the distance that we want so we'll just say 0.015 f and now let's move it in our facing direction a little bit so we'll say plus again and this time vector 2 dot right multiplied with our player dot facing direction and then multiply that with the size that we want again which is 0.015 f perfect so this is going to take our corner position and then move it to the left a bit and move it up a bit or move it in the facing direction a bit and then up this will just give us better more consistent results next we need to define the direction which is just going to be vector 2 dot up and then our distance and in this case we're going to use our player data dot stand collider height so we want to check is there at least enough space for our standing collider to fit in and so basically if there is a ceiling within our stand collider height is touching ceiling is going to get set to true finally we just want to add our layer mask so player data dot what is ground like that now we just need to figure out where to call this function from and basically we'll just call this function when we start climbing the ledge so in our logic update function over here we check to see if our x input is in our facing direction in which case we start climbing the ledge so before that we'll just say check for space and then now we know if there's enough space for us to actually climb up there in which case we can come up to our if is animation finished because over here we have our transition to our idle state so now we can just change this based on if is touching ceiling so we'll say if is touching ceiling meaning there's not enough space to stand we'll just say state machine dot change state to our player dot crouch idle state and then else so there is enough space we want to transition to our normal idle state so if we go ahead and save this go back to unity and let's try it out as you can see our character automatically crouches when he finishes the ledge climb that way we don't get that situation where we get stuck awesome so now one last thing that i'm going to do in this case is just a little nuance with my animation as you can see when i climb the ledge over here there's that one frame where my head does not quite fit inside this hole and that's just because of the the art you can easily change the animation to not go over this height but what i'm going to do is just remove that last frame like that and then change my ledge climb animation based on if we're climbing into a hole like this or if it's just a normal open ledge so what we'll do is come to our project animations folder come to player and over here we have our ledge climb if we click on that and then click control d we'll create a copy of it now it's ledge climb one let's go ahead and rename that to ledge climb crouch like that and let's open up the animation and see what we're dealing with because we duplicated the animation like that it's not part of our animator yet so let's actually go ahead and drag that in real quick and we'll just leave it there for now let's take a look at the animation itself so click on our player click on ledge client crouch okay so it's this frame that we want to delete we have this weird disproportionate big head to get rid of so we'll just oop delete the frame and let's move our animation event one frame back so this is going to be our last frame again you don't have to do this i just don't like the way the head pops up there you could easily change it so that the climb animation finishes before he crosses this threshold but this is another option so now that we have this let's come to our animator and over here we have our ledge climb substate machine so let's go ahead and drag our ledge clan crouch animation into that and then go in here and so now instead of having just a transition from hold to climb and exit we're going to have a third transition to our ledge climb crouch and state so we need to do is create another boolean to determine which one of these paths we should follow so let's create a boolean and we'll just call it is touching ceiling that up to the top and let's make a transition from hold to our ledge climb crouch state click on that untick has exit time set the transition duration to zero and under conditions add is touching ceiling must be true the other condition we want is going to be our ledge climb condition so let's add another condition and in this case we want our ledge climb where is that here ledge climb state remember we have the ledge climb state and the climb ledge which one do i want i want climb ledge not electron state sorry so climb ledge must be true we can also come to this transition and just add that our is touching ceiling must be false after this we simply have a transition going from climb to exit which has the condition of ledge climb state must be false so we can make a transition from ledge climb crouch to exit click on that untick has exit time set the transition duration to zero and then add the condition that ledge climb state must be false so now to get this to work we just have to set this is touching ceiling boolean from our code so let's come back to our player ledge climb state script and let's come back down to our check for space function so after is touching ceiling after we do the check we can just go ahead and say player dot anim dot set bool and the boolean we want to set is is touching ceiling and we just want to set this equal to is touching ceiling like that now if we come back to unity and try it out again jump up as you can see that little at last little frame that looks all glitchy does not get played if we come to this side and climb this the full animation is still played perfect and so now we are almost done there's just one last thing we need to consider and that is if we're in a hole like this and we want to dash again we get stuck and it just doesn't work so in this case we're just going to make it so that we can't transition to our dash state if we're busy crouching like this and the simplest way to do that is to come to our player grounded state over here we have a transition to our dash state so all we do is add another condition and that is and not is touching ceiling so if we save that and try it out as you can see we can no longer dash while we're crouching but if we're crouching without a ceiling above our heads we can still enter the dash state and so that does it for our crouching ability i'm sorry it's been a long time coming i've been gone for a while busy with university and exams it's been a hell of a ride but i just want to say thank you to all of you for sticking with me i really appreciate it it means so much that i have such a wonderful community who's constantly waiting for me to release more content it makes it so much easier to get back into this and to get going again and i'm so excited i have so many new things planned after this episode i'm going to start working on the new uh revamped combat system and i have a lot of plans for that with multiple weapons that you can equip and multiple animations i'm still figuring out the the little nitpicky details of that but expect that soon as soon as i have uh some nice progress to show i will be posting it on the discord server i might make a tweet about it we'll see but yeah other than that that is our crouch state and so before i go i would just like to give a huge thank you to all of my supporters and wonderful people on patreon you guys are awesome and i just like to give a huge special thank you to binary chef sa cody lee cleon vassner jeremiah miranda and pira says for your support on patreon you guys are absolute mad lads and i really appreciate it and yeah thank you guys all for watching and i'll see you guys in the next episode
Info
Channel: Bardent
Views: 5,240
Rating: undefined out of 5
Keywords: Unity., tutorial, player, 2D, platformer, walljumping, wall sliding, jumping, Unity, Animation, ground, check, physics2d, variable, jump, height, Wall, Jumping, Movement, improvement, user, friendly, code, 2019, 2019.2.0f1, Ledge, climb, dead, cells, system, easy, beginner, animation, Dash, Ghosting, After, Image, After Image, Unity combat, Comabt, Melee, Melee Combat, Basic, Enemy, Patrol, State, Machine, respawn, hit, finite state maching, state machine, enemy, behavior, Archer, FSM, New, Input, drop, dash, Crouch, crouch
Id: hC1Gkj5-g-8
Channel Id: undefined
Length: 46min 5sec (2765 seconds)
Published: Sat Dec 19 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.