{"id":11697,"date":"2025-02-05T16:26:11","date_gmt":"2025-02-05T14:26:11","guid":{"rendered":"https:\/\/store.algosyntax.com\/?post_type=download&#038;p=11697"},"modified":"2026-03-09T02:48:39","modified_gmt":"2026-03-09T00:48:39","slug":"dynamic-keyframes","status":"publish","type":"download","link":"https:\/\/store.algosyntax.com\/marketplace\/unreal-engine\/dynamic-keyframes\/","title":{"rendered":"Dynamic Keyframes"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"11697\" class=\"elementor elementor-11697\" data-elementor-post-type=\"download\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9951e24 e-flex e-con-boxed e-con e-parent\" data-id=\"9951e24\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0007d2c elementor-widget elementor-widget-theme-page-title elementor-page-title elementor-widget-heading\" data-id=\"0007d2c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-page-title.default\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-171b17b e-flex e-con-boxed e-con e-parent\" data-id=\"171b17b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1261e92 elementor-widget elementor-widget-text-editor\" data-id=\"1261e92\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Dynamic Keyframes plugin for unreal engine streamlines procedural animation by modularizing animations into runtime-adjustable keyframes (AnimTasks) that are grouped and sequenced effortlessly. The system\u2019s flexibility allows you to extend it with custom tasks and templates. This modular approach lets you drive any UObject\u2014be it an Actor, Component, or custom object\u2014without rewriting procedural logic.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c02b8aa elementor-toc--minimized-on-desktop elementor-widget elementor-widget-table-of-contents\" data-id=\"c02b8aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:[],&quot;no_headings_message&quot;:&quot;No headings were found on this page.&quot;,&quot;minimized_on&quot;:&quot;desktop&quot;,&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;marker_view&quot;:&quot;numbers&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tTable of Contents\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__c02b8aa\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__c02b8aa\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__c02b8aa\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a4e176 elementor-widget elementor-widget-heading\" data-id=\"5a4e176\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Where To buy<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-356b337 elementor-widget elementor-widget-text-editor\" data-id=\"356b337\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>You can get the Dynamic Keyframes Plugin for Unreal Engine 5 on Fab.com<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cd81f2 elementor-align-left elementor-widget elementor-widget-button\" data-id=\"5cd81f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.fab.com\/listings\/03c2b63c-50c5-4459-bbda-a95e6f736db4\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Download Dynamic Keyframes from fab.com<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4411cab elementor-widget elementor-widget-heading\" data-id=\"4411cab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Watch the video<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b6c2fcb elementor-widget__width-initial elementor-widget elementor-widget-video\" data-id=\"b6c2fcb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;youtube_url&quot;:&quot;https:\\\/\\\/youtu.be\\\/mjNxD0lONNg&quot;,&quot;lazy_load&quot;:&quot;yes&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-inline\">\n\t\t\t<div class=\"elementor-video\"><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aec0016 elementor-widget elementor-widget-heading\" data-id=\"aec0016\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How To Use The Procedural Animation Templates<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8149fe7 elementor-widget elementor-widget-text-editor\" data-id=\"8149fe7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Once you have plugin installed, you&#8217;ll find the animation templates in the location Dynamic Keyframes <strong>Content\/Blueprints\/AnimTemplates.<br \/><\/strong>These Blueprints are SceneComponents that you can add to any actor.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5ecb6b elementor-widget elementor-widget-image\" data-id=\"d5ecb6b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"780\" height=\"346\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/animtemplates.jpg\" class=\"attachment-large size-large wp-image-11753\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-be57ccf elementor-widget elementor-widget-heading\" data-id=\"be57ccf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Add The Anim Template As A Component of Any Actor.<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c5f5b8 elementor-widget elementor-widget-text-editor\" data-id=\"8c5f5b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Create a new AActor Blueprint or open the example actors. The Example Actors are in the directory <strong>Dynamic Keyframes Content\/Blueprints\/ExampleActors.<br \/><br \/><br \/><\/strong><\/p><p>Click the Add Component button on the Actor Blueprint and choose one of the AnimTemplates. For this example or explanation we&#8217;ll choose the <strong>BP_StrikeAnimTemplate componet.<br \/><br \/><\/strong><strong>This procedural anim template allows you to easily animate something that should strike, like lightning or a drum stick hitting a snare drum.\u00a0<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dddb58c elementor-widget elementor-widget-image\" data-id=\"dddb58c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"615\" height=\"566\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/addanimtemplatecomponent.jpg\" class=\"attachment-large size-large wp-image-11794\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-beeadd5 elementor-widget elementor-widget-heading\" data-id=\"beeadd5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Subscribe to the AnimTemplates' Events<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-72477ad elementor-widget elementor-widget-text-editor\" data-id=\"72477ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Every AnimTemplate should or will contain Events that the Owning Actor should subscribe to.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4bc57b0 elementor-widget elementor-widget-image\" data-id=\"4bc57b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"568\" height=\"314\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/bp_strikeanimtemplate-events.jpg\" class=\"attachment-large size-large wp-image-11761\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3cdef75 elementor-widget elementor-widget-text-editor\" data-id=\"3cdef75\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The <strong>StrikeAnimTemplate\u00a0<\/strong>contains the the <strong>&#8220;OnLocationUpdate&#8221;<\/strong> event\/delegate.<br \/>This event is fired on tick as the &#8220;Striking&#8221; animation occurs and allows you to update the Component, Actor or element that should do the &#8220;Striking&#8221;. In our Example Actor, we call the &#8220;SetWorldLocation&#8221; function on the Driven Sphere.\u00a0\u00a0<br \/>So as the procedural animation changes location, so will our visible sphere, which will give it the striking effect.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5019cc5 elementor-widget elementor-widget-image\" data-id=\"5019cc5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"702\" height=\"254\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/onlocationupdate-logic.jpg\" class=\"attachment-large size-large wp-image-11762\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93aab09 elementor-widget elementor-widget-heading\" data-id=\"93aab09\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Setting the Template Properties.<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-31bd9b4 elementor-widget elementor-widget-text-editor\" data-id=\"31bd9b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>A Procedural Anim Template can have its properties set on the details panel or procedurally at runtime. For example, you can change or set the StrikeLocation.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a305c5 elementor-widget elementor-widget-image\" data-id=\"1a305c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1579\" height=\"229\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/setting-properties.jpg\" class=\"attachment-large size-large wp-image-11773\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6479c9 elementor-widget elementor-widget-text-editor\" data-id=\"c6479c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>In the above we are changing or setting the StrikeAnimTemplate&#8217;s Strick Location and Return Location on Begin Play.<br \/>The Return Location is where to return to after striking.<\/p><p>You can also set the <strong>StrikeDuration.\u00a0<\/strong>This is the amount of time it will take for to reach the target strike location and the &#8220;<strong>ReturnDuration<\/strong>&#8221; is the amount of time it will take to go back after striking.<\/p><p>All properties you see can be changed at runtime to create fully procedural animations or target strike locations.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-55bbb4f elementor-widget elementor-widget-heading\" data-id=\"55bbb4f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Start the Procedural Anim Template<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c59dd53 elementor-widget elementor-widget-image\" data-id=\"c59dd53\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"884\" height=\"361\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/starting-the-animtemplate.jpg\" class=\"attachment-large size-large wp-image-11780\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1775d75 elementor-widget elementor-widget-text-editor\" data-id=\"1775d75\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Once you&#8217;re done setting the properties, you must call the &#8220;Start&#8221; function on the AnimTemplate. This puts in a state where its ready to process anim tasks(explained below).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3ada94 elementor-widget elementor-widget-heading\" data-id=\"b3ada94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Triggering the Strike or Procedural Action.<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c991c8 elementor-widget elementor-widget-text-editor\" data-id=\"4c991c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>AnimTemplates will usually have procedural action you can trigger at will. For example or Strike anim template, has the &#8220;Strike&#8221; trigger. This will make the animation strike the target location. You&#8217;ll want to call this function for example when a MIDI Note turns on so that your Drum Stick &#8220;Strikes&#8221; the snare drum or whatever you want to use the animation for.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-87df431 elementor-widget elementor-widget-image\" data-id=\"87df431\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"454\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/stike-action.jpg\" class=\"attachment-large size-large wp-image-11784\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-31521ee elementor-widget elementor-widget-heading\" data-id=\"31521ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Other Templates: Inflate and Flashing Color<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91784ad elementor-widget elementor-widget-text-editor\" data-id=\"91784ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>There&#8217;s other templates you can use. For example the InflateTemplate is used when you want to animate scale that inflates and then deflates when triggered.\u00a0<br \/>The Flashing Color Template is to be used when you want to animate a color , like flashing lights when music plays.<br \/><br \/>The&#8217;re events and properties are similar to the Strike Anim Template component.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acb0026 elementor-widget elementor-widget-heading\" data-id=\"acb0026\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Creating your own Procedural Animation Templates<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9edfaa5 elementor-widget elementor-widget-text-editor\" data-id=\"9edfaa5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>In order to create your own dynamic animation templates, you need to understand a few concepts which are explained below. It&#8217;s recommended you copy\/duplicate the existing templates and customize them before attempting your own. Also the BP_StrikeAnimTemplate contains the documentaion and explaination of how a procedural animation template is made. Open it and read the comments.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9b7913 elementor-widget elementor-widget-heading\" data-id=\"d9b7913\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Anim Task : The Dynamic Keyframes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09031ef elementor-widget elementor-widget-text-editor\" data-id=\"09031ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The <strong>AnimTask<\/strong> class is the base class for dynamic or procedural animations in unreal engine. Each AnimTask is driven by a timeline and updates its properties\u2014like duration, start\/stop values, and evaluation curves\u2014during runtime. Payload objects associated with an AnimTask receive the evaluated data, allowing for dynamic updates to any UObject.<\/p><h3>Key Features<\/h3><ul><li><strong>Timeline Driven:<\/strong> Executes animations over a set duration.<\/li><li><strong>Dynamic Properties:<\/strong> Supports runtime modifications such as duration, start\/stop values, and evaluation curves.<\/li><li><strong>Payload Support:<\/strong> Applies evaluated values to any associated UObject.<\/li><li><strong>Expandable:<\/strong> Create custom tasks (e.g., Spline-based, Material animations) by subclassing and overriding <code>Evaluate()<\/code>.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bcda70a elementor-widget elementor-widget-image\" data-id=\"bcda70a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1018\" height=\"630\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/creatinganimtask.jpg\" class=\"attachment-large size-large wp-image-11728\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e4a6bc4 elementor-widget elementor-widget-heading\" data-id=\"e4a6bc4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">AnimTaskSequence \u2013 Sequencing Procedural Keyframes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ebdf95a elementor-widget elementor-widget-text-editor\" data-id=\"ebdf95a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The <strong>AnimTask Sequence<\/strong> queues AnimTasks and plays them in order. It supports auto-starting the next task when one completes, or manual progression. This does not mean we are hardcoding the animation like traditional keyframe based systems do. Remember the keyframes or their properties can still be changed from blueprints while the sequence is running.<\/p><h3>Key Features<\/h3><ul><li><strong>Queue Execution:<\/strong> Tasks play sequentially.<\/li><li><strong>Auto\/Manual Control:<\/strong> Option to automatically trigger subsequent tasks.<\/li><li><strong>Blueprint Integration:<\/strong> Exposed functions for adding, removing, and managing tasks.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c5441dc elementor-widget elementor-widget-image\" data-id=\"c5441dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"899\" height=\"485\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/dynamic-keyframes\/creatingtasksequence.jpg\" class=\"attachment-large size-large wp-image-11729\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20a9e50 elementor-widget elementor-widget-heading\" data-id=\"20a9e50\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">AnimTemplate \u2013 Reusable Animation Scripts<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ef11d1e elementor-widget elementor-widget-text-editor\" data-id=\"ef11d1e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>AnimTemplate<\/strong> is a Blueprintable component designed for authoring and reusing animation scripts. Templates manage multiple AnimTask sequences, each identified by unique IDs. You can create your own templates or customize the defaults, allowing your animation logic to be reused across various projects and scenarios.<\/p><h3>Key Features<\/h3><ul><li><strong>Predefined Sequences:<\/strong> Organize and manage multiple AnimTask sequences by unique IDs.<\/li><li><strong>High Flexibility:<\/strong> Create or extend templates without constraints\u2014drive any UObject with your procedural logic.<\/li><li><strong>Blueprint Events:<\/strong> Override native events like <code>InitTemplate<\/code>, <code>HandleSequenceTaskPostEvaluate<\/code>, and <code>HandleSequenceTaskComplete<\/code> for custom behavior.<\/li><li><strong>Reusable Logic:<\/strong> Once an AnimTemplate or AnimTask is created, it can be applied to any actor, component, or UObject without additional scripting.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5abbcb elementor-widget elementor-widget-image\" data-id=\"d5abbcb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"996\" height=\"413\" src=\"https:\/\/store.algosyntax.com\/wp-content\/uploads\/edd\/marketplace\/unreal-engine\/animtemplates.jpg\" class=\"attachment-large size-large wp-image-11726\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12973ab elementor-widget elementor-widget-heading\" data-id=\"12973ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Creating Procedural Animation Assets  : High level overview<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-960a150 elementor-widget elementor-widget-text-editor\" data-id=\"960a150\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The core workflow starts with an <strong>AnimTemplate<\/strong> asset. This asset is designed to be added to any Actor, driving animations across various components or even other actors. Here&#8217;s how the system ties together:<\/p><ul><li><strong>AnimTasks:<\/strong> The basic building blocks. Each task represents a dynamic keyframe, with its own duration, start\/stop values, and evaluation curve.<\/li><li><strong>AnimTaskSequence:<\/strong> A collection of AnimTasks that play sequentially. This sequence governs the order and flow of animations.<\/li><li><strong>AnimTemplate:<\/strong> The scriptable asset that bundles one or more AnimTaskSequences. It exposes parameters for configuration and provides delegates\/Event Dispatchers (e.g., <em>OnLocationUpdate<\/em>) to allow you to hook into key animation events.<\/li><\/ul><p>This setup enables you to author reusable, procedural animation assets. Once configured, an AnimTemplate can dynamically drive any UObject, making it easy to apply complex animations without rewriting procedural logic for every new Actor or component.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Dynamic Keyframes plugin for unreal engine streamlines procedural animation by modularizing animations into runtime-adjustable keyframes (AnimTasks) that are grouped and sequenced effortlessly. The system\u2019s flexibility allows you to extend it with custom tasks and templates. This modular approach lets you drive any UObject\u2014be it an Actor, Component, or custom object\u2014without rewriting procedural logic. Table of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11748,"template":"elementor_header_footer","edd-categories":[11,4],"edd-tags":[110],"class_list":["post-11697","download","type-download","status-publish","has-post-thumbnail","hentry","download_category-code-plugins","download_category-unreal-engine","download_tag-proceduralanimations","entry","has-media","edd-download","edd-download-cat-code-plugins","edd-download-cat-unreal-engine","edd-download-tag-proceduralanimations"],"acf":[],"_links":{"self":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/edd-downloads\/11697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/edd-downloads"}],"about":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/types\/download"}],"author":[{"embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/users\/1"}],"version-history":[{"count":0,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/edd-downloads\/11697\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/media\/11748"}],"wp:attachment":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/media?parent=11697"}],"wp:term":[{"taxonomy":"download_category","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/edd-categories?post=11697"},{"taxonomy":"download_tag","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/edd-tags?post=11697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}