Unity - 2D Melee Combo System Tutorial
GitHub Repo - github.com/SMHTKI/Unity-2D-Me...
2D combat systems need to be simple yet flexible in order to meet the needs of an ever growing project. Combo's in general can make for an easy source of project bloat. Today I show you a nice way to utilize FSM's to craft a system that's both easy to use but full of scalability.
Hero Knight - Pixel Art
assetstore.unity.com/packages...
2D Magic & Attack Effects
assetstore.unity.com/packages...
Chapters:
00:00 - Intro
01:00 - Project Prerequisites
02:00 - Starting our new Project
03:08 - A Brief Overview of States & State Machines
03:33 - Classes to Create for Later
03:51 - Creating our Melee Base State
07:18 - Setting our Child Combo Classes
08:36 - Setting up our Helper Classes
10:36 - Creating & Setting up Our Animation Controller
13:02 - Seeing the Animations Combo
13:31 - Adding Damage
14:18 - Utilizing Keyframe Recording with a Dynamic Collider
17:03 - Adding Damage Dealing
19:50 - Adding Input Buffering & Polish
Twitter - / smhilldev
GitHub - github.com/SMHTKI
Instagram - / smhilldev
Talky Beat by Twin Musicom is licensed under a Creative Commons Attribution 4.0 license. creativecommons.org/licenses/...
Source: www.twinmusicom.org/song/265/t...
Artist: www.twinmusicom.org
Пікірлер: 168
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.
the quality of this video is insane, thank you for this
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!
My man's dedication is over the top!
Excellent video. Clearly explained all the basics to get started on soft soft. Thanks
Very well done video, gets to the point fast. Cheers!
What a great video, helps A LOT in the beginning.
Really great stuff! Looking forward to more from you. Subbed!
@SMHillDev
2 жыл бұрын
Awesome, thank you!
Thanks, man! Just what I was looking for!
Gonna ramp up in subs real quick, keep it up! Great tut!
Great video, VERY easy to listen to you and follow along. Please keep videos coming... subbed for sure!
man you should have more subscriber, this is high quality vids good job!
This will be very helpful for my project. Thanks !
Amazing tutorial. You should keep posting, man! It's been awhile.
My dude this is soooo good! Instant sub!
Great stuff. Thanks for sharing!
Best soft soft Introduction Ever!!
wow thank you so much. no joke it is now so much easier and u explained it really good.
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
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
studying more of your videos to begin to get comfortable. Thank you!
OMG, it really worked. Thank you so much!!
man it is the best thing I have ever seen
it works perfectly! Thanks buddy
Great video try tutorial!! Keep up the Good Work!
I really appreciate that you help people with free apps
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
Really good work
This really helped thanks a lot!
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.
thank you so much for posting these good videos
Great video, excellent pacing and concise but poignant descriptions.
Nice work. Subbed! 👍🏾👌🏾
thank you so much for sharing this method with !
damn how you make videos this good with only about 300 subs that's crazy
Great tutorial man, I am starting to make videos myself! Good luck!
thank you straight to the point
unbelievably well explained...to the point, no wafsofte wafsofte chat...you´re the dude ..thanks!
very very gooood, thaaankss maan
What a smart Young man, thanks
nice tuto Thank you!
dude that's insane ,
Actually legit. Thanks!
Good guide for beginners)
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
Thank you, it means a lot:)
Holy shit, thank you so much!!
You have not nearly enough subscribers for how good ur videos are man
@SMHillDev
5 ай бұрын
Thank you!
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?
LOOOL YESSSSSSSS TNice tutorialS COMNT IS FELTTTTT
i downloaded. its works :)))
fucking legend, this is so well done
YIPPEE!!! Happy day. Thank You, Funny Animals Club!
Thank you buddy
Thanks King
How beatiful algoritm.. Amazing
thank you so much
Thank you tNice tutorials really helped!!!!!!!!!!!!
thank you good sir
When I've started producing I personally have downloaded most of the plugins from there, never had problems with virus, malwares and
i will play this game all day long
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
NICE
I NEED to know what Visual Studio theme this is- it looks awesome
Thanks I love you
This tutorial was great but im having problems with getting the attack to work and i have no compiler errors
In the setup, appreciate the videos! Maybe a dumb question but is there a way to export content in mono in soft20?
how is GetComponent supposed to work inside the MeleeBaseState class if it does not inherit from MonoBehaviour ?
nice
of ti...cheers!
How did you get the effects chain on the left side of the setuper?
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
Hey Bro, Don't talk down to yourself like that. believe in yourself and don't let nobody change your mindset of that!
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...
Thx
Works
I don't know what i am doing wrong but my character only repeats the first attack animation without clicking or doing anything?
how would i do this with the new input system?
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?
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?
@thiagodasilva3022
11 ай бұрын
I have the same Problem
@thiagodasilva3022
11 ай бұрын
Just Continue the Tutorial it Fixes itself with the AttackWindows... :)
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.
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.
@ImportantClips2
5 ай бұрын
Did you find a solation
Great stuff, would love for you to make a tutorial on how to make a simple fighting game
@SMHillDev
2 жыл бұрын
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.
@ggplayer1170
2 жыл бұрын
@@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.
@SMHillDev
2 жыл бұрын
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
@ggplayer1170
2 жыл бұрын
@@SMHillDev Oh they're called Hitbox groups? I didn't know that, thank you for the pointers!
Sooo trueeee
wow, its working for magic eden, opensea and minting sites
Wow
Hey, so how to make the enemy die?
What about implementing the input to use the Unity New Input system, instead of mouse 0?
@SMHillDev
2 жыл бұрын
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.
@reaporofdragon744
2 жыл бұрын
or just go into the settings and use both input systems
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?
@khnuxsora
2 жыл бұрын
you probably set conditions from the attack to idle...i think if you remove them it should work
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?
@iop313
Күн бұрын
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)
Hi Sean, state machine it doesn't work when i do the build, I can't find the solution.
@LucasDevWeb
Жыл бұрын
NullReferenceException: Object reference not set to an instance of an object at ComboCharacterState.Update () [0x0001c] in :0
@peterhe2872
Жыл бұрын
@@LucasDevWeb did u solve the issue?
@jagerbi_9741
4 ай бұрын
@@LucasDevWebit seems like that you haven't assigned something
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?
@SMHillDev
2 жыл бұрын
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.
@marwanonthemoon876
2 жыл бұрын
@@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
@SMHillDev
2 жыл бұрын
@@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.
@marwanonthemoon876
2 жыл бұрын
@@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?)
@SMHillDev
2 жыл бұрын
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.
getting nullreference error in build only, any clue how to solve it? seems currentstate and nextstate are missing
@pokefesterJr
Жыл бұрын
same bro HELP LOL
@peterhe2872
Жыл бұрын
@@pokefesterJr the onvalidate func doesn't get called in buid, sorry for late reply dude
@pokefesterJr
Жыл бұрын
@@peterhe2872 np, thanks for the reply. I found out about the on validate after scrolling through the comments some more
"The softs in these softs are gonna be sent to the setuper"
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
Try to see soft design , composing and setuping as three seperate tNice tutorialngs to focus on and it might will make more sense
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?
@SMHillDev
2 жыл бұрын
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.
@sora1804
Жыл бұрын
@@SMHillDev it gives me using or assembly error while switching the MonoBehaviour to State
Reajjy helpful
Just found out my automata class actually isn't useless 🤯
Is it expensive to call new for every state transition?
@SMHillDev
5 ай бұрын
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.
@supendi42
5 ай бұрын
Thanks for the quick reply, I guess there is a lot of difference when instantiating pure C# class and monobehaviour class