Tickify


Make it Quick to Tick


Tickify started from a simple need - more control over tick events in Unreal Engine. It was born out of countless hours spent on complex setups and the desire for a simpler, more efficient way.Now, after creating this tool, I believe I’ve achieved what I was looking for, and I hope it can solve the same kind of problems you might be having.


Making it Tick in Two Clicks

Even UObjects.


Say Goodbye
to the Old Way

You might have used this setup before for features that require to run per tick. However, be aware that Blueprint callable nodes in Unreal Engine can be noticeably slow in the case of having many of these, even when branches have a false condition.


Ticking Only When Time is Tight

Subscribe and unsubscribe your features to the tick dynamically.This way, you only use the resources when you need them.



Making it Tick Quicker


Under the same circumstances, in shipping builds,
Tickify provides about 85% more FPS than Unreal Engine’s tick.

(The tests have been conducted in Unreal Engine 5.3)


Taming Tick Timing


Choose the order in which the ticks are executed at any moment.


Ticking at the Right Group

Ensure your function ticks at the right group.



Tickify Plugin Documentation

Tickify allows the flexible creation of functions and events that are updated per tick, through an optimized and user-friendly workflow.Tickify is currently aviable on Unreal Engine versions 5.3 and 5.4.


Tickify delegate

Tickify uses a custom optimized delegate pin to make as quick as possible to work with this plugin.


Setting-up

This pin has an integrated combo box with some functionalities:

• Creating and binding a Function

• Creating and binding a Custom Event:


States

• Unbound

• Bound

In this state, you can press the button with the link icon to jump to the bound function or event.

• Invalid

In this state, you can press the button with the broken link icon to unbind the invalid function or event. Also, you will get a compiler error if you try to compile your blueprint with a Tickify delegate in this state.



Main nodes

Both Tickify main nodes (Tickify, TickifyLOD), has made to be as fast as possible to work with, and to keep your blueprints clean.


Tickify properties

Tickify nodes has the same base properties in the details panel.

The Detail Panel properties enable the dynamic display or concealment of all arguments as individual pins within the node. This flexibility allows users to dynamically adjust arguments to initiate a tick with specific conditions or to modify the properties of an ongoing tick by interacting with the same node. Additionally, there is an option to expose a struct that encapsulates all the properties.


Abort delegate

All Tickify main nodes has the abort delegate.

The abort delegate is executed once when the tick stops.


Abort Event / Function

The abort delegate creates a matching signature event or function.

Tick name returns the name you have specified in the details panel of the Tickify Node, or the name you have set by calling SetTickName using the Tickify Handle.On the other hand, Abort Reason returns the reason why this tick was aborted, which can be:

  1. Finished: For those cases where a tick with a valid lifetime value reaches its maximum lifetime.

  2. Un Tickified: Only for cases where the user has explicitly ended the tick by calling UnTickify.

  3. Invalid Target: For those cases where the object that owns the Tickified function was destroyed.

  4. Invalid Component: It is returned by the Tickify LOD if the component is not valid or if the component class does not implement ILODSyncInterface.


Tickify

Tickify is the main node of the plugin, once it is executed, it will make the bound function/event to tick.


Arguments

Tickify DelegateThe delegate executed per tick.

Tickify Glider

The Tickify Glider node is an alternative to the regular Tickify node, it can only be used in the event graph. Tickify Glider has a better compile performance, but since it is restricted to be used in the event graph, and invoke events in this graph is slower than functions, it is generally slower at runtime.


Arguments

Delta SecondsThe time since the last tick.

Tickify LOD

This node provides a solution to tick bound events according to the LOD of a primitive component.The primitive must implement ILODSyncInterface (Skeletal Mesh Component, Groom Component)

Static Meshes does not implement ILODSyncInterface, trying to use them with Tickify LOD will result in an immediate call of the abort event.


Tickify LOD Properties

Both Tickify LOD and Tickify LOD Glider has the same additional properties in the details panel.

Each delegate can be enabled or disabled through the properties in the details panel of the node. This isn’t merely a cosmetic feature. In fact, the node internally adjusts its logic based on the pins that are exposed, adding only the necessary logic to match your setup.


Arguments

ComponentThe Primitive Component whose LODs (Levels of Detail) are monitored to determine logic execution.
On LOD ChangeTriggered once when the LOD (Levels of Detail) state changes, ensuring actions are taken upon any LOD transition.
Default DelegateExecutes every tick when there is an active LOD that does not have a specific delegate assigned.
On Not RenderingActivated every tick as long as the component is not currently rendered, allowing for background logic while off-screen.
LOD [num] DelegateInvoked every tick when the specified LOD number is active, providing targeted logic for each detail level.


Tickify Handle

Tickify Handle provides a way to modify the tick anytime, anywhere through several functions documented below.


Untickify

Untickify will terminate the tick.


IsValid

Returns true if the handle is associated with a valid tick, even if it is pending to kill.


IsRunning

Returns true if the handle is associated with a running tick.


GetTickName

Returns the name of the tick.


GetTickGroup

Returns the tick group and pause behavior.


GetTickIndex

Returns the index of this tick within its ticking group.


SetTickGroup

Sets the ticking group, the pause behavior, and the execution index within all other ticks in the same group.

If you leave the index at -1, the tick will be the last one performed in the group it was moved to.Note: Calling this function with the same group and pause behavior as the tick currently has, and -1 as index, will have no effect and return true.


ExecuteAfter

Makes a tick to be executed after another one.

Enabling Allow Reassignment in cases where both ticks belong to different groups will move the tick to the ticking group of the other, so that the tick is executed after the other.


ExecuteBefore

Makes a tick to be executed before another one.

Enabling Allow Reassignment in cases where both ticks belong to different groups will move the tick to the ticking group of the other, so that the tick is executed after the other.


SetLifetime

Makes the tick to work for a specified time in seconds, then stops ticking.

Enabling Reset Current Life Time will reset the tick’s countdown, potentially altering its ticking schedule.Setting -1 as Lifetime will cause the function to continue ticking indefinitely, and it will not stop based on the Lifetime value.


GetInitialLifetime

Returns the initial lifetime value with which this tick was set up, indicating the total duration for which the tick is intended to function.


GetCurrentLifetime

Returns the amount of time that the tick has been functioning since it was initialized.


GetRemainingLifetime

Returns the remaining time for which the tick will continue to function before it stops.


ClearLifetime

Clears the tick's lifetime, causing the function to continue ticking indefinitely.




Tickify Example Project

Here, you will be able to find the Tickify example projects for each version that is compatible with the various versions of Unreal Engine.


Setting Up the Example Proect

To get the plugin working in the TickifyExample.uproject, you need to follow these steps:


  1. Download Tickify and the example project for the Unreal Engine version you are using.

  2. Open the TickifyExamples.uproject.

  3. Open the Plugins window.

  4. Activate Tickify.

  5. Restart Unreal Engine.




Version History

Find out what changes and new features have been incorporated in each version of Tickify.


1.0.5 (Hotfix)

Fixed problematic operator logic in FTickifySWS and FTickifySSS that constructed other structs from a nullptr under certain conditions.

26/05/2024

1.0.4 (Hotfix)

Fixed a critical bug that occurred when setting the tick group with an invalid byte. This error is now handled and results in an error message and an automatic switch to the TG_PrePhysics tick group.

24/05/2024

1.0.4 (Hotfix)

Fixed a critical bug that occurred when setting the tick group with an invalid byte. This error is now handled and results in an error message and an automatic switch to the TG_PrePhysics tick group.

24/05/2024

1.0.3 (Hotfix)

Fixed a critical bug that occurred when creating a node from any Tickify custom delegate.

1.0.2 (Hotfix)

A critical bug that occurred when a Tickify Glider node was removed has been fixed.

1.0.1 (Pre-release Hotfix)

A critical error had been rectified. This error used to occur when a FTickifyFunction was initialized with an invalid ETickGroup during the conversion of regular ticks to lifetime ticks. This led to an exception that caused the engine to crash.

1.0

Non released initial version.




Tickify Delegate

Non released initial version.



Tickify LOD Glider

The Tickify LOD Glider provides an in-graph solution of the Tickify LOD node.

The parameters in the details panel works in the same way as in the Tickify LOD node.