Announcement

Collapse
No announcement yet.

Able Ability System Info and Support Thread

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #31
    Howdy, I'm having an issue playing an animation using the Ability Animation Node, on an ability that IsLooping, and Channeled indefinitely.
    (The idea is to have an ability perform a block with a corresponding block_loop animation)

    I followed the tutorial listed here and that works,
    but If I try to do a Layered Blend Per Bone, or play any other animation that isn't the "Play Ability Animation" node, I always get a pop/stutter of the final animation.

    Am I doing something incorrectly?

    Comment


      #32
      Originally posted by Hitsugen View Post
      Howdy, I'm having an issue playing an animation using the Ability Animation Node, on an ability that IsLooping, and Channeled indefinitely.
      (The idea is to have an ability perform a block with a corresponding block_loop animation)

      I followed the tutorial listed here and that works,
      but If I try to do a Layered Blend Per Bone, or play any other animation that isn't the "Play Ability Animation" node, I always get a pop/stutter of the final animation.

      Am I doing something incorrectly?
      I'd be curious to see your Animation State Machine as that is likely where the pop is occurring. However, there's another approach you may want to try that I personally use in situations like the one you described:

      When doing Looping animations (blocking, jumping/falling, etc), I've found the best way to control those is to break out your animation in 3 separate clips (start, loop, end) and setup a simple flow in your Animation State Machine like this:
      Code:
      Check some state -> Transition to the start animation -> Once that animation is done -> Transition to the looping Animation -> Loop until the State becomes False -> Transition to the end animation.
      Which looks like this in the actual Animation State Machine/Blueprint (in this setup, it's for a greeting animation which has a start - lifting the arm, a middle - looping waving animation, and an end - lowering the arm):
      Click image for larger version

Name:	LoopAnim1.png
Views:	1
Size:	60.3 KB
ID:	1126895
      (Note the IsGreeting boolean on the starting transition rule which is just read from the Character during the Animation Blueprint's update).

      Start to Loop Transition Rule:
      Click image for larger version

Name:	LoopAnim2.png
Views:	1
Size:	57.4 KB
ID:	1126896

      Loop to End Transition Rule:
      Click image for larger version

Name:	LoopAnim3.png
Views:	1
Size:	64.7 KB
ID:	1126897

      Then all you have to do in Able is use a Custom Event Task(or on AbilityStart/End), and simply set the state on/off on your character which is then read by the Animation blueprint and reacts accordingly.

      Ideally I'd love to data drive this aspect (probably through a custom Animation State Machine Node like Play Ability Animation Node), but the use cases have been pretty limited/special case which you normally want to customize things anyway. Still, might be something fun to look into adding even if it isn't necessarily Able specific.
      Able Ability System - A high performance, robust ability system for UE4. Now Available!

      Comment


        #33
        Originally posted by ExtraLifeMatt View Post
        So going forward I'm planning to do a weekly video that answers/does a tutorial using questions from the community. The YouTube comments have given me a few topics to cover, but if there if you have a question, or want to know "How can I do X in Able?" then please post your question here and I'll add it to my list.
         
        Spoiler



        How can i do a sailing system in able? i've seen many sail boat/ship project, but any with a character moving the helm like many people did with their driving systems/car controller (Assassins creed 4 Black Flag, like. in third person).

        PD: i know is quite complex, but just the sailing, without the physics, etc.. the real question is how can i sail a ship?
        Last edited by Neff10; 07-08-2017, 05:21 PM.

        Comment


          #34
          Sailing is effectively it's own game in Black Flag. Rather than controlling the player, you are controlling a ship and passing in various data to your animation system so he spins the wheel properly, etc. That requires its own code/systems, something like that is outside of Able's scope. Although once you have the ship controls all setup, you could use Able to fire Cannons and other things.
          Able Ability System - A high performance, robust ability system for UE4. Now Available!

          Comment


            #35
            Apologies for the lack of thread updates, I was out at a developer conference this week. Looks like v1.3 is now live. Let me know if you run into any issues and, as always, thanks for your support!
            Able Ability System - A high performance, robust ability system for UE4. Now Available!

            Comment


              #36
              Hi ExtraLifeMatt,

              I have some questions about using the plugin. I have a Blueprint/C++ project for a game that I'm working on for my studio. I've downloaded Able, copied the plugin folder to my project's plugin folder, and enabled it. I've created some DataAsset classes that our designers can use to create data assets for items and what-not. What I'm wanting to do is for our designers to add activated and passive abilities (created with Able ) to a data assets for an item (or whatever else I add it to), and I can't quite figure it out. Unfortunately, your C++ docs aren't up yet. Here's what I'm getting at:

              Code:
              #include "Engine/DataAsset.h"
              #include "ablAbilityBlueprint.h"
              #include "ItemData.generated.h"
              
              /**
               * 
               */
              UCLASS(BlueprintAble)
              class SAVAGEDAWN_API UItemData : public UDataAsset
              {
              	GENERATED_BODY()
              
              	public:
              		// Property for the name of the item
              		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General")
              		FString Name;
              
              		// Property for a description for the item
              		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General")
              		FString Description;
              
              		// Property for an icon to represent the item
              		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General")
              		UTexture2D* Icon;
              
              		// Property that indicates if the item is consumable
              		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Usage")
              		bool IsConsumable;
              
              		// Property that indicates if the item is equippable
              		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Usage")
              		bool IsEquippable;
              
              		// Property that contains a list of activated abilities
              		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Abilities")
              		TArray<UAblAbilityBlueprint*> ActivatedAbilities;
              };
              Currently, this doesn't work. How can I design my classes so that designers can add Able abilities that they've created to them?

              Thanks

              Comment


                #37
                Hey [MENTION=712697]danhin[/MENTION]

                Try using:

                Code:
                TArray<TSubclassOf< UAblAbility> > ActivatedAbilities;
                Since they are simply classes under the hood. I'm not sure you can use a UDataAsset to point to a runtime UObject, but the class info is serialized and should be fine. Looking at other examples in the engine, that seems to be how they work around this.

                Also, Version 1.4 has been submitted:

                - Fix to various Task fields not being modifiable in 4.15.x (seemed to only affect object references).
                - Fix to OnAbilityStart not being called properly.
                - Fix to "Recently Pressed" Branch Condition not working properly (now you can specify a time window for what recently pressed means).
                - Able now is initialized in the PreDefault phase to avoid race conditions with Actor initialization.
                Last edited by ExtraLifeMatt; 05-09-2017, 09:40 PM.
                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                Comment


                  #38
                  Hi [MENTION=262655]Extra[/MENTION]LiftMatt,

                  Thank you for your response. What class should I use to refer to an ability asset that's created with the plugin? In other words, the designer creates an ability in the content browser and wants to add it to a data asset.

                  Thanks.

                  Comment


                    #39
                    Originally posted by danhin View Post
                    Hi [MENTION=262655]Extra[/MENTION]LiftMatt,

                    Thank you for your response. What class should I use to refer to an ability asset that's created with the plugin? In other words, the designer creates an ability in the content browser and wants to add it to a data asset.

                    Thanks.
                    Use:
                    Code:
                    TSubclassOf<UAblAbility> MyReferencedAbility;
                    That's actually how the Play Ability Task works under the hood. Since they're all classes under the hood, you can just reference your Ability that way.
                    Able Ability System - A high performance, robust ability system for UE4. Now Available!

                    Comment


                      #40
                      Hey Matt,

                      Wanted to report a bug with the "Must Be Recently Pressed" flag on a Branch Task's Conditions.
                      I setup two abilities that call each other, and bound them to the left mouse button, and when I hold it, it calls each ability repeatedly.

                      Here's some screenshots of my setup:
                      character_input_setup
                      Ability 1 Setup
                      Ability 2 Setup
                      Ability 1 Custom Event
                      Ability 2 Custom Event

                      Comment


                        #41
                        Originally posted by Hitsugen View Post
                        Hey Matt,

                        Wanted to report a bug with the "Must Be Recently Pressed" flag on a Branch Task's Conditions.
                        I setup two abilities that call each other, and bound them to the left mouse button, and when I hold it, it calls each ability repeatedly.

                        Here's some screenshots of my setup:
                        character_input_setup
                        Ability 1 Setup
                        Ability 2 Setup
                        Ability 1 Custom Event
                        Ability 2 Custom Event
                        Thanks for the heads up, I'll look into this and let you know what I find.

                        EDIT: [MENTION=29343]Hitsugen[/MENTION], Looks like the call into PlayerInput that condition uses wasn't working as expected. I've gone ahead and changed the logic up a bit under the hood so now it uses the key time down and allows you to specify a time window (in seconds) that defines what "Recently Pressed" means, so it's a bit more flexible as well. v1.4 hasn't gone out yet so I'm hoping I can sneak this change in, otherwise it'll be in v1.5.
                        Last edited by ExtraLifeMatt; 05-09-2017, 09:24 PM. Reason: Updated with findings.
                        Able Ability System - A high performance, robust ability system for UE4. Now Available!

                        Comment


                          #42
                          Hey [MENTION=172958]ExtraLifeMatt[/MENTION],

                          Thanks for the help. Using the declaration below worked:

                          Code:
                          TArray<TSubclassOf<UAblAbility>> ActivatedAbilities;
                          Now, i'm having some trouble with the Let's Party tutorial. First, finding the asset files was a challenge (there's a showcase link on the Marketplace page). My problem happens when trying to add the particle effect to the Play Particle Effect task (the same is true for the Play Sound). The field where the asset is dropped in is grayed out with the message "Editing this value in a Class Default Object is not allowed." Is there a configuration step that I missed, or am I doing something wrong?

                          Thanks.

                          Comment


                            #43
                            Originally posted by danhin View Post
                            Hey [MENTION=172958]ExtraLifeMatt[/MENTION],

                            Thanks for the help. Using the declaration below worked:

                            Code:
                            TArray<TSubclassOf<UAblAbility>> ActivatedAbilities;
                            Now, i'm having some trouble with the Let's Party tutorial. First, finding the asset files was a challenge (there's a showcase link on the Marketplace page). My problem happens when trying to add the particle effect to the Play Particle Effect task (the same is true for the Play Sound). The field where the asset is dropped in is grayed out with the message "Editing this value in a Class Default Object is not allowed." Is there a configuration step that I missed, or am I doing something wrong?

                            Thanks.
                            Yea, that's a bug that came in with 4.15.x somehow. It's fixed in the 1.4 update that should be going out soon.
                            Able Ability System - A high performance, robust ability system for UE4. Now Available!

                            Comment


                              #44
                              Originally posted by ExtraLifeMatt View Post
                              Thanks for the heads up, I'll look into this and let you know what I find.

                              EDIT: [MENTION=29343]Hitsugen[/MENTION], Looks like the call into PlayerInput that condition uses wasn't working as expected. I've gone ahead and changed the logic up a bit under the hood so now it uses the key time down and allows you to specify a time window (in seconds) that defines what "Recently Pressed" means, so it's a bit more flexible as well. v1.4 hasn't gone out yet so I'm hoping I can sneak this change in, otherwise it'll be in v1.5.
                              Thanks for checking it out Matt

                              Comment


                                #45
                                Just a heads up, as of v1.4, you should really be on 4.15.2 if you are using 4.15. Epic is starting to require 4.15.x plugins to use 4.15.2 if they have Mac as a target platform due to an XCode issue that requires 4.15.2 to build properly. v1.4 of Able hit a slight road bump due to that new requirement, but it's been submitted so assuming Mac is building again it should go out hopefully in the next day or so.

                                Locally, this didn't require any code changes so if you are on any other platform and using 4.15.0/1 - it *should* be fine. But, just know I've had to update my local environment and so that's what I'll be testing on going forward.
                                Able Ability System - A high performance, robust ability system for UE4. Now Available!

                                Comment

                                Working...
                                X