Fab Marketplace - https://www.fab.com/listings/bb06916a-cb63-41c5-aad7-b54b5b01a320
Unity Asset Store - not available
Demo Build - https://vanillaloop.com/demo-project
Features:
Number of Blueprints: 17
Input: (Keyboard, Mouse)
Network Replicated: Not Tested
ABP created only for the UE5 Mannequin skeleton.
This package categorizes animations as follows:
Cover stand (CoverHi): 121
Cover crouch (CoverLo): 121
Total Animations:
Root Motion: 121
In Place: 121
Retargeting:
Animations retargeted for Unreal skeleton.
Rigging & Skeleton:
Rigged to Epic skeleton: Yes
IK Bones Included: Yes
Animation Count:
Root Motion: 121
In Place: 121
Animation Types:
Root Motion & In Place
Characters:
1 character SK_Mannequin UE5
Supported Platforms:
Windows: Yes
Mac: Yes
Source Files:
Included - Downloadable from the Additional Files section on the Fab.com website. Includes .fbx files for direct import and MotionBuilder files for editing in any 3D software.
Migrate Logic to your project
Enable the Motion Warping
Copy Custom Data
Setup Cover animations
Create custom Anim Slot
Setup custom structures to store animations
Recompile custom Data Assets
Add necessary logic to Pawn
Add events in the character’s ABP for custom Anim Notifies
Hints For Custom Modifications
Credits
The proposed sequence of steps will allow you to copy the basic CoverSet logic into your project.
Make sure the CoverSystem project UE version is identical to your project UE version. This is necessary to carry out the asset migration process according to the given steps.
It uses Root Motion solution!
In this solution Motion Warping is used to snap the pawn’s root to the obstacle while moving across. You can find details in the Epic’s documentation : https://docs.unrealengine.com/5.0/en-US/motion-warping-in-unreal-engine/
Open your project in the UE editor.
Go to Edit -> Plugins.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjODFhOWMxOS0zNzk0LTQ3YzUtYTFhNi0wZGIwZDI5ZDhkNmEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.QE0SiNTodhtW36Zfmzz2inKCbneoRLZQnSIN7fSUYn8)
Enable Motion Warping plugin.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3ZTJhZTFjYy1iOTM5LTQyYmItODNjNy0wN2I4MDQ3N2VlNTYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.6gzLLgluIRGaGpmds0gCGsPJc4gB6Qphzfv9GmsHtNc)
Restart the editor.
Go to Edit -> Plugins again and check if the Motion Warping plugin is enabled.
Close the editor with you project.
This step uses the migrate action available for .uassets. This speeds up the process of migrating assets between UE projects.
To be able to migrate assets, it is important to set the folder properties of your project correctly.
To do this, follow the steps below:
If you still have your project open in the UE editor, close it.
Open File Explorer.
Navigate to the main folder of your project.
Right-click on this folder and open Properties.

Make sure the read-only checkbox is unchecked.

Press the Apply button and then Ok.
Open the CoverSet project in the UE editor.
Open ContentBrowser.
Navigate to the CoverSet folder.
Right-click on this folder and click on Migrate.

Select folders and assets as in the image below.
Due to the fact that UE 5.3 template projects use EnhancedInput as the default input handling solution, but in earlier versions it is Binding in the Project Settings, this step of the migration process depends on the input you have in your project.
For UE projects using EnhancedInput

For UE projects using Binding Input in Project Settings

Click Ok button.
File Explorer should appear so you can select your project folder. Be sure to select the Content folder (otherwise the migration will fail).
Now you should have the following folders and assets in your project folder visible in File Explorer.


Open you project in the UE editor.
Click Fix Up Redirectors in Folder on the folder to which you migrated the data in an earlier step.

The following setup needs animations from RootMotion. Make sure you use the correct ones dedicated to this solution (”…\Content\CoverSet\Animations\Mannequin\RootMotion”).
Anim Notifes are used to handle events in a specific animation frame or animation time range. You can read more in the Epic’s documentation: https://docs.unrealengine.com/5.0/en-US/animation-notifies-in-unreal-engine/
Open the skeleton of the character you are adapting this solution for. If you are using the template UE project, this will probably be SK_Mannequin.
Right-click on a free space in the Animation Notifies tab. You should see a context menu for creating new anim notifies.

Click New… and add all of the following names. You will use them later in the setup of some cover set animation sequences.
*Cover_EnableCoverSnapRotation*
*Cover_EnableCoverInput*
*Cover_EndLook*
*Cover_SetForcedIdleState*
*Cover_EndThroughObstacles*
*Cover_EndHighLowTransition*

.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjN2YyOGNmYS1kMmJjLTQ1M2QtYTZkMi1lNjZiZjQ1ZDcxMjYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.TOXo2J75OowMQNzYehqx0sJ8HwmwzfL3KbfkYtQ_hok&preview=m)
Save the skeleton asset.
More information about animation slots are here: https://docs.unrealengine.com/5.0/en-US/animation-slots-in-unreal-engine/
Open your character ABP.
Go to Window→Anim Slot Manager.

Press Add Slot in the Anim Slot Manager.

Type CoverAdditionals in the pop-up and press enter.

You should see new CoverAdditionals anim slot on the list.

Set this slot in the AnimGraph.

Compile and save your ABP asset.
The proposed CoverSet mechanic uses custom Anim Montages for two cases:
playing animations of passing through obstacles,
looking up from behind the wall.
In Content Browser navigate to the folder with RootMotion animations: (”…\Content\CoverSet\Animations\Mannequin\RootMotion”).
Right-click on the content free space and press the Animation→Anim Montage.

Select the skeleton you are using.
Give your new asset name AM_CoverHi_L_Through_Obstacle and open it.

Open this Anim Montage.
Change default anim slot to the CoverAdditionals.

Drag and drop A_CoverHi_L_ThroughObstacle from the Asset Browser to the anim montage track.

Save this anim montage.
Repeat steps 2-8 for below anim montages names:
AM_CoverHi_R_Through_Obstacle (drag and drop A_CoverHi_R_ThroughObstacle)

AM_CoverLo_L_Through_Obstacle (drag and drop A_CoverLo_L_ThroughObstacle)

AM_CoverLo_R_Through_Obstacle (drag and drop A_CoverLo_R_ThroughObstacle)

You should have new, 4 Anim Montages for passing throug obstacles.

Now create Anim Montages for looking up. Right-click on the content free space and press the Animation→Anim Montage again.
Rename new Anim Montage with AM_CoverHi_Look_Center_L.
Open this Anim Montage (AM_CoverHi_Look_Center_L).
Change slot anim group to the CoverAdditionals.

Drag and drop A_CoverHi_Look_Center_L_Start to the anim track.

Drag and drop A_CoverHi_Look_Center_L_Loop to the anim track next to the previous anim sequence.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjOTI0MTU3OS1kOTE3LTQwYTUtODk4MC00NzEyYzEwYzRiMTMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.LwOihD0HkyB4JDDXMAnkDjQdgQndM0SjwRfVv8I30iM&preview=m)
Drag and drop A_CoverHi_Look_Center_L_End to the anim track next to the previous anim sequence.

Right-click on the free space in the section tracks to create a new section.

Create Loop anim section on the 45 frame.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNGM5ZTBiYS1mODc0LTQ3ZmItYWI3Mi05N2Y2N2UzOGU3YjAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.nw4q4a34HfyCZAfOZy19E5VWudThGcG7gm89CzQyNNM&preview=m)
In the same way, create an End section on the 126 frame.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiYzdiZmVjYy1lMmM4LTQ3MjAtOTdhZS0xMjU3MjZkMmNkNjAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.2fWp4p9D1_6G9AIMGMoKuSYRZhJvao1_G3XRU1FpV7g&preview=m)
Go to the Montage Sections tab. Press the arrow between Loop and End section. Choose the Loop option.

Your AM_CoverHi_Look_Center_L should it should look like this:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMjM0NmRjNC1kY2RmLTRmZDItYTI0OC04ZGZhMzE0ZTcyMWYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.165j4xE4TBJoIjea_lzc_tRIaod_VHMEh6tZYFT8LGA&preview=m)
Repeat steps 11-22 for the following combinations:
AM_CoverHi_Look_Center_R:
- Default section: A_CoverHi_Look_Center_R_Start
- Loop section (frame 40): A_CoverHi_Look_Center_R_Loop
- End section (frame 121): A_CoverHi_Look_Center_R_End

AM_CoverLow_Look_Center_R:
Default section: A_CoverLo_Look_Center_R_Start
Loop section (frame 35): A_CoverLo_Look_Center_R_Loop
End section (frame 106): A_CoverLo_Look_Center_R_End
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0Mjk3ZTYxMi0zZDM1LTRjYTUtYjZmYy1jYmZjMzk5YWM1YjciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.ro96OEkdXaW8nXxsI7B9DrDh6mPRxr5bZbI8ytW437s&preview=m)
Finally, you should have 8 new Anim Montages as shown in the image below:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyYzVjZTJiYi01N2FmLTQ3OGEtYjg0MC03MTA2ZWU5ZDE4ZjIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.w3Qh0vXOui8ADM-4H0YBBKpcm9MNAt0WmGZqpq0QrD0&preview=m)
Here you created custom anim notifies. Now you need to set them in few animations.
Open A_CoverHi_L_ThrowBait.
Optionally, you can change default notify track name from 1 to CoverNotifies.

Righ-click on the free space in the Notify track.
Add CovetSet_EnableCoverInput anim notify **on the 50 frame.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyNjE3YzYxYi1kMzQ2LTRjYWQtOTg1Ni00ZDBjMTNiODJjMjIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.UrclcTrFSF-oB5xQzDh51MPt_l_sXdhsAKPz9uFgBTM&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3ODA3ZTU2ZC02ZDgzLTQxNWUtYmY4Yy0zOTdlZjdhMmY0NGUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.YdQvMaGuldfZBZXPDfQmJPXHNUESK595eMU4G0PTeDg&preview=m)
Repeat adding the appropriate notifications according to the list below.
A_CoverHi_L_ThrowBait
Cover_EnableCoverInput (frame 50)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2YjY3OGM4YS04ODhkLTQ3YWMtYjI3Ny01NzgwODg1N2Y1ZmQiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.cIogmRBs-jCsXT86qw4Oc1u8DR-c544tSu8cz5kMero&preview=m)
A_CoverHi_R_ThrowBait
Cover_EnableCoverInput (frame 50)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjYTUwMzJhMy1iNDc5LTRlZmQtYjU2Zi1lZjBjYWQ3NmRlZDEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.nBEykZbXIRe7UtznPHqeRH80q3Z-UyIKzhCyKix5MJk&preview=m)
A_CoverLo_L_ThrowBait
Cover_EnableCoverInput (frame 40)

A_CoverLo_R_ThrowBait
Cover_EnableCoverInput (frame 35)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NWRlMzNjMS0wM2QwLTQwOTctYjJjMS00YmM1ZTk5OWEyZjMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.RRtFkycsiGj56UAk3mVK9IEkG4GZiQIF9aC3UuQZ3VQ&preview=m)
A_CoverHi_L_to_CoverLo_L
Cover_EndHighLowTransition (frame 40)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmMWUwNTMwMi01NTZmLTQwY2MtYTliNC01NTk5MDgxNGI5YjIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.-LT8j27OtJi6hOm9sIp4lpFrB-p3YMF5quxb-Sbu8Pk&preview=m)
A_CoverHi_L_to_CoverLo_R
Cover_EndHighLowTransition (frame 60)

A_CoverHi_R_to_CoverLo_L
Cover_EndHighLowTransition (frame 50)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4M2NkZjQ5ZC03YTViLTQ2ODktYTFhNS01MTEyODBhZTRhYTciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.QBNp9AUq64BHQ-PrTAlbboZL_Tzp3rFLA99LBkAlYEA&preview=m)
A_CoverHi_R_to_CoverLo_R
Cover_EndHighLowTransition (frame 35)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiMWQ5MDU0Yi1kNTEzLTQ0OGMtOTA1Yy0wZmI2YjRmMzYwMTkiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.FmYwyYh-f7uBiko1po7ehvJ-QbfNoS_qEN9-oZA-khc&preview=m)
A_CoverLo_L_to_CoverHi_L
Cover_EndHighLowTransition (frame 50)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyNmU3ZjcwOS0wYzI0LTQ4NzAtYTdjZi1hYzlhYjAxZDRiYzciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.yqO5MLaXCihQRGUfB4wFjL_VssSlw29iq7luRUI951A&preview=m)
A_CoverLo_L_to_CoverHi_R
Cover_EndHighLowTransition (frame 30)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlZjM2OWE0ZC1lYmY0LTQ1MjUtOTJkYy0yZDQxMDQ4OGFkOWEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.rnX8_N9idZDnX6LATiZaQvMuTvOebKo2iP8dJPT8DbA&preview=o)
A_CoverLo_R_to_CoverHi_L
Cover_EndHighLowTransition (frame 27)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiMDJkYTdmNi0yOWQzLTRiNjgtODVmNy05MGJlZDNjYWI4ZjYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.HDp-FqreW-pJav9g5H7gQFzXNWBZp5fu0z0t-EuC83o&preview=o)
A_CoverLo_R_to_CoverHi_R
Cover_EndHighLowTransition (frame 56)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNDMwMDAzMy00ZDJiLTQxODYtYjI4Yi05ZGIwMjkyOWI5YTMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.nmV2t3fmlN2FKwxpshKJP0OadoZ4i5JChB_fsFehX6U&preview=m)
A_CoverHi_Walk_L_Stop
Cover_SetForcedIdleState (frame 30)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxZjUwNDA3OS1hNGRkLTQ5ZjItODExZS00ODI2ODI4MzU0NjAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.ZHzXO56uz8Zz4WoxvTR0v-1p4ZS1wALAaZ43u0irzG8&preview=m)
A_CoverHi_Walk_R_Stop
Cover_SetForcedIdleState (frame 30)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5ZGYzNzYxNC0xY2Q2LTRiZjEtOGUyNC0zMDc3ZjhkNjFhOGIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.WeOcss5dAJp-MZtBcSK3r7Qa3EGXYzsjUm9nVdPfMCg&preview=m)
A_CoverLo_Walk_L_Stop
Cover_SetForcedIdleState (frame 45)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MWYxM2NiMC1kNDc1LTQzODMtYjRjOC04OGU1MjFkMzFkZWUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.PqjL9ZyX8spkiyEGpyt05mJuD2jHuMnvhhlxZwsruek&preview=m)
A_CoverLo_Walk_R_Stop
Cover_SetForcedIdleState (frame 50)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2YjMxZWVmYi1kOGVmLTQ2NzgtOWQ0NS1kNDhkYjcwOGVlNDciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.mARSWWEDxj5CLqYE9d8KjjHQIzpOPU4tzte85qmQRLk&preview=m)
A_Idle_to_CoverHi_L
Cover_EnableCoverSnapRotation (frame 25)
Cover_EnableCoverInput (frame 42)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxZTYxNDg3MC1iODBiLTQ5MzItYTdlYi0zN2U4ZTU1NmE3ZGIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.jUKiLp0VSpN0cz_1uHDlbMrY207IrifZHb2BcxAYubs&preview=m)
A_Idle_to_CoverHi_R
Cover_EnableCoverSnapRotation (frame 20)
Cover_EnableCoverInput (frame 50)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlOWY1OTExMC1jNmMwLTRjYmMtOTRiMi1iNDQwOGEzYWYxNTciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.wy9PBpYBUHIo9WDrr_-9TxHJjUrvgeKQJAQH8vbxlcc&preview=m)
A_Idle_to_CoverLo_L
Cover_EnableCoverSnapRotation (frame 20)
Cover_EnableCoverInput (frame 58)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5YzQyYTM0Yy1jZmM3LTRhNjEtODU4Ni1lZTU1MDllNjRiOWEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.6t82Dm_xwaamDE12s9A1TylaRuyo0Vbao0_rbV65VKk&preview=m)
A_Idle_to_CoverLo_R
Cover_EnableCoverSnapRotation (frame 30)
Cover_EnableCoverInput (frame 54)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyZjQ4YjUzZS03ODUzLTQyYTYtOTg2Ni0yMjU2ZWI0MjkzYmYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.x75L6gVn6E-A_Rgea5YtHE6bxE1b5DrL8ZVSCCqZ6vQ&preview=m)
AM_CoverHi_L_Through_Obstacle
Cover_EndThroughObstacles (frame 132)
Motion Warping (Notify Begin : 1.019539, Anim State Duration: 0.663029)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjMmIwNTY1OC1mODNkLTQ2Y2EtYmRhMS01MDAxYzIyMGFjOWYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.q74n9ZnejRgpWddoZVI0-o_RUHR2Hn208G2N0LYxXm4&preview=m)
Click on the Motion Warping anim notify and set Root Motion Modifier in the Details Tab:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlMzlkOGMzZS00YjllLTRjYWEtOGI2ZS1jMjUyZGFkZTMxZTIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.bCAHy3NFIbA-dz_cePcvLKOQKD6N0LTmVKLJWzkJKp4&preview=m)
AM_CoverHi_R_Through_Obstacle
Cover_EndThroughObstacles (frame 125)
Motion Warping (Notify Begin : 0.855249, Anim State Duration: 0.792114)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlYzY2YmY3NC0zM2YxLTRkMjItYjkwMy1jZDFhMmRjNDRiOTYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.0-_fOJ2vJ1Q-jn_TLsxu8xQzlNeqYcz-JRFP6low03w&preview=m)
Click on the Motion Warping anim notify and set Root Motion Modifier in the Details Tab:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlN2RmOGZhMi1kMjBmLTQ4NzYtOWEyYi02YmFhYmZhMjA1NGEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.EXXrFZ3-zQQfNp4wZKZvj6G4H498nMFrAjPrIpC8MtY&preview=m)
AM_CoverLo_L_Through_Obstacle
Cover_EndThroughObstacles (frame 150)
Motion Warping (Notify Begin : 1.019539, Anim State Duration: 0.692366)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyZGE0NjgxZS1lODhjLTQ4MDQtODdlYi04ZGUyY2FjMTcyN2EiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.qf-zZI9PhucfREzpT3VDnR13qy-1iAn7UdmuGNQj0-I&preview=m)
Click on the Motion Warping anim notify and set Root Motion Modifier in the Details Tab:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4ODUzNDJhMi00Y2ZmLTRmNWEtODVkNy01NDdhMWUxMDdkZDAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.uIDjO3G03dBLwvuSypN7_MN8Vq5Qu-MSmPOMaGVueAA&preview=m)
AM_CoverLo_R_Through_Obstacle
Cover_EndThroughObstacles (frame 150)
Motion Warping (Notify Begin : 1.019539, Anim State Duration: 0.692366)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyOWU0YzNhNi05MmU1LTQxNmUtYTRkNy1mMWZmY2E0NWUyMjgiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.nfh1kOB1CeWCwbLtuydFMQ7tn3DxcN_GpozMngM9qBA&preview=m)
Click on the Motion Warping anim notify and set Root Motion Modifier in the Details Tab:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyYmEwNzg5Yy0zYWJhLTRiZDktYjJhOS03ZmQ0Mzk2ZDg1NzEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.6UOsNNUdOEYEYr3uCb8eGLLz61miAUGhV4D6v9wGPyc&preview=m)
AM_CoverHi_Look_Center_L
Cover_EndLook (frame 162)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwOWZmMDc4Ny1iNTAwLTQ2MGEtOWI2Yi1mNGZiY2FjZGExODEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.gZ_Rs1vCQtqhw0SjkmhO3DxgPNpjLSzpucjZsAOcxRw&preview=m)
AM_CoverHi_Look_Center_R
Cover_EndLook (frame 153)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjY2VjNzg0YS00ZTQ0LTRhZDQtOGZkMS1jMGYyNTIzYzE4N2MiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.su5Hjgcfje9TEx1qrCDsbx76wcVeE3MymJt5ya2Om0s&preview=m)
AM_CoverLow_Look_Center_L
Cover_EndLook (frame 140)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNmM3Y2IyOS05ZDkyLTQwY2EtODdkMi1hODIyOWEyMTMyNWEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.-J7_lDESP-aB98ksUNsv4jj755S3ji3wyStCyR2hKIE&preview=m)
AM_CoverLow_Look_Center_R
Cover_EndLook (frame 154)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhOGFhMDdiMi0xMWJmLTRhNjQtYTE3Yy0wZGVlOTA0ZDM5ZjUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.96GG0DRdSOpJJuPbkJFPs_f76nSDHbL8KzRWlbVE28A&preview=m)
There are few custom structures that store references to animations.
Open F_CoverHighAdditionalAnimations and assign animations according to the images below.


.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkYTAzM2M5Yi0zNGJiLTQ3ZjQtODIyMi0yNmZjN2Y4YTU3NGUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.pOMo3m_xa247-BSZtC4vn1NBsZ9OB2N2iH7IydOIxqU)

Open F_CoverLowAdditionalAnimations and assign animations according to the images below.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhMjhhODA0Yi1lZDljLTRmYTAtYTJlYS0xYTI2ZDQ4NWMwZTgiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.aOfAaC6C2EmgM8I911znP4EIsVyGCJrJ6sjYccVvwhw)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiYzFlMTM1MS1jNDVmLTQ4MGYtOGEwOS01ZGMwMzU2NTZmOGIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.GCDSttjh_H6-1x6rpoqsT608t-9Mml9LP0AvjpJ3nPA)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3YWFmZmQ4Ny0wZDZmLTQ3M2QtYWVhZS0wYzFmMGVhZGZjY2QiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.HE79SrhwXmxlCt1aC-kRdJs8QM4uNaqm23EkRS3r7ZU)
Open F_CoverLowAdditionalAnimations and assign animations according to the images below.
There is a custom Data Asset (DA_) which is used by the system to select an appropriate animations.
Open the editor.
Open DA_CoverAdditionalAnimationsBase asset.
Check if animations are assigned in the details panel as in the structures from the previous step.

Click compile.
Save this asset.
Open DA_CoverAdditionalAnimations asset.
Check if animations are assigned in the details panel as in the structures from the previous step.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwZmEzOTQ1My1lNzhlLTQ5NWYtOTk2OS01ZTI0YWQ1MDEwMGUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.iTgu3iXz9k1q-rxIC29n7J-G1wBhXSNZopypQOfLhaE&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhN2NhNzdjMi00NWJlLTRmNTQtYmU1MS0xNjQwZTY0NGI5YmEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.HQjki6aE0SAH4Bk14iErZBarZ1zToAvtpAhrgh_C1Jk&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjYzhhOWZhYy1kNzhhLTQ0NjctYThlYy04MjdkNzY3NjlhZjMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.0_2Yoo_NiLcgV7ukAw4qcLwUrs8rzK5YCrB0fIWDktI&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4NjExMzg1NC1kNmI2LTQ2ZjQtYTk5OS01YzFhNGExYjZkMDYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.UK5KPeAahj1nRrg66XMnYl3btXXyyXT7dkdkhvEZs3U&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MzdlNjc5Mi05NjhiLTQ5MTQtYjg4MC0wNzMwNTg0MmFjZjAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.AlCqO5omAuQAIn70KhPWkIuozmqEjYirz6vRbHMY9Xw&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhMjM3MDJjYi0xZDJmLTRkYWQtYTJjYi00YTI1N2YwMjVmM2MiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.vVemKnF-0z3Brz69jh9ggir35yRfCjhM70iESPibAa4&preview=m)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzZTU3MTJkNi1kNzU4LTQ1NzAtOTZiMC0wYTdiMWY1YzhiYWMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.pvca2HQ7JYLK85DLRr1nLjaEB96oKgQJtfTYPLIsQTc&preview=m)
Save this asset.
Custom sockets are used to track and detect walls and obstacles.
Open the skeleton of the character you are adapting this solution for. If you are using the template UE project, this will probably be SK_Mannequin.
Right-click on a root in bones hierarchy tree and press Add Socket.

Add sockets as per the images below. Pay attention to their location in the Details panel. Make sure the rotation of all custom sockets is zero.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2U1OTVmOS1kNDc3LTRlYTktYWFlOC04ODJiYzQyNzZjYTUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.wBTlqtE8Ga0Gv_BajgoeTVhB5cPsOaMexu9a5RSh5sA&preview=m)
LookAimRight
Location: (-55.0, 0.0, 53.601317)
LookAimLeft
Location: (55.0, 0.0, 53.601317)
WallCoverHighCheck
Location: (0.0, 0.0, 130.457701)
WallForwardCheck
Location: (0.0, 14.462126, 64.098026)
WallCornerCheckLeft
Location: (-40.0, 0.0, 50.0)
Save the skeleton asset.
Open the pawn you are adapting this solution for. If you are using the template UE project, this will probably be BP_ThirdPersonCharacter.
AC_CoverComponent is a dedicated actor component that needs to be added to your Pawn. It does all the calculations to CoverSet and manages the logic.
Add AC_CoverComponent.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmMTZhM2JjNi04Mjc2LTQ5ZGItYWMxZS1hMThiY2JiNDUyYzMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.JGYBJ6WMS8xLE90A620VvXLdtYmyfts6R6mkuE1IJo8)
Compile and save the Pawn.
As mentioned earlier, Motion Warping is used to play passing obstacles animations.
Add Motion Warping.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4MmRhYjJhMS0yZDYwLTRkZmUtYTE3Ni03MzNlODViMmEyYTAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.YQfI1zoPM06DhBqYnP4BxTJYHYfxDR0rwWaz1hVP3ZY)
Compile and save the Pawn.
Now you should have those two components in your Pawn.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWY0MGJlMi1kN2Q5LTRlODctOTZjMC1iNjM3ZTYyNWI0MGYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.FmmQppjR4uFxENYw3GCgFATJVyJY9mxnUEkSXzxCk-Y&preview=m)
In order for the CoverSet logic to be used, you need to add input support and some custom methods to your Pawn.
Add AddMovementInput method or copy it from the CoverSet BP_ThirdPersonCharacter.
If you didn’t copy this method from BP_ThirdPersonCharacter, paste this blueprint to your method:
https://blueprintue.com/render/9o_vc2d0/
(but remember to set arguments manually for it).
Add AddMovementInputSides method or copy it from the CoverSet BP_ThirdPersonCharacter.
If you didn’t copy this method from BP_ThirdPersonCharacter, paste this blueprint to this method:
https://blueprintue.com/render/ab689w1l/
(but remember to set arguments manually for it).
Set calling those methods in your Pawn like in this picture.
5.1. For EnhancedInput
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NzFiNjM2ZS0yZTQ5LTQ1NWQtOGNmNy1iYTY0MzNjYzU1Y2YiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.NeAfGzbM1bJclrkNCHe982nBo9fbXp6bNs1o6A0-0G4&preview=m)
5.2. For Binding Input

Compile and save the Pawn asset.
Set input bindings and input events.
For Enhanced Input (default in 5.3)
7.1. Check if you have IA_ assets.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwZDQ3YzAyYy05MzY2LTRhNTgtYjVlNS1lNjZlMzg4ZjFlZDIiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.WXaKvOA8SCjX-j065ss8aZ50BhCbTIR927DtNlG4FpE&preview=m)
7.2. Open your InputMappingContext (IMC_) asset and add cover set IA_ assets.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlMDQyMWZmMy1iNGRjLTRlY2YtODZlYi1mNDczZDQ0NzcwYzAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.znB35CBo2VUDjHpz5k0WyQ8pn1ahK4sJ0-JPuASW_F4)
7.3. Copy and paste this blueprint to the Pawn’s Event Graph:
https://blueprintue.com/render/sy_mt-k_/
https://blueprintue.com/render/sy_mt-k_/
For Binding Input (default in 5.0 - 5.2)
7.1. Go to Edit→Project Settings → Engine → Inputs and binding cover set inputs.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyOWI0N2Y0My03Yzg2LTQ0ZTktYjYzYS1kODg2NTNlYzliNzMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.LYlOg_5Sj16uyrnZLSh78q5ajNM72vY2kiU_jV-_8Fw&preview=m)
7.2. Copy and paste this blueprint to the Pawn’s Event Graph:
https://blueprintue.com/render/k99s5c2s/
Compile and save your Pawn asset.
To use the created AnimNotifies, you need to add events for them in the character's ABP.
The examples below contain images from a dedicated ABP_Manny_Cover in the sample CoverSet project. You need to perform the following steps on your character’s ABP for which you are adapting this solution.
Open the character’s ABP.
Create those variables:
CurrentCoverState (ECoverStates)
CurrentCoverDirectionState (ECoverDirections)
CharacterOwner (Your Pawn Blueprint)
SnapToObstacleMotionWarpingName (Name)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkYjIxZWUxMi1kNmI4LTQxMTItYTEzMC0wNGFjMzFjYjUxMTEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.aB-Q-FZFG9q5Y25MNBPCMfwJZuOgC_S8B-WPrVvSEhA)
Copy and paste this blueprint to the end of the EventBlueprintInitializeAnimation (rememebr to set casting pin from the Character like in th epicutre below):
https://blueprintue.com/render/p3u7y52h/
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyOGMyYTZiOC0wMmUzLTQyMWMtYjI3Mi0zYjc5OTdlZmU3MzYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0._aV6iN59QQQ-tJUMIwNKWydNX_ITejGcqbqsJbbd_Z4&preview=m)
Copy and paste this blueprint with custom Anim Notifies events to your EventGraph:
https://blueprintue.com/render/mhrx5eye/
Go to your Locomotion state machine. Copy “Cover” anim state machine from the ABP_MannyCover and pase it to your Pawn’s ABP.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MzEyMzc3Yi1mYjk1LTRlMzQtOWFhNi1lYWY0MzNiYjdhNTkiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.ypUuGH4dvd7O_ShAK5TwqD8yJx5efXDkqwaSO4-Ccf8&preview=m)
If you want to pass to the Cover state set the condition:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMmExNTExZi03MTgxLTQ1NjEtYTgwOC1jMDU4MTA5NWIxZGMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.mOHhETwKhjEuOM1wblnc6O0FFDBE8vtCYrOUc6PsRbY)
If you want to pass from the Cover state to the Idle state set the condition:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1NGNiZDk1MC1kNjgzLTQ5MjYtODliZS02ZGIzM2U3NzI1YzgiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.t8IFh-AQ1RfDFggKrU_Vmdq4USTcrVa0Q6S-XRng16Y&preview=m)
If you want to pass from the Cover state to the Walk/Run state set the condition:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4OTliZDhmNS1mZTA0LTRjMWEtOWU5Zi0zYTVmZTYwOWVmMTkiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.WAah1Fb2s7DGVue5hEjxcvXbr1UUCq-Pb3QqwEOzTXg&preview=o)
Set you Cover state anim graph nodes if they disapeared during copying.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5ZTBmMDEwZi04NGNmLTRiOTQtODM4Mi1kNDY1ZmU4NmI4YzEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.ctw88M2xhI24OUJ1gN0JzrnZVnPSbDVU34lWJvbht5g&preview=m)
Set RootMotionFromEverything in your ABP.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyNDI2OTI0ZS1hNmM2LTQ4ZjctYjQ0OS0xYTQyMTIwMzIwMGQiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.XS6bP7hjYwRGmoI6IYfUdNgnzakQcYvywVeKrVNm-w4&preview=m)
You can check how it is implemented in the CoverSet ABP_MannyCover example.
This solution is a basic implementation. You can expand and modify it to suit your needs.
The following subsections contain tips that may be useful to you when adapting the solution to your project.

The above enums are used both in custom structures and in the calculation logic in AC_CoverComponent. You can extend them as you wish or add similar ones based on this.
E_CoverAdditionalAnimationType - contains all available animation types in cover system logic different then idles and loops (ThroughObstacle, LookAiming, ThrowItem, CoverTypeTransition).
E_CoverDirections - four types are specifed; standing in idle (left, right) and moving (left, right).
E_CoverHighLowTransitionTypes - provides types for transitions between different directions (right, left) and heights (up, down) (e.g. HighLeftToLowLeft, LowRightToHighRight). You can expand them or use them to your additional mechanics. Check PlayHighLowTransitionAnimation method and its usage in EnableCovering in AC_CoverComponent.
E_CoverStates - is responsible for types determining whether it is a standing (cover up) or crouching cover (cover down) (CoverStand, CoverCrouch, NoCover).
E_CoverToIdleTypes - it is used in the logic that determines the type of end cover. If a character is on the corner of walls and the player forces the move, this will be a CoverRightToSide or CoverLeftToSide condition. Otherwise CoverRightToIdleForward or CoverRightToIdleForward. Check SelectCoverEndToIdleAnimation method in the AC_CoverComponent.
In this project, two custom structures were created to store references to Cover Set animations. You can treat them as a base for placing references for subsequent animations and expanding this solution.

F_CoverHighAdditionalAnimations - uses custom enums to store references to the Cover Set High (cover up) animations. This structure is as a variable in DA_CoverAdditionalAnimatioBase which contains a number of methods that return the appropriate animation for a given situation in runtime.
F_CoverLowAdditionalAnimations - uses custom enums to store references to the Cover Set Low (cover low) animations. This structure is as a variable in DA_CoverAdditionalAnimatioBase which contains a number of methods that return the appropriate animation for a given situation in runtime.

This is the base class providing:
ability to store references to custom structures,
calling a method that retrieves specific animation.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiMjM1ODg4MC1lZjQzLTQ0NzYtOGYxNy1kYjI2Zjg3YmI1OTQiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.e_ax8WclVcA6a2UN-7eGvJ4XMmfbwOSNF073yWxgZUY)
It is highly recommended to add further animations to custom structures and then create a method in this class that will return them in other blueprints e.g. in AC_CoverComponent. Thanks to this, you will have all the operations for getting animations in one place.
The use of methods from this blueprint that allow you to take appropriate animations can be found in those AC_CoverComponent methods: EnableCovering, SelectCoverDirectionTransitionAdditionalAnim, SelectCoverEndToIdleAnimation, PlayHighLowTransitionAnimation, ThrowItem, PlayLookAimingAnimation, PlayThroughObstacleAnimation by finding reference “Get CoverAdditionalAnimationsDataAsset”.
An example of calling one of the *DA_CoverAdditionalAnimationBase’*s method:
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3ZDFlZjUwZi1mYmVjLTQ5Y2MtYmYyOS01NzcxMDExZjNiMDkiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.l1i_1YiYHOpYUYlJ1gEd2l0cGpZM_vh-T-Ld7GScKNs)

This is a child of the base class DA_CoverAdditionalAnimationBase. It is used in AC_CoverComponent as an assigned Data Asset to get information about available animations.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxYTE1NmEyZi03ZjhkLTRhZDgtODE1ZC1iZmE1YThkY2IyOTQiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.fcChbU-CHRhwScpYN0NWqDbBZGcoVK4ERacGh9lGXwI&preview=m)
In you next steps, you can create your own similar data assets and thus get animations in AC_CoverComponent.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5OWQ0MDhhYi1lODFmLTQ4ZjctYjQ2Ny02ZTVmNTllODhkNjciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.PRQcQqQi67RnUX2KQYafi29aSnsRL1JfEkDjHxAEp7w)
This component is the heart and brain of the entire solution. This is where tracing, calculations and animation playback take place. Methods and variables are assigned to different categories so that you can more easily find the appropriate fragments responsible for specific tasks.

States - operations responsible for changing states in the system (e.g. switching from cover up to cover down (crouch)).
Tracing - fragments related to detecting walls and obstacles.
Debug - logic to help debug. Prints information about incorrect setup and provides the ability to render debug traces.
Animation - they help in playing the animations. The animations themselves are stored in dedicated Data Assets, not in this component.
One of the most important elements of this solution is tracing for detecting walls and obstacles.
To see all traces for detection walls in runtime, find the DrawAllTraceDebugs variable in AC_CoverComponent.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwY2UxZDAzYi1iZGZlLTQwMjktYjBhMS05MzQzNTdhZjkyNDciLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.ioqSApKR8tU7a3yLG-e7hi_0TvWAhH3gqdG6Fw07DnQ)

The logic for tracing can be found in AC_CoverComonent in the Trace category.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxYzJlYjI5Ny1hNjlkLTQ3ZjQtYWM4My0yZjk3OTc5Mzk3ODUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.V0lGRyyO-NaykSwtWJuSEfDQj8kmjps1BwcQc8NzHoo)
Tracing occurs for several actions.
Checking if the character is standing against the wall to start/end the cover.
Line tracing in the direction the character moves along the wall to detect the wall in front of the character.
Box tracing from the chest behind the back to check if the wall is high (and force a crouch if it is low).
Double line tracing from the side of the knees to the back to detect walls and decide whether to finish the cover if there is no wall behind or to check if the character can start look aiming.
Capsule tracing in front of the character to detect obstacles.
The key methods are in AC_CoverComponent:
TraceLinesToDetectWallsAndObstacles
TraceLookAimFreeSpace
You can find there the operations described above. Additionally, if you want to change values that affect tracing, you will find them in the same category among variables.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3NmZlMzQ1MC05NDgxLTQ3ZDgtOGIxYy03OWZmZmMyZTI2ZTEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.6w65_jADbbkUQ-mfqo5lPFR-BJ9LouxFKjrctksrzME)
Custom sockets on the skeleton are also important, as they are starting points for tracing. You can change their position for adapting the tracing to your character's size and locomotion needs. You added those socktes in this step.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3YWYzZTE5YS1mODQwLTQ5YWEtYjcyMC00ZWQzZThhMzc1MTEiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.SumPIjFHKaJO1Y2DVRJ4C8BWnKzFcYBCIDP2-S6Hw80)
Additionally, the project includes the F_CoverTracedObject structure for storing information from basic line tracing for walls during cover. It only has one variable, but you can expand it in the future.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYTNkNjY2Yi0yYWU2LTRkOWEtYTljMC05YjQzOWVjMzAzMDUiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.9zEHkIPGXN3mXr9Q88tTftO_gFaTf5V-RLQX6npEcjM)
Snapping locations and character rotation to the wall can be found in the AttachCharacterToTracedCoverObject and RotateCharacterToTracedCoverObject methods in AC_CoverComponent.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwNDBhZWU3OC0xYTc2LTQyOTQtOWMyYy0wYzYxMmM3NTBhMzMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.RHJk-QKkoXF_ZdUUj_GzSEyuNc64N2tq_f8afZe3pkU&preview=m)
The following parameters affect snapping speed.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmNGFkNWRiNC0wODdhLTQzNWItYWU5Yy1mNDgwNWEwOWRjNjAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.eyGEgNWDU6t35KeSAwpIQ62qWLug5g-stlc7zV8PEBE)
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiZTE5MjI3NS05MjU1LTQxNDYtYjMwOC02NWNiNGUwNjdlYTAiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.jV935DWZltt46fwi_yuR2v4f1RZjZXjFBH5kdZYaNsI)
This actor is prepared to play the animation of crossing over an obstacle.
As previously described here, this animated action is handled using MotionWarping.
You can read about the details in the Epic documentation here.
BP_Obstacle has an MotionWarpingSnapPoint in its hierarchy. This is the snap orientation point for Motion Warping anim notifications while the animation is playing. The location and rotation of this point is returned by the methods GetSnapLocation and GetSnapRotation . They are called in the AC_CoverComponent in the TraceObstalces method just before the animation is triggered.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkODAzNjFkYi1jZTI4LTRmYjQtOGM2Mi1lZTFkZGVlMTA4ODMiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.jysyfPBw2dV_aJMq-5tbtEgz07b0zj7sxSr0Wmh5Mww&preview=m)
You can move this point according to your needs.
Instances of this actor can be found on the demo level.
When you extend this solution you can use the custom LogError in AC_CoverComponent. This is a good practice that will help you find setup and logical errors. It is used many times in this component, so you can see examples.
.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmYzM2NzMzOS03MzM2LTQ1NDgtOWY0ZS02NDNhM2JiOGQzMWYiLCJwdXJwb3NlIjoiZ2V0LWZpbGUiLCJleHAiOjE3NzM0NTU2NDAsImlhdCI6MTc3MzQ1MjA0MH0.sN89ns_YIpb7VqLCAIQPfDhAc6laYColfFcO7LGxQV8&preview=m)
Full “Cover System” Programming - Anorien