Hey, wanted to make this pinned to first say thanks for all the support on the video! I'm planning on making more content like this and content in general very soon. I would also like to clarify an issue I've seen with builds. I didn't run a test build verifying the system (rookie mistake I know) so you might see these. - The OnValidate function doesn't get called inside of builds, so you should move the logic that sets your mainStateType dynamically into the top of the Awake function. I suggest putting it in its own function for ease of use in both editor and build cases. And thank you to all those who have pointed it out.
Beat me to the FSM combo tutorial. I was just talking to my spouse about doing one and this got recommended to me randomly. I'm about two months late to the party. Good stuff. My only critique, I would cut out the animator since you already have a FSM you are working with.
Thanks a lot dude! This is heavily underrated tutorial, you taught the fundamental which is easy to understand, I will follow and implement it in my project but with different hitbox managing approach. Anyway, one sub and nice day!
TNice tutorials is by far the best soft soft basic tutorial, I rember when I just started learning, tNice tutorials was so helpful!! I’ve now been releasing edm
Found a bug. I compiled this using 2022.3.5, and it works fine in the editor, but when I build the game, clicking the mouse doesn't do anything. Which is strange, since you're just using Input.GetMouseButtonDown and there aren't any special extra input packages being used. When I googled it, I found a Unity forum thread with like 30 different solutions that were all use-case specific. Why is something as basic as clicking the mouse so fragile in Unity though?
I have been trying for a while to add a parameter of the animator in an animation to modify its value as you do in minute 15:32, but I can't manage to do it. When I hit Add Property in the animation, the Animator component of the Gamebject is not shown.
In the ComboCharacter file I keep getting errors for meleeStateMachine.CurrentState. It tells me the object reference is not set to an object. If I already instatiated the object meleeStateMachine as a private object how could it not exist? Please help I think Im close because when I comment out the reference to meleeStateMachine I am able to get attack 1 out by clicking.
The combat system doesn't work after I built my project. The player character doesn't respond after the attack input. But it works fine in the Unity Editor. Any ideas why?
Yea it happend time to time to me also U need more updated videos u can try one of two things 1. typing ur own code (The some thing could happend) 2. finding more updated tutorial when unity tutrial get 2years or much older it don't working usally even visual tell u all good (But tip for me check ur unity project be4 u deleting ur code maybe something there is worng)
This is great tutorial! i'm looking about 2d melee combo tutorial for a while. but i have a problem. the character is changing from GroundEntryState to GroundComboState immediately(i just click 1 time but character's animation is transit from Attack1 to Attack2 by itself), I tried to look at the scripts, Is there any way to solve it?
Good tutorial! Though my GroundEntryState seems to go to the GroundComboState even when i dont hit the button. Any Ideas on why this could happen?EDIT: Nevermind t fixed itself through the Attackwindows...
amazing tutorial bro! this is perfect. I learned a lot, and you explained things really well. i wonder what you're up to now? did you get a job in the tech field?
Hey man, great tutorial, I have a small question, my character is going from Idle to Attack1 to Attack2 from one click only I can't know why. I tried adjusting the attack window to the last frame of Attack1 animation, but now it's no longer going to Attack2, most probably because of the small window. What's the issue ? I followed the video step by step even the github repo.
thanks i did a similar system from a course but you could only damage one enemy at a time and having 5 enemies rushing you and only hitting 1 seems unfair XD thanks now i can make it more like a survival instead of a platformer
Hey i dont know why but when I start the game the animation is working but the Character doesn't return to idle when I click it only does the attacks and stop when the animation is done... Not returning to idle... I am pretty new to Unity animation so... Idk what I did wrong?
What about it? That depends on your use of it/how you implemented it. If you're asking what the new unity input system equivalent of Input.GetMouseButton(0) is in the new Unity Input System its Mouse.current.leftButton.wasPressedThisFrame.
Object reference not set to an instance of an object GroundEntryState.OnEnter (StateMachine _stateMachine) (at Assets/Scripts/GroundEntryState.cs:14) StateMachine.SetState (State _newState) (at Assets/Scripts/StateMachine.cs:31) StateMachine.Update () (at Assets/Scripts/StateMachine.cs:16)...help?
That error is normally caused by a variable not being set when you're using it. I believe(If you set things up like my example project in git) that specific one is the animator component. Without seeing your code that could be caused by a number of things. 1. You haven't properly parented GroundEntryState to MeleeBaseState (GroundEntryState : MeleeBaseState) which is what holds the Animator in the first place. 2. You forgot to set the animator component in MeleeBaseState (animator = GetComponent();) in that classes' OnBegin() function. 3. You've done both of these but you placed the order of the super function wrong or not at all. In each overridden class make sure you have the base version of each functions call in the leading function. So in this particular case having the base.OnEnter() function at the top of the function. This calls the parents OnEnter function which sets all those variables. Its important that this is called first because we have to set them before using them. public override void OnEnter(StateMachine _stateMachine) { base.OnEnter(_stateMachine); // Do the rest of the stuff you need here. } If none of that works I suggest checking your code against the one I've linked in my description that leads to the project on git for comparison.
Did you make sure that GroundComboState derives from MeleeBaseState (GroundComboState : MeleeBaseState) which also derives from state (MeleeBaseState : State) ?
@@SMHillDev oooh yeah i did it now.....but i have the same mistake for State Manager : StateMachine.cs(76,33): error CS0029: Cannot implicitly convert type 'IdleCombatState' to 'State'......
No problem! If you have any other issues you run into you can always check your code base against mine, I have the entire project I make in the video up on github (link in the description).
Hey man everything works fine now... But the attack animation starts a little slow at first when I click it, it takes a second to respond ... Is there any way to solve this?
My best guess is you forgot to set exit time for the transitions to 0 from Any State to your attack. If you have any exit time on any of those states it waits for the idle animation to finish a complete cycle first before firing off any animations.
I haven't run it through a profiler, but I assume it's fine seeing as the class itself is pretty lightweight. Though this system could use some optimization I have tested it with dozens of game objects at a time all running various logic ontop of the statemachines and haven't seen any issues linking to it.
This is a very interesting approach to a melee combo system, I'd love to mess around with it but I wanted to pick your brain a bit before I do so. How do you see this interacting with the movement (character controller), think I should set a bool that stops the character from moving when an attack is initiated or do I have to convert the character controller altogether into an FSM?
The power of the fsm is it can run asynchronously with your characters other logic. So yeah your approach could totally work as long as you have a reference to said character controller. This approach was taken with that in mind cause some games stop all movement (much like you want to) for a quick hit pause, some slow momentum, and others don't care at all. My approach is similar when I need to halt movement where I have a bool to stop accepting inputs on my character controller and then zero out velocity of them in OnBegin. If I want momentum to continue after a hit, I cache said velocity in OnBegin and then reset it back to what it was in OnEnd.
@@SMHillDev I haven't thought about the velocity cache thing, that's pretty dope! one other question, I noticed you created a new layer in your animators and then deleted it, was that by mistake instead of parameters? I never used the layer thing in animator so I'm not sure what it does
@@marwanonthemoon876 Yeah that was a mistake. Layers are really only useful for 3D games or if you're using 2D Vector animation (I.E Working with skeletons/bones.) Its used for managing complex states for different bone groupings for blending as well as organization. You can also use them for traditional 2D (For the sole purpose of organization) as well but those cases are normally if you have a massive anim suite with a ton of states.
@@SMHillDev Ah thanks so much for the explanation dude, very helpful stuff! I'm working on implementing an air melee combo now, just wanted to run things by you (sorry for asking so many questions!) so I changed the ComboCharacter to switch to MeleeEntryState() instead of Groundstate, where I'll be doing the cheques, but I was wondering, if the player jumps midway of the combo what is going to happen? (would the ground check be okay in MeleeEntryState, or where should it be?)
In this particular setup its mostly dependent on what you what you want to happen. If the player jumps midway of a combo it would in this case (based on what's already there) continue to fire off whatever states set combo you're in if you were to continue hitting the attack button. What you can do is either don't allow the player to jump during (Its what I do with disabling movement inputs). This makes it so that you won't be accepting any until an attack is fully done and the FSM has reset so it goes back to the entry state. Or add in an extra check for grounded when deciding which state to fire off next, sending it back to MeleeEntryState if you want, or a specific attack of your choosing. I do this as well, since I know my player can't jump I allow for an uppercut mid melee ground attack, checking to see if a specific input is fired and swapping midway.
Noted! Though, even though this is more geared towards action platformers/metroidvania's, this pretty much is all you'd need to make the core of a fighting game. Alot of the stuff I'd do in that is covered here already for the most part.
@@SMHillDev Hi The hitboxes and hurtboxes in fighting games are a lot more complicated, since they require more precision than just a single box collider. Making hitboxes without the use of Unity box colliders seems undocumented? The state machine would work the exact same way though, yeah.
Ah you want a tutorial on Hitbox groups then. I could totally add that to my list. Though in the meantime you might want to look at Unity's Bounds class. Its what unity colliders use for its collision functionality and what I use when I'm trying to avoid using them for whatever reason I might have. Bounds: docs.unity3d.com/ScriptReference/Bounds.html
Hey, wanted to make this pinned to first say thanks for all the support on the video! I'm planning on making more content like this and content in general very soon.
I would also like to clarify an issue I've seen with builds. I didn't run a test build verifying the system (rookie mistake I know) so you might see these.
- The OnValidate function doesn't get called inside of builds, so you should move the logic that sets your mainStateType dynamically into the top of the Awake function. I suggest putting it in its own function for ease of use in both editor and build cases. And thank you to all those who have pointed it out.
Beat me to the FSM combo tutorial. I was just talking to my spouse about doing one and this got recommended to me randomly. I'm about two months late to the party. Good stuff. My only critique, I would cut out the animator since you already have a FSM you are working with.
the quality of this video is insane, thank you for this
I really appreciate that you help people with free apps
Really great stuff! Looking forward to more from you. Subbed!
Awesome, thank you!
My man's dedication is over the top!
damn how you make videos this good with only about 300 subs that's crazy
Thanks a lot dude! This is heavily underrated tutorial, you taught the fundamental which is easy to understand, I will follow and implement it in my project but with different hitbox managing approach. Anyway, one sub and nice day!
TNice tutorials is by far the best soft soft basic tutorial, I rember when I just started learning, tNice tutorials was so helpful!! I’ve now been releasing edm
you are not like the others who puts link filled with adds, so u deserve to be subscribed..... thanks for the plugin and all the best for future
Found a bug. I compiled this using 2022.3.5, and it works fine in the editor, but when I build the game, clicking the mouse doesn't do anything. Which is strange, since you're just using Input.GetMouseButtonDown and there aren't any special extra input packages being used. When I googled it, I found a Unity forum thread with like 30 different solutions that were all use-case specific. Why is something as basic as clicking the mouse so fragile in Unity though?
Gonna ramp up in subs real quick, keep it up! Great tut!
You have not nearly enough subscribers for how good ur videos are man
Thank you!
Best soft soft Introduction Ever!!
Excellent video. Clearly explained all the basics to get started on soft soft. Thanks
I have been trying for a while to add a parameter of the animator in an animation to modify its value as you do in minute 15:32, but I can't manage to do it. When I hit Add Property in the animation, the Animator component of the Gamebject is not shown.
man it is the best thing I have ever seen
Very well done video, gets to the point fast. Cheers!
What a great video, helps A LOT in the beginning.
Hi Sean, state machine it doesn't work when i do the build, I can't find the solution.
NullReferenceException: Object reference not set to an instance of an object
at ComboCharacterState.Update () [0x0001c] in :0
@@LucasDevWeb did u solve the issue?
@@LucasDevWebit seems like that you haven't assigned something
studying more of your videos to begin to get comfortable. Thank you!
In the ComboCharacter file I keep getting errors for meleeStateMachine.CurrentState. It tells me the object reference is not set to an object. If I already instatiated the object meleeStateMachine as a private object how could it not exist? Please help I think Im close because when I comment out the reference to meleeStateMachine I am able to get attack 1 out by clicking.
Thanks, man! Just what I was looking for!
man you should have more subscriber, this is high quality vids good job!
Amazing tutorial. You should keep posting, man! It's been awhile.
wow thank you so much. no joke it is now so much easier and u explained it really good.
My dude this is soooo good! Instant sub!
Great stuff. Thanks for sharing!
Great video try tutorial!! Keep up the Good Work!
Great tutorial man, I am starting to make videos myself! Good luck!
Great video, VERY easy to listen to you and follow along. Please keep videos coming... subbed for sure!
it works perfectly! Thanks buddy
This will be very helpful for my project. Thanks !
Great video, excellent pacing and concise but poignant descriptions.
OMG, it really worked. Thank you so much!!
this rlly fkin awesome. subbed
Aah this is helping me so much! Thank you! I haven't finished but I can tell this is probably going to work. TYSM! I subbed
thank you so much for sharing this method with !
thank you so much for posting these good videos
LOOOL YESSSSSSSS TNice tutorialS COMNT IS FELTTTTT
unbelievably well explained...to the point, no wafsofte wafsofte chat...you´re the dude ..thanks!
Hey Bro, Don't talk down to yourself like that. believe in yourself and don't let nobody change your mindset of that!
This really helped thanks a lot!
The combat system doesn't work after I built my project. The player character doesn't respond after the attack input. But it works fine in the Unity Editor. Any ideas why?
Yea it happend time to time to me also
U need more updated videos u can try one of two things
1. typing ur own code (The some thing could happend)
2. finding more updated tutorial when unity tutrial get 2years or much older it don't working usally even visual tell u all good (But tip for me check ur unity project be4 u deleting ur code maybe something there is worng)
YIPPEE!!! Happy day. Thank You, Funny Animals Club!
Thanks, Gonna sink my teeth into this for the first time this week. I already have a base idea of what I want to accomplish
This is great tutorial! i'm looking about 2d melee combo tutorial for a while. but i have a problem. the character is changing from GroundEntryState to GroundComboState immediately(i just click 1 time but character's animation is transit from Attack1 to Attack2 by itself), I tried to look at the scripts, Is there any way to solve it?
I have the same Problem
Just Continue the Tutorial it Fixes itself with the AttackWindows... :)
thank you straight to the point
Good tutorial! Though my GroundEntryState seems to go to the GroundComboState even when i dont hit the button. Any Ideas on why this could happen?EDIT: Nevermind t fixed itself through the Attackwindows...
Really good work
amazing tutorial bro! this is perfect. I learned a lot, and you explained things really well. i wonder what you're up to now? did you get a job in the tech field?
how is GetComponent supposed to work inside the MeleeBaseState class if it does not inherit from MonoBehaviour ?
Nice work. Subbed! 👍🏾👌🏾
When I've started producing I personally have downloaded most of the plugins from there, never had problems with virus, malwares and
What a smart Young man, thanks
How beatiful algoritm.. Amazing
Holy shit, thank you so much!!
u see that little cog option button on the bottom near the fullscreen button? if u click on that u can chose to slow it down or speed it up. i
very very gooood, thaaankss maan
Actually legit. Thanks!
I don't know what i am doing wrong but my character only repeats the first attack animation without clicking or doing anything?
dude that's insane ,
I NEED to know what Visual Studio theme this is- it looks awesome
Thank you, it means a lot:)
Hey man, great tutorial,
I have a small question, my character is going from Idle to Attack1 to Attack2 from one click only I can't know why.
I tried adjusting the attack window to the last frame of Attack1 animation, but now it's no longer going to Attack2, most probably because of the small window.
What's the issue ? I followed the video step by step even the github repo.
nice tuto Thank you!
fucking legend, this is so well done
getting nullreference error in build only, any clue how to solve it? seems currentstate and nextstate are missing
same bro
HELP LOL
@@pokefesterJr the onvalidate func doesn't get called in buid, sorry for late reply dude
@@peterhe2872 np, thanks for the reply. I found out about the on validate after scrolling through the comments some more
Good guide for beginners)
How did you get the effects chain on the left side of the setuper?
how would i do this with the new input system?
i downloaded. its works :)))
This tutorial was great but im having problems with getting the attack to work and i have no compiler errors
i will play this game all day long
Thanks King
thanks i did a similar system from a course but you could only damage one enemy at a time and having 5 enemies rushing you and only hitting 1 seems unfair XD thanks now i can make it more like a survival instead of a platformer
Can�t wait to go out tonight and celebrate your birthday. But first of all, accept my warmest wishes and gratitude for being my brother.
Hey i dont know why but when I start the game the animation is working but the Character doesn't return to idle when I click it only does the attacks and stop when the animation is done... Not returning to idle... I am pretty new to Unity animation so... Idk what I did wrong?
you probably set conditions from the attack to idle...i think if you remove them it should work
What about implementing the input to use the Unity New Input system, instead of mouse 0?
What about it?
That depends on your use of it/how you implemented it. If you're asking what the new unity input system equivalent of Input.GetMouseButton(0) is in the new Unity Input System its Mouse.current.leftButton.wasPressedThisFrame.
or just go into the settings and use both input systems
Thank you buddy
In the setup, appreciate the videos! Maybe a dumb question but is there a way to export content in mono in soft20?
The reason for my asking, is due to crackling/distorting soft, whenever the drum/snare, or whatever is playing. TNice tutorials was the case off
Object reference not set to an instance of an object
GroundEntryState.OnEnter (StateMachine _stateMachine) (at Assets/Scripts/GroundEntryState.cs:14)
StateMachine.SetState (State _newState) (at Assets/Scripts/StateMachine.cs:31)
StateMachine.Update () (at Assets/Scripts/StateMachine.cs:16)...help?
That error is normally caused by a variable not being set when you're using it. I believe(If you set things up like my example project in git) that specific one is the animator component.
Without seeing your code that could be caused by a number of things.
1. You haven't properly parented GroundEntryState to MeleeBaseState (GroundEntryState : MeleeBaseState) which is what holds the Animator in the first place.
2. You forgot to set the animator component in MeleeBaseState (animator = GetComponent();) in that classes' OnBegin() function.
3. You've done both of these but you placed the order of the super function wrong or not at all. In each overridden class make sure you have the base version of each functions call in the leading function. So in this particular case having the base.OnEnter() function at the top of the function. This calls the parents OnEnter function which sets all those variables. Its important that this is called first because we have to set them before using them.
public override void OnEnter(StateMachine _stateMachine)
{
base.OnEnter(_stateMachine);
// Do the rest of the stuff you need here.
}
If none of that works I suggest checking your code against the one I've linked in my description that leads to the project on git for comparison.
@@SMHillDev thank you so much bro
No problem!
thank you good sir
i got error CS1503 Argument 1: cannot convert from 'GroundComboState' to 'State'
Did you make sure that GroundComboState derives from MeleeBaseState (GroundComboState : MeleeBaseState) which also derives from state (MeleeBaseState : State) ?
@@SMHillDev oooh yeah i did it now.....but i have the same mistake for State Manager : StateMachine.cs(76,33): error CS0029: Cannot implicitly convert type 'IdleCombatState' to 'State'......
Same thing, did you make sure that IdleCombatState derived from State? (IdleCombatState : State)
@@SMHillDev ...i feel stupid...xD anyway thank you so much
No problem! If you have any other issues you run into you can always check your code base against mine, I have the entire project I make in the video up on github (link in the description).
Thank you tNice tutorials really helped!!!!!!!!!!!!
thank you so much
Hey man everything works fine now... But the attack animation starts a little slow at first when I click it, it takes a second to respond ... Is there any way to solve this?
My best guess is you forgot to set exit time for the transitions to 0 from Any State to your attack. If you have any exit time on any of those states it waits for the idle animation to finish a complete cycle first before firing off any animations.
@@SMHillDev it gives me using or assembly error while switching the MonoBehaviour to State
Is it expensive to call new for every state transition?
I haven't run it through a profiler, but I assume it's fine seeing as the class itself is pretty lightweight.
Though this system could use some optimization I have tested it with dozens of game objects at a time all running various logic ontop of the statemachines and haven't seen any issues linking to it.
Thanks for the quick reply, I guess there is a lot of difference when instantiating pure C# class and monobehaviour class
This is a very interesting approach to a melee combo system, I'd love to mess around with it but I wanted to pick your brain a bit before I do so. How do you see this interacting with the movement (character controller), think I should set a bool that stops the character from moving when an attack is initiated or do I have to convert the character controller altogether into an FSM?
The power of the fsm is it can run asynchronously with your characters other logic. So yeah your approach could totally work as long as you have a reference to said character controller. This approach was taken with that in mind cause some games stop all movement (much like you want to) for a quick hit pause, some slow momentum, and others don't care at all. My approach is similar when I need to halt movement where I have a bool to stop accepting inputs on my character controller and then zero out velocity of them in OnBegin. If I want momentum to continue after a hit, I cache said velocity in OnBegin and then reset it back to what it was in OnEnd.
@@SMHillDev I haven't thought about the velocity cache thing, that's pretty dope! one other question, I noticed you created a new layer in your animators and then deleted it, was that by mistake instead of parameters? I never used the layer thing in animator so I'm not sure what it does
@@marwanonthemoon876 Yeah that was a mistake. Layers are really only useful for 3D games or if you're using 2D Vector animation (I.E Working with skeletons/bones.) Its used for managing complex states for different bone groupings for blending as well as organization. You can also use them for traditional 2D (For the sole purpose of organization) as well but those cases are normally if you have a massive anim suite with a ton of states.
@@SMHillDev Ah thanks so much for the explanation dude, very helpful stuff!
I'm working on implementing an air melee combo now, just wanted to run things by you (sorry for asking so many questions!) so I changed the ComboCharacter to switch to MeleeEntryState() instead of Groundstate, where I'll be doing the cheques, but I was wondering, if the player jumps midway of the combo what is going to happen? (would the ground check be okay in MeleeEntryState, or where should it be?)
In this particular setup its mostly dependent on what you what you want to happen. If the player jumps midway of a combo it would in this case (based on what's already there) continue to fire off whatever states set combo you're in if you were to continue hitting the attack button.
What you can do is either don't allow the player to jump during (Its what I do with disabling movement inputs). This makes it so that you won't be accepting any until an attack is fully done and the FSM has reset so it goes back to the entry state.
Or add in an extra check for grounded when deciding which state to fire off next, sending it back to MeleeEntryState if you want, or a specific attack of your choosing. I do this as well, since I know my player can't jump I allow for an uppercut mid melee ground attack, checking to see if a specific input is fired and swapping midway.
Hey, so how to make the enemy die?
NICE
Try to see soft design , composing and setuping as three seperate tNice tutorialngs to focus on and it might will make more sense
Great stuff, would love for you to make a tutorial on how to make a simple fighting game
Noted! Though, even though this is more geared towards action platformers/metroidvania's, this pretty much is all you'd need to make the core of a fighting game. Alot of the stuff I'd do in that is covered here already for the most part.
@@SMHillDev Hi
The hitboxes and hurtboxes in fighting games are a lot more complicated, since they require more precision than just a single box collider. Making hitboxes without the use of Unity box colliders seems undocumented?
The state machine would work the exact same way though, yeah.
Ah you want a tutorial on Hitbox groups then. I could totally add that to my list. Though in the meantime you might want to look at Unity's Bounds class. Its what unity colliders use for its collision functionality and what I use when I'm trying to avoid using them for whatever reason I might have.
Bounds: docs.unity3d.com/ScriptReference/Bounds.html
@@SMHillDev Oh they're called Hitbox groups? I didn't know that, thank you for the pointers!
of ti...cheers!
nice
Thanks I love you
"The softs in these softs are gonna be sent to the setuper"
Well on the way to MORTAL KOMBAT!!! 😊
Please, Please, Please include "New Quantize Jumps" also in "Edison" and "Slicex".