Using IMPROVED Animation Events in Unity

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ม.ค. 2025

ความคิดเห็น • 153

  • @git-amend
    @git-amend  3 หลายเดือนก่อน +14

    Happy Sunday! 🎉 Let's make an improvement on Unity's Animation Event system today! Check the repository for AnimationEvents from BlendTrees support as well.

  • @ZacharyYates
    @ZacharyYates 3 หลายเดือนก่อน +32

    This is the best unity channel on TH-cam.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Thanks for the kind words!

    • @reithaz_
      @reithaz_ 2 หลายเดือนก่อน

      word

    • @YoutuberUser000
      @YoutuberUser000 4 วันที่ผ่านมา

      You ain't wrong

  • @Yoraiz0r
    @Yoraiz0r 3 หลายเดือนก่อน +12

    Hey, I'm happy to see someone finally using StateMachineBehaviour! Would love to see you do a followup for everyone about extending ObjectPreview so those state machine behaviors can draw a preview of the animated character just like the Animator transitions do, without requiring modifying the scene character, and controlling that one's timeline.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +3

      Good idea. I actually thought about doing that too, but the video would have gotten a bit long. Something for the future!

    • @X1N30F
      @X1N30F 2 หลายเดือนก่อน

      @@git-amend Is this actually possible? I remember for one of the tools I made that I was not able to get a preview of an animation clip, ended up giving up in the end, it would have been a nice extra feature but if it actually a thing, I would love to go back and implement it!

    • @git-amend
      @git-amend  2 หลายเดือนก่อน

      @@X1N30F The preview window itself is doable with some effort. But, if you check the repository you'll find additional code for showing a blend tree animation in scene view that uses the Playable Graph (more functionality added after recording). Once you start making your own Playable Graph, you can do just about anything preview wise. Actually opening the preview window and using it requires using some reflection, but that window uses a similar technique.

    • @X1N30F
      @X1N30F 2 หลายเดือนก่อน

      @@git-amend thanks so much for getting back to me, I will definitely look into that and see how it goes! I might be able to just see what I could do to shoe in something for the preview window, since that's more so what I need rather than being in the scene view in any case I'm sure it will point me in the right direction.

  • @hotphe6723
    @hotphe6723 3 หลายเดือนก่อน +13

    I found it inconvenient to add animation events in AnimationEditor, so I created an animation wrapping class using ScriptableObject. I now see there's a way to add it directly to the state. Thank you for the helpful video.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      You're welcome! Thanks for watching!

    • @TheKr0ckeR
      @TheKr0ckeR หลายเดือนก่อน

      I'd also like to hear that how your SO object wrapping class is helping the situation, do you still use keys etc?

  • @indianapapi
    @indianapapi 2 หลายเดือนก่อน +1

    I just discovered this channel, and the comments I see are very positive. I see why, bro. This right here is the truth. I am now a faithful subscriber!

    • @git-amend
      @git-amend  2 หลายเดือนก่อน +1

      Thanks so much! Welcome to the channel-I’m glad you’re enjoying the content!

  • @herpenderper
    @herpenderper 3 หลายเดือนก่อน +2

    Honestly, having watched a ton of youtube tutorials over my gamdev career, I can't think of better educator than you! Well explained, to the point, easy to follow. A+ 👌

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Wow, thanks! I appreciate the kind words!

  • @stephanedurette5785
    @stephanedurette5785 3 หลายเดือนก่อน +1

    git-amend reached into my brain and made a video helping with what I was currently struggling with.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Haha, nice glad to hear that!

  • @dustintaub
    @dustintaub 3 หลายเดือนก่อน

    This is fantastic and very timely in my case. This week, I've literally been going though and doing all those annoying tasks to make animation events manually.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Awesome, glad to hear that!

  • @kpm25
    @kpm25 หลายเดือนก่อน

    Thanks Adam, This was quite full on but well worth the effort to go through! Cheers

    • @git-amend
      @git-amend  หลายเดือนก่อน

      You're welcome, glad it was useful!

  • @jb-lj8cj
    @jb-lj8cj 3 หลายเดือนก่อน +1

    Just starting to work on my first game in unity. Definitely a challenge with a full time job but your tutorials are fantastic!
    Was just looking into animations as well 😊

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Great to hear!

  • @AlexanderSholk
    @AlexanderSholk 3 หลายเดือนก่อน +1

    I'm just watching the whole video in one gulp! Very clear, without water and at a high level! I can't wait for you to start coding shaders;)

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Great to hear!

  • @henrikekholm6437
    @henrikekholm6437 3 หลายเดือนก่อน +2

    holy manoly, these was the one I needed just as this moment

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Nice!

  • @DrGroo
    @DrGroo 24 วันที่ผ่านมา

    👍 Magnificent. Great to see a video on this sophisticated a level of unity resulting... And one that makes it feel quite approachable.

    • @git-amend
      @git-amend  24 วันที่ผ่านมา

      Much appreciated! I aim to make complex topics easier to grasp.

  • @谢威-k3d
    @谢威-k3d 3 หลายเดือนก่อน

    Definitely the best channel for those who want to learn intermediate and high level developing skills!
    One thing I don't like about unity's state machine behavior is that, if there are two states blending between each other, the second state's OnStateEnter will actually be called before the first state's OnStateExit, this can cause bugs when script logic is highly depending on the animation's begin and end. (luckily, thx for git-amend's better state machine video, I extend that one to split the game logic and animation, really save my life)

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thanks so much for the comment! You're absolutely right-Unity's state machine can sometimes cause issues with overlapping `OnStateEnter` and `OnStateExit`, which is why splitting game logic from animation, as you've done, is such a great solution for avoiding those bugs. Thanks for sharing that!

  • @nhatlinhtran3575
    @nhatlinhtran3575 3 หลายเดือนก่อน

    Great content as always! Thank you for consistently creating such amazing videos every week!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      My pleasure!

  • @INeatFreak
    @INeatFreak 3 หลายเดือนก่อน +4

    This is great! I always hated how Unity handled these animation events, not only setting it up was painful but also you had no way of knowing before hand if that clip had an event inside it. You could easily forget when changing animation clips for better ones actually to setup the events again. Storing it within the Mechanic State Machine is definitely a better approach.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Yes, my sentiments exactly!

  • @silchasruin4487
    @silchasruin4487 3 หลายเดือนก่อน

    Thank you so much for this, cumbersome is too polite a word I would use for Unity's animation system. I used AnimatorStateInfo to keep track of when animations were at varying points for things such as attacks or when I wanted logic to transition animations because Unity's Animation Event system either was too buggy or didn't respond at all when you wanted split second triggers. Love the addition of the custom editor!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thank you! I agree, AnimatorStateInfo is underrated for things like that!

  • @Haze_E1
    @Haze_E1 2 หลายเดือนก่อน

    perfect for what im doing keep it up, unity needs to hire you, best tutorials around

    • @git-amend
      @git-amend  2 หลายเดือนก่อน

      I appreciate that! Maybe one day they will!

  • @LeoOB97
    @LeoOB97 3 หลายเดือนก่อน

    This is really helpful, i tried a lot of stuff to avoid using the default animation events but i never thought of this, StateMachineBehaviors are so overlooked

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thanks for the comment, I agree!

  • @metaling278
    @metaling278 3 หลายเดือนก่อน

    video is gold. appreciate everything you do for us :D

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      I appreciate that!

  • @romrom_13
    @romrom_13 3 หลายเดือนก่อน +1

    Cool and useful video - as always)
    I tried this approach and discovered two interesting things:
    1) The script can be slightly modified so that it takes all the sub state machines that are found in the main state machine - I played around a bit and it seems that something has worked out for me, which means that it will work for others as well)
    2) I wonder what you are thinking of doing with the mixing trees, since several animations are used there and you can't add behavior to them, unfortunately...
    But I'll say it again - very, very cool video - thank you!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thanks for the comment! I'm going to continue developing the script to handle some other things - handling substates is a good idea. For the blend trees, instead of normalizing a time, we can use the normalized weight param, and that part isn't too tricky - but displaying a preview is a little more difficult since there is no exposed method we can use for that. It will likely have to depend on some reflection. If I come up with a good solution for that, I'll be updating the repository.

    • @TonyWilcock80
      @TonyWilcock80 3 หลายเดือนก่อน

      How did you modify the script? Unfortunately, most of my animations are in sub state machines and it wont work.

  • @prometheus1100
    @prometheus1100 3 หลายเดือนก่อน

    Your channel is a godsend. Thank you for sharing your expert knowledge.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thank you so much for the kind words! I’m really glad the content is helping you out-more great stuff is on the way!

  • @fleity
    @fleity 3 หลายเดือนก่อน

    Nice! Reminds me a bit of timeline signals too. I remember doing something similar like this a few years ago. Basically invoke unity events whenenver a state starts / stops etc. Seeing you write the editor tool code for this is very useful btw. I write a lot of editor code but just as often I think urgh editor stuff is so convoluted and badly documented, thanks for the learning opportunity.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Nice, I haven't heard anyone mention signals in a long time! Connecting events to the states instead of the clips seems much more intuitive.

  • @IconGamesBR
    @IconGamesBR 3 หลายเดือนก่อน

    Thank you! Unity anim events in 2021 (what I'm using here) is a mess and this just saved my day!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Awesome, glad to hear that!

  • @CloverJump
    @CloverJump 2 หลายเดือนก่อน

    Thank you so much for teaching me this!

    • @git-amend
      @git-amend  2 หลายเดือนก่อน

      You are so welcome!

  • @puretrack06
    @puretrack06 3 หลายเดือนก่อน +1

    You about to have me redo my entire animation system

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Haha! I hope that's not a lot of work!

    • @puretrack06
      @puretrack06 3 หลายเดือนก่อน

      @git-amend I've been using animation events on the fbx Importer. Setting up the timing has been a pain in the ass. This is going to be a pain and a lot of time to do it but it's definitely worth it

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Just do a couple and see how it's working for you first!

  • @dev_samo
    @dev_samo 3 หลายเดือนก่อน +1

    Brilliant as always !

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Thank you! Cheers!

  • @midniteoilsoftware
    @midniteoilsoftware 3 หลายเดือนก่อน

    I wish I'd known about this before I made my "footsteps" video in my Music and Sound Effects series. I did my events the old-fashioned way :)

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Ah well, always more than one way to skin a cat!

  • @nightonmars
    @nightonmars 3 หลายเดือนก่อน

    Man, Christmas came early this year 😄Thank you!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      No problem!

  • @notagamedev5494
    @notagamedev5494 3 หลายเดือนก่อน

    The epitome of excellence.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Thank you!

  • @mananzi9907
    @mananzi9907 2 หลายเดือนก่อน

    This is incredible! I was wondering if you had any ideas on how to handle Animation Override Controllers, and overriding the animation events to work with this set up?

    • @git-amend
      @git-amend  2 หลายเดือนก่อน +1

      That is a problem I haven't tackled yet. If I do, I'll make a video about it (or update the repository, make sure to enable notifications on the repo updates).

  • @SomeKrnDude
    @SomeKrnDude 2 หลายเดือนก่อน

    I am grateful for all the information you've given me but I can't help but be discouraged at the same time.
    You are insane. Every video I watch there is an ocean of information to take in. I was already satisfied at 4:50, but clearly you were not, and you went on to adjust InspectorGUI and HumanBodyBones. I didn't even KNOW that HumanBodyBones even existed. I didn't even know that I wanted all this before you showed it, and now it feels like a requirement.
    I thought knowing couple of common design patterns and a decent understanding of SOLID was enough for me to code efficiently, but there is so much knowledge out there that I don't know.
    If I'm trying to break into the video games industry, is this the level of Unity/C# (in your other videos) understanding I need to be competitive? Have I been doing nothing the past year?
    panik

    • @git-amend
      @git-amend  2 หลายเดือนก่อน +1

      Just keep in mind that the career of the game dev / software engineer is one of constant learning. You (and I) will never know everything, so just keep on learning new things every day! There is always more...

    • @SomeKrnDude
      @SomeKrnDude 2 หลายเดือนก่อน +1

      ​@@git-amend Will do... Just in case I didn't make it known enough, thank you so much for these high quality videos.
      I didn't know functional programming existed in C# until you showed it in your channel.
      I didn't know that you could edit the inspector until you showed it in your channel.
      I didn't know about the 'is a' / 'has a' relationship for composition vs inheritance until you showed it in your channel.
      Even though I am not at the level of mastery to fully understand/utilize all these concepts, this is the most helpful Unity channel for me BECAUSE it shows me what I don't know. I wish the best for you.

  • @НикитаМордик-к8ф
    @НикитаМордик-к8ф 3 หลายเดือนก่อน

    So useful feature, thanks))

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      You're welcome!

  • @atheroymis5523
    @atheroymis5523 3 หลายเดือนก่อน

    Nice, just discovered the channel and really enjoyed watching the videos. One thing I noticed in the latest 2 tutorials is that the top play bar inspector is changed. I tried to do that once but everywhere it was saying that specific editor part is locked to modification.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Awesome, glad to hear that. Check out the Time Scale Toolbar Free asset in the video description. If you download that, first of all it's great to use, but it also has an Editor script you can analyze called 'Toolbar Extender' to start making your own customizations.

    • @atheroymis5523
      @atheroymis5523 3 หลายเดือนก่อน

      @@git-amend Thanks will check it out

  • @SeriousNeko
    @SeriousNeko 3 หลายเดือนก่อน

    StateMachineBehaviors are pretty convenient when you remember they exist. I used them to make Animator play Timeline clips before I switch to Animancer plugin.
    I wish Unity just improved Timeline editor so it works more in line with Animator - support editing multiple timeline clips, not requiring Playable Director, being more convenient in general.
    Timeline allows to do much more things in more convenient ways, including stuff like in this video. Can wrap your read-only animation clips in timeline clips and it will work just fine. I hope new Dots animation system will solve this issue.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Hm, very interesting. I hope the same for the DOTS animation system.

  • @DarthBiomech
    @DarthBiomech 3 หลายเดือนก่อน +2

    This is great, though there's a caveat that in some scenarios, events being tied to a specific animation file is actually _very_ useful. You can use one animator with several different NPCs with different animations, or like in my case, I've made a generalized sub-animator layer for handling weapons and items use, and what and when they activate their effects or sounds is determined by the animations they use... With script method you'd need to bake every single option into the animator, and clone animator for every new NPC, which immediately will make making edits to the animators a pain.
    My only gripe with the stock Animation Events is that they're gone when you re-import the animation.
    I wonder if it's possible to move this custom list of animation events into a separate external scriptable object and make it a dictionary of the animation files?

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      That's an interesting scenario. And also good to point out that they're gone after re-import. An approach of having a registry or dictionary might be one way to solve that, I'll have to give it a try as more features are added.

  • @TheKr0ckeR
    @TheKr0ckeR หลายเดือนก่อน

    You could've sold this as an asset for like 39.99 but not only you are giving it for free & and explaining every step... You are incredible man, to this community. I admire you. What would we do for eventName variable without strings? Since strings are easily mistyped, maybe enums? Or AnimationEventData SO reference instead of strings so that we can use it its name? Would it be overengineering.. IDK. Btw i couldnt see what we exactly changed on Animation Event property drawer. Seemed same to me as visually on the end.

  • @jumpkut
    @jumpkut 3 หลายเดือนก่อน

    Great idea and execution!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Thank you! Cheers!

  • @owencoopersfx
    @owencoopersfx 3 หลายเดือนก่อน

    Nice. Definitely better than the vanilla animation event system!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Thanks!

  • @herbert9039
    @herbert9039 3 หลายเดือนก่อน

    very helpful, thank you

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      You're welcome!

  • @damonfedorick
    @damonfedorick 3 หลายเดือนก่อน +2

    Nice!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thank you! Cheers!

    • @damonfedorick
      @damonfedorick 3 หลายเดือนก่อน

      would this solution be something that could go into the unity-utils? the animator is a built in to unity.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +2

      @@damonfedorick I think I will keep this stand alone, at least for now. There are several improvements that can still be made: handling Animator Overrides and Layers, as well as support for passing parameter values as well. And possibly handling blend trees.

    • @damonfedorick
      @damonfedorick 3 หลายเดือนก่อน

      @@git-amend are you hoping for Open source to handle those new features? or will you end up re-covering it in another video ?

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +2

      Haven't decided yet. The parameters is easy, so is layers. Overrides and Blend trees will take some doing.

  • @TheKr0ckeR
    @TheKr0ckeR หลายเดือนก่อน +2

    What about loop animations? Since we use hasTriggered, if the animation is looped like "spinning animation", if we put and event start and end of it, it will only work when the animation is changed to some other state.So it wont constantly invoke the event while the animation is in loop mode

    • @TheKr0ckeR
      @TheKr0ckeR หลายเดือนก่อน

      To solve this; I have added previousValue, if we pass the threshold, i reset the bool value.
      public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
      {
      float currentTime = stateInfo.normalizedTime % 1.0f;
      if (activateOnLoop)
      {
      if (currentTime < _previousNormalizedTime)
      {
      _hasTriggered = false;
      }
      }

      if (!_hasTriggered && currentTime >= triggerTime)
      {
      NotifyEvent();
      _hasTriggered = true;
      }

      _previousNormalizedTime = currentTime;
      }

    • @git-amend
      @git-amend  หลายเดือนก่อน

      Seems like a good solution.

  • @ClayManLanDay
    @ClayManLanDay 2 หลายเดือนก่อน

    Nice video!
    May I request one on authoring cutscenes (Playable Director + timeline?). It has been a pain int the ass when it uses navmeshed and animator controller

    • @git-amend
      @git-amend  2 หลายเดือนก่อน

      Thanks for the suggestion! I’ll keep that topic in mind-working with NavMesh and Animator Controllers in Timeline certainly has its challenges, and a walkthrough could be helpful.

    • @ClayManLanDay
      @ClayManLanDay 2 หลายเดือนก่อน

      @@git-amend Nice! That would be awesome!
      There is an official repository where there are examples for this. Sadly, the timeline API it uses is badly documented (or not enough "straight to the point" for my ADHD :'D)

  • @muhammadzubairirshad6724
    @muhammadzubairirshad6724 3 หลายเดือนก่อน

    By Watching this Video i am through i am doing wrong with animation events
    Thank you Soo much

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Awesome! So happy the video helped you out! Keep animating and have fun with it! 🎉

  • @luanferreira-dev
    @luanferreira-dev 3 หลายเดือนก่อน +1

    I use a lot of animation events in my game so i was really sicked to see this, sadly this doesnt really work when you use animator controller overrides and each character that overrides that animator has their triggers at different times... Would be cool to see a solution that covers this case

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Yes, someone else mentioned this. I'll have a look and see what can be done.

    • @nickreinstein4122
      @nickreinstein4122 2 หลายเดือนก่อน

      @@git-amend Does the recent change made to the git repo address this "animator controller override" issue at all?

  • @derbabonennt8876
    @derbabonennt8876 3 หลายเดือนก่อน

    Could you extend on this topic and make a crossover with the Playable series?
    If I am not mistaken it should be possible to create a Scriptplayable with the functionality to call an Event on a specified Timing - the challenge here is to make the event previewable and "user friendly" to work with. because you dont have an animator controller window in the playable work-context.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Not a bad idea. I'll look into what's possible. Thanks for the comment!

  • @FeastTheSenses
    @FeastTheSenses 3 หลายเดือนก่อน +2

    I used this approach as well - I liked it but it has 1 massive issue: It doesn't work with animator override controller, so I had to give it up and go back to putting events on animations directly.
    Unity has a very flawed animation system.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Interesting, I'll have to look into that a bit more.

  • @razzraziel
    @razzraziel 2 หลายเดือนก่อน

    Thank you! I think it would be better to have multiple events on event state component. That way more than one events on different part of the same animation can be fired. Or multiple components on same animation would do the same job?

    • @git-amend
      @git-amend  2 หลายเดือนก่อน

      Feel free to extend this example any way you see fit!

    • @TheKr0ckeR
      @TheKr0ckeR หลายเดือนก่อน

      Cant you just add another component? Since both component will call the receiver method in different time, it would still notify.

  • @littledreamergames
    @littledreamergames 3 หลายเดือนก่อน

    Unity is vast, so not everyone knows this, but you can add events to animations that import with the fbx. Just click the fbx asset, click the Animation button at the top of the inspector, then scroll down to Events and add your events to the timeline. Regardless, and as always, great video!

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +2

      Thanks for the comment! That's a good thing to point out, but it still tightly couples your events to an Animation Clip. Your Animation Clip will always have the same events attached to it everywhere you use it. Separation of concerns is the main advantage with a system like this video.

    • @littledreamergames
      @littledreamergames 3 หลายเดือนก่อน

      ​@git-amend your approach and implementation is very much appreciated.

  • @nickreinstein4122
    @nickreinstein4122 3 หลายเดือนก่อน

    As others have pointed out, the Unity Animation Event system is hard to work with and is immensely cumbersome when animation clips need to be updated. Your solution seems fantastic and Unity should pay attention.
    I'm curious about the efficiency of this approach as the number of event state behaviors on a clip increases and the number of animated objects that handle events like this increases. Do you have any insight on if your solution is more or less efficient at runtime?

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thanks for the comment. This approach should be highly efficient at runtime for most use cases. As the scale increases, especially with hundreds or thousands of objects, it may require further optimization, but it’s unlikely to introduce significant performance issues in smaller-scale projects. I'll continue to optimize it as I think of improvements, or others suggest them. The only real cost is getting a reference to the Receiver component, which is minimal but could be optimized. In fact, I think I'll start by caching it OnStateEnter, but we could also use a registry of some kind to optimize further.

  • @OneMoreQuestDev
    @OneMoreQuestDev หลายเดือนก่อน

    Love the channel. It has helped me a lot both with work and my own projects. There is one down side to this approach it ties the event to the Mecanim state. For most cases that is fine, but if you are dynamically adding your animations this dose not work. You can solve this with and make it compatible with your other one shot animation system by adding a "info" event to your animations and a empty "info" method to your animation controller script. Then add a ScriptableObject in the object field in the animation event. When the clip is played grab the object off the clip and use whatever data you need. This is useful for dynamic combo systems, or letting a controller know how much time they have to be in position for an attack/precise animation.

  • @eyellen
    @eyellen 3 หลายเดือนก่อน +1

    It's a shame that we have to do such simple things ourselves, while Unity should have done it. I think the community has written more tools for Unity than the Unity itself.
    Btw nice video, I like how you implement such a useful things.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Thanks! You might be right!

  • @ahsansharif6962
    @ahsansharif6962 3 หลายเดือนก่อน

    i love it , it is very nice but i have one question what if i want to trigger same event multiple times in the same animation for example footsteps in walking animation

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +2

      You can approach this in a few ways. The easiest will be to add an additional State Behaviour component for each event you want (so one for each step). Additionally, I would extend the editor to make the circuit breaker optional because your animation will probably be a looping one, so you could expose a checkbox to the inspector to allow for that and update the code slightly.
      Alternatively you can extend the component to handle multiple events at once, which isn't too challenging but remember to add some extra functionality to the preview to make it display correctly depending on which slider you are adjusting.

  • @isleeg
    @isleeg 3 หลายเดือนก่อน

    The animation preview doesn't work when I tried it with a synth character and with the RPG Tiny Hero Duo characters. It works fine when using the RobotKyle.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Try commenting out 'AnimationMode.StopAnimationMode();' in the PreviewAnimationClip, maybe it's getting turned off prematurely.

    • @bekpsmith7686
      @bekpsmith7686 4 วันที่ผ่านมา

      @@git-amend Yes this works. Also Add the AnimationMode.StopAnimationMode() to the Stop Preview button

  • @ИванЛашин-и7и
    @ИванЛашин-и7и 3 หลายเดือนก่อน

    Nice. But I have question:
    What wil be if i try use few AnimationEventReceiver on same animator state? Will collision be with prevew buttons?
    In total, it is interesting solution.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Well, the AnimatorEventReciver goes on the GameObject in the scene, but you must mean the StateMachineBehavior class. This works fine with multiple instances, but if you enable 2 Preview buttons at once, only the first one you activated will show the preview in the Scene view. You could add some extra code that would disable the other buttons if you wanted, or just use them one at a time.

  • @あれくす
    @あれくす 2 หลายเดือนก่อน

    I get an error, "the playable graph is null." Why?

  • @robb929
    @robb929 3 หลายเดือนก่อน +1

    The worst thing about Unity animation events is the use of magic strings. I think it's better to replace them with enums.

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Yes, not a bad idea at all.

  • @Danyanyanyanya
    @Danyanyanyanya 3 หลายเดือนก่อน

    Cool thing, but events didn't invoke when triggerTime is 1 or very close to 1

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      Well, at 100% there are no more frames in the clip to process. Can restrict the Range if that helps you, or even better would be to fire the event in OnStateExit if you need it to be at the very end of the clip (for non-looping clips)

  • @nullx2368
    @nullx2368 3 หลายเดือนก่อน

    This system is decent but it still feels meh, still one of the best solutions that we can do :( it really borthers me how unity didnt put some work in improving eventing during animations 😄 im curious how other engines deal with this, and if its better work flow

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      I'm not sure exactly what other engines do, but Unity's system of attaching their AnimationEvents as data within each AnimationClip does seem a bit short sighted. Unfortunately, it's probably also difficult for them to change now.

  • @ANU_CHEEKI_BREEKI
    @ANU_CHEEKI_BREEKI 3 หลายเดือนก่อน

    how about create event in Animation importer? already preview there. And no need to do any extra work

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      I want to associate events with animator states for an improved workflow where I have full control and am not locked into what's set in the animation itself - and I want it to be extensible to handle more options in the future.

    • @puretrack06
      @puretrack06 3 หลายเดือนก่อน +1

      The challenge comes when you have multiple events per animation. I am working on a hack and slash DMC like game. Each attack animation has VFX event, SFX event, Start/stop damage events, Start/Stop Invincible events at minimum. All of these can added in importer however they start to become a pain when they overlap one another.

  • @pixeldustinteractive
    @pixeldustinteractive 3 หลายเดือนก่อน

    hmmm... what's the advantage of this over just going to the import of the animation and setting the event there?

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      For me, the main advantage of using this system over setting events directly in the animation import is that it allows separation of concerns by keeping event logic outside of the animation asset itself. For example, this allows you to reuse the same animation clip across multiple characters or states while customizing the events for each scenario, without duplicating or altering the original animation asset.

    • @pixeldustinteractive
      @pixeldustinteractive 3 หลายเดือนก่อน

      @@git-amend fair enough! I do like the fact that there are no magic strings to deal with if you set it up correctly

  • @YoutuberUser000
    @YoutuberUser000 4 วันที่ผ่านมา

    So just making sure, does this allow for mutiple events on the same state because for my weapons like reload animation i have events for all the different sounds. So would this work or should i stick with the default way of anim events?

  • @SeverskiyS
    @SeverskiyS 3 หลายเดือนก่อน

    And you can click on fbx file and add animation events thru it's inspector. And even select the event time by viewing animation.
    Or this method has some downsides?

  • @RoxGame
    @RoxGame 3 หลายเดือนก่อน

    Nice job !

    • @git-amend
      @git-amend  3 หลายเดือนก่อน

      Thank you! Cheers!

    • @RoxGame
      @RoxGame 3 หลายเดือนก่อน

      @@git-amend Hi , could you check why my previous comment didn't appear !

    • @git-amend
      @git-amend  3 หลายเดือนก่อน +1

      No comments have been held for moderation, so I'm not sure...

    • @RoxGame
      @RoxGame 3 หลายเดือนก่อน

      @@git-amend That is weird ! Thank you for cheking