x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

AnimMontage for melee combo.

I have many animations of melee attacks. I have all of them in one AnimMontage. I would like to play the first animation, then if the player presses again the attack button playing the next one and so on, otherwise stop the AnimMontage from playing.

If I play an anim montage this way:

 return GetPawnMesh()->AnimScriptInstance->Montage_Play(AnimMontage, InPlayRate);

How can I set what section to play each time on that AnimMontage and what can I set to stop it? I have created a TestAnimMontage similar to the one I can see here:https://rocket.unrealengine.com/docs/ue4/INT/Engine/Subsystems/Animation/AnimMontage/index.html. But I need to handle everything from code (if it is possible).

Product Version: Not Selected
Tags:
more ▼

asked Mar 11 '14 at 02:40 AM in C++ Programming

avatar image

ue4-archive ♦♦ STAFF
50k 3670 2000 9124

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

AnimInstance.h

To do really fancy stuff and make your own modified anim montage playing code,

You should

  • extend your own anim instance from UAnimInstance

  • reparent your animation blueprint to use your anim instance

  • check out these awesome functions!

    Functions of Great Pertinence

AnimInstance.h

 /** Makes a montage jump to a named section. */
     UFUNCTION(BlueprintCallable, Category="Animation")
     void Montage_JumpToSection(FName SectionName);
 
     /** Makes a montage jump to the end of a named section. */
     UFUNCTION(BlueprintCallable, Category="Animation")
     void Montage_JumpToSectionsEnd(FName SectionName);
 
     /** Changes the next section in the montage to a different one. */
     UFUNCTION(BlueprintCallable, Category="Animation")
     void Montage_SetNextSection(FName SectionNameToChange, FName NextSection);

 /** Returns the name of the current animation montage section. */
     UFUNCTION(BlueprintCallable, Category="Animation")
     FName Montage_GetCurrentSection();

:)

Also, you can get and set exact positions as well!

 /** Get Current Montage Position */
     float Montage_GetPosition(UAnimMontage* Montage);
     /** Has Montage been stopped? */
     bool Montage_GetIsStopped(UAnimMontage* Montage);
 
     /** Set position. */
     void Montage_SetPosition(UAnimMontage* Montage, float NewPosition);
 
     /** Get PlayRate */
     float Montage_GetPlayRate(UAnimMontage* Montage);
 
     /** Set PlayRate */
     void Montage_SetPlayRate(UAnimMontage* Montage, float NewPlayRate);
 
     /** Get next sectionID for given section ID */
     int32 Montage_GetNextSectionID(UAnimMontage* Montage, int32 CurrentSectionID);

more ▼

answered Mar 11 '14 at 02:40 AM

avatar image

ue4-archive ♦♦ STAFF
50k 3670 2000 9124

avatar image ue4-archive ♦♦ STAFF Mar 11 '14 at 02:40 AM

Thanks, I'll start playing with them.

After having done all those steps can the general idea be:

  1. The input makes the AnimMontage to start playing

  2. The next input of the player calls JumpToSection to play the next attack animation inside the AnimMontage

  3. In case I have to stop the combo I use JumpToSectionsEnd.

As Montage_JumpToSection doesn't take a AnimMontage as a parameter I suppose it is performed on the currently active AnimMontage. Isn't it?

I am trying in this way just to run a test before start implementing my own code but I can't switch section. Is my idea of playing the montage and then changine section wrong?

 UseMesh->AnimScriptInstance->Montage_Play(AnimMontage, InPlayRate);
         FName name("Swing1");
         UseMesh->AnimScriptInstance->Montage_JumpToSection(StartSectionName);




avatar image ue4-archive ♦♦ STAFF Mar 11 '14 at 02:40 AM

you are going to have to experiment and find out for yourself, I've not used these functions in depth yet.

If you encounter a specific issue that seems like a bug let us know!

Rama

avatar image ue4-archive ♦♦ STAFF Mar 11 '14 at 02:40 AM

well im not sure if it is a typo in your copy pasting

but this

 FName name("Swing1");
        UseMesh->AnimScriptInstance->Montage_JumpToSection(StartSectionName);

should definitely be this!

 FName name("Swing1");
        UseMesh->AnimScriptInstance->Montage_JumpToSection(name);

avatar image ue4-archive ♦♦ STAFF Mar 11 '14 at 02:40 AM

No, it was actually an error!!! I was passing another variable to it. Currently I am using it and it seems to work well. I'll experiment a little with all the other functions.

Thanks.

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question