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

  • @SMHillDev
    @SMHillDev5 ай бұрын

    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.

  • @Hotpes
    @Hotpes Жыл бұрын

    the quality of this video is insane, thank you for this

  • @duyvo1258
    @duyvo1258 Жыл бұрын

    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!

  • @718phungngocgiabao4
    @718phungngocgiabao42 жыл бұрын

    My man's dedication is over the top!

  • @mariaalejandranogalesborda2284
    @mariaalejandranogalesborda22842 жыл бұрын

    Excellent video. Clearly explained all the basics to get started on soft soft. Thanks

  • @berkedagal6035
    @berkedagal6035 Жыл бұрын

    Very well done video, gets to the point fast. Cheers!

  • @polski6812
    @polski68122 жыл бұрын

    What a great video, helps A LOT in the beginning.

  • @durvids474
    @durvids4742 жыл бұрын

    Really great stuff! Looking forward to more from you. Subbed!

  • @SMHillDev

    @SMHillDev

    2 жыл бұрын

    Awesome, thank you!

  • @SamiVillaGalaxy
    @SamiVillaGalaxy2 жыл бұрын

    Thanks, man! Just what I was looking for!

  • @HippieMoney
    @HippieMoney11 ай бұрын

    Gonna ramp up in subs real quick, keep it up! Great tut!

  • @USA-RPA
    @USA-RPA2 жыл бұрын

    Great video, VERY easy to listen to you and follow along. Please keep videos coming... subbed for sure!

  • @ericrichard9854
    @ericrichard98542 жыл бұрын

    man you should have more subscriber, this is high quality vids good job!

  • @herrflantier3739
    @herrflantier3739 Жыл бұрын

    This will be very helpful for my project. Thanks !

  • @MarceloCSC
    @MarceloCSC Жыл бұрын

    Amazing tutorial. You should keep posting, man! It's been awhile.

  • @AaronAsherRandall
    @AaronAsherRandall5 ай бұрын

    My dude this is soooo good! Instant sub!

  • @blades575
    @blades5752 жыл бұрын

    Great stuff. Thanks for sharing!

  • @tekmontekmon8098
    @tekmontekmon8098 Жыл бұрын

    Best soft soft Introduction Ever!!

  • @zullismairethacunaolivella1437
    @zullismairethacunaolivella14372 жыл бұрын

    wow thank you so much. no joke it is now so much easier and u explained it really good.

  • @almaaanea
    @almaaanea Жыл бұрын

    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

  • @utyflby
    @utyflby2 жыл бұрын

    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

  • @madhavsolanki6464
    @madhavsolanki64642 жыл бұрын

    studying more of your videos to begin to get comfortable. Thank you!

  • @alanzack---amv8558
    @alanzack---amv85582 жыл бұрын

    OMG, it really worked. Thank you so much!!

  • @jaztiryzer06
    @jaztiryzer062 жыл бұрын

    man it is the best thing I have ever seen

  • @LordHinson
    @LordHinson2 жыл бұрын

    it works perfectly! Thanks buddy

  • @SSRBast
    @SSRBast Жыл бұрын

    Great video try tutorial!! Keep up the Good Work!

  • @fongz1211
    @fongz12112 жыл бұрын

    I really appreciate that you help people with free apps

  • @aduvipppp
    @aduvipppp Жыл бұрын

    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

  • @katsutwo5051
    @katsutwo5051 Жыл бұрын

    Really good work

  • @fenerix3911
    @fenerix3911 Жыл бұрын

    This really helped thanks a lot!

  • @phantomredstudios3022
    @phantomredstudios30222 жыл бұрын

    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.

  • @jeffreyhendricks3428
    @jeffreyhendricks34282 жыл бұрын

    thank you so much for posting these good videos

  • @UberAnonymous
    @UberAnonymous Жыл бұрын

    Great video, excellent pacing and concise but poignant descriptions.

  • @frankypappa
    @frankypappa Жыл бұрын

    Nice work. Subbed! 👍🏾👌🏾

  • @karaliseklers2531
    @karaliseklers2531 Жыл бұрын

    thank you so much for sharing this method with !

  • @floatixx
    @floatixx Жыл бұрын

    damn how you make videos this good with only about 300 subs that's crazy

  • @quickunity3543
    @quickunity35432 жыл бұрын

    Great tutorial man, I am starting to make videos myself! Good luck!

  • @textilesgranfe8940
    @textilesgranfe8940 Жыл бұрын

    thank you straight to the point

  • @kumailthecuber7477
    @kumailthecuber74772 жыл бұрын

    unbelievably well explained...to the point, no wafsofte wafsofte chat...you´re the dude ..thanks!

  • @toastymctoast3672
    @toastymctoast36722 жыл бұрын

    very very gooood, thaaankss maan

  • @andersonoliveiramagalhaes1785
    @andersonoliveiramagalhaes17854 ай бұрын

    What a smart Young man, thanks

  • @jaopaulo7095
    @jaopaulo7095 Жыл бұрын

    nice tuto Thank you!

  • @Ghareebz
    @Ghareebz2 жыл бұрын

    dude that's insane ,

  • @boris345678
    @boris3456782 жыл бұрын

    Actually legit. Thanks!

  • @fikus5567
    @fikus55672 жыл бұрын

    Good guide for beginners)

  • @ItsAkile
    @ItsAkile Жыл бұрын

    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

  • @jepoystv7396
    @jepoystv7396 Жыл бұрын

    Thank you, it means a lot:)

  • @JuhlaChessu
    @JuhlaChessu2 жыл бұрын

    Holy shit, thank you so much!!

  • @tobias9790
    @tobias97906 ай бұрын

    You have not nearly enough subscribers for how good ur videos are man

  • @SMHillDev

    @SMHillDev

    5 ай бұрын

    Thank you!

  • @scrillagorilla4524
    @scrillagorilla452410 ай бұрын

    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?

  • @mrnick8361
    @mrnick83612 жыл бұрын

    LOOOL YESSSSSSSS TNice tutorialS COMNT IS FELTTTTT

  • @dybala7pvp
    @dybala7pvp2 жыл бұрын

    i downloaded. its works :)))

  • @Xinnou
    @Xinnou5 ай бұрын

    fucking legend, this is so well done

  • @raymondnielsen7125
    @raymondnielsen71252 жыл бұрын

    YIPPEE!!! Happy day. Thank You, Funny Animals Club!

  • @blasterxt9
    @blasterxt9 Жыл бұрын

    Thank you buddy

  • @macawls
    @macawls Жыл бұрын

    Thanks King

  • @coffeegarden
    @coffeegarden11 ай бұрын

    How beatiful algoritm.. Amazing

  • @nicolasniboldi3815
    @nicolasniboldi3815 Жыл бұрын

    thank you so much

  • @faqihwicaksono2015
    @faqihwicaksono20152 жыл бұрын

    Thank you tNice tutorials really helped!!!!!!!!!!!!

  • @Kiennvit
    @Kiennvit Жыл бұрын

    thank you good sir

  • @EmanuelRZM
    @EmanuelRZM Жыл бұрын

    When I've started producing I personally have downloaded most of the plugins from there, never had problems with virus, malwares and

  • @kidspets8353
    @kidspets83532 жыл бұрын

    i will play this game all day long

  • @reaporofdragon744
    @reaporofdragon7442 жыл бұрын

    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

  • @charbelboughazale3994
    @charbelboughazale39942 жыл бұрын

    NICE

  • @ivomaayne9183
    @ivomaayne91832 ай бұрын

    I NEED to know what Visual Studio theme this is- it looks awesome

  • @nbzcik
    @nbzcik Жыл бұрын

    Thanks I love you

  • @d3certii941
    @d3certii941 Жыл бұрын

    This tutorial was great but im having problems with getting the attack to work and i have no compiler errors

  • @Ilovegeometrydash231
    @Ilovegeometrydash2312 жыл бұрын

    In the setup, appreciate the videos! Maybe a dumb question but is there a way to export content in mono in soft20?

  • @joaogabriellimamoraes4087
    @joaogabriellimamoraes40876 ай бұрын

    how is GetComponent supposed to work inside the MeleeBaseState class if it does not inherit from MonoBehaviour ?

  • @miguelbroca3243
    @miguelbroca32432 жыл бұрын

    nice

  • @nitin_1996
    @nitin_19962 жыл бұрын

    of ti...cheers!

  • @luqigongchang6213
    @luqigongchang62132 жыл бұрын

    How did you get the effects chain on the left side of the setuper?

  • @sito7443
    @sito74432 жыл бұрын

    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

  • @ohaidavid1739
    @ohaidavid17392 жыл бұрын

    Hey Bro, Don't talk down to yourself like that. believe in yourself and don't let nobody change your mindset of that!

  • @thiagodasilva3022
    @thiagodasilva302211 ай бұрын

    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...

  • @laikenfui2191
    @laikenfui21912 жыл бұрын

    Thx

  • @adriananakazawa2116
    @adriananakazawa2116 Жыл бұрын

    Works

  • @georgigeorgiev9966
    @georgigeorgiev9966 Жыл бұрын

    I don't know what i am doing wrong but my character only repeats the first attack animation without clicking or doing anything?

  • @scobro
    @scobro Жыл бұрын

    how would i do this with the new input system?

  • @warpzone8421
    @warpzone842111 ай бұрын

    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?

  • @Sittidet
    @Sittidet2 жыл бұрын

    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

    @thiagodasilva3022

    11 ай бұрын

    I have the same Problem

  • @thiagodasilva3022

    @thiagodasilva3022

    11 ай бұрын

    Just Continue the Tutorial it Fixes itself with the AttackWindows... :)

  • @venenopp
    @venenopp Жыл бұрын

    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.

  • @miloobote8949
    @miloobote89495 ай бұрын

    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

    @ImportantClips2

    5 ай бұрын

    Did you find a solation

  • @ggplayer1170
    @ggplayer11702 жыл бұрын

    Great stuff, would love for you to make a tutorial on how to make a simple fighting game

  • @SMHillDev

    @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

    @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

    @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

    @ggplayer1170

    2 жыл бұрын

    @@SMHillDev Oh they're called Hitbox groups? I didn't know that, thank you for the pointers!

  • @mir4_cansada200
    @mir4_cansada2002 жыл бұрын

    Sooo trueeee

  • @pabloborioni9638
    @pabloborioni9638 Жыл бұрын

    wow, its working for magic eden, opensea and minting sites

  • @rajuhossain7819
    @rajuhossain78192 жыл бұрын

    Wow

  • @nosocialismturtle.2891
    @nosocialismturtle.28912 жыл бұрын

    Hey, so how to make the enemy die?

  • @swiftcreations
    @swiftcreations2 жыл бұрын

    What about implementing the input to use the Unity New Input system, instead of mouse 0?

  • @SMHillDev

    @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

    @reaporofdragon744

    2 жыл бұрын

    or just go into the settings and use both input systems

  • @parappaaaaa...8864
    @parappaaaaa...88642 жыл бұрын

    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

    @khnuxsora

    2 жыл бұрын

    you probably set conditions from the attack to idle...i think if you remove them it should work

  • @NguyenTran-hb5oe
    @NguyenTran-hb5oe2 ай бұрын

    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

    @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)

  • @LucasDevWeb
    @LucasDevWeb Жыл бұрын

    Hi Sean, state machine it doesn't work when i do the build, I can't find the solution.

  • @LucasDevWeb

    @LucasDevWeb

    Жыл бұрын

    NullReferenceException: Object reference not set to an instance of an object at ComboCharacterState.Update () [0x0001c] in :0

  • @peterhe2872

    @peterhe2872

    Жыл бұрын

    @@LucasDevWeb did u solve the issue?

  • @jagerbi_9741

    @jagerbi_9741

    4 ай бұрын

    ​@@LucasDevWebit seems like that you haven't assigned something

  • @marwanonthemoon876
    @marwanonthemoon8762 жыл бұрын

    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

    @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

    @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

    @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

    @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

    @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.

  • @peterhe2872
    @peterhe2872 Жыл бұрын

    getting nullreference error in build only, any clue how to solve it? seems currentstate and nextstate are missing

  • @pokefesterJr

    @pokefesterJr

    Жыл бұрын

    same bro HELP LOL

  • @peterhe2872

    @peterhe2872

    Жыл бұрын

    @@pokefesterJr the onvalidate func doesn't get called in buid, sorry for late reply dude

  • @pokefesterJr

    @pokefesterJr

    Жыл бұрын

    @@peterhe2872 np, thanks for the reply. I found out about the on validate after scrolling through the comments some more

  • @alexisyvandolosa3831
    @alexisyvandolosa3831 Жыл бұрын

    "The softs in these softs are gonna be sent to the setuper"

  • @koelgamer6304
    @koelgamer63042 жыл бұрын

    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

  • @moisesnunes55
    @moisesnunes55 Жыл бұрын

    Try to see soft design , composing and setuping as three seperate tNice tutorialngs to focus on and it might will make more sense

  • @parappaaaaa...8864
    @parappaaaaa...88642 жыл бұрын

    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

    @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

    @sora1804

    Жыл бұрын

    @@SMHillDev it gives me using or assembly error while switching the MonoBehaviour to State

  • @ciuc8829
    @ciuc88292 жыл бұрын

    Reajjy helpful

  • @krytis3024
    @krytis3024 Жыл бұрын

    Just found out my automata class actually isn't useless 🤯

  • @supendi42
    @supendi425 ай бұрын

    Is it expensive to call new for every state transition?

  • @SMHillDev

    @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

    @supendi42

    5 ай бұрын

    Thanks for the quick reply, I guess there is a lot of difference when instantiating pure C# class and monobehaviour class