Course contentsShow
← Unreal Engine Game Development
Lesson 21 of 8801. Foundations and Editor WorkflowFree lesson

Optimizing Tick Dependencies in Actor Hierarchies

Analyze and minimize performance overhead by strategically enabling or disabling the Tick function across different components within an Actor.

In this lesson, you will learn how to boost your game’s performance by carefully controlling which parts of your Actor hierarchies run code every frame.

The Cost of "Tick"

In Unreal Engine, the Tick function is the heartbeat of your objects, running code on every single frame. When you have an Actor with multiple components, it is very easy to accidentally leave PrimaryActorTick.bCanEverTick set to true on everything. If you have 100 of these Actors in your scene, that results in hundreds of unnecessary function calls per frame, which quickly drains your CPU budget.

Strategically Managing Tick

The most efficient approach is to disable Ticking by default and only enable it when absolutely necessary.

Within your AActor constructor, you can set the default state. If an Actor doesn't need to update every frame (for instance, a static prop that only reacts to external events), disable the tick entirely:

// Inside your Actor's constructor
PrimaryActorTick.bCanEverTick = false;

If you have a complex Actor composed of several UActorComponents, you should apply the same logic. Not every component needs to perform logic every frame. If a component is responsible for a simple state change, prefer using Events or Delegates (which we explored in lesson 19) to trigger updates only when the data actually changes, rather than polling for changes inside a Tick function.

When to Tick

If you must use Tick, keep the hierarchy lean. If a parent Actor is already performing a calculation that applies to its children, the children should never have their own Tick enabled. Instead, have the parent manage the child’s state directly. By centralizing the "heartbeat" in the parent Actor and leaving the children as passive components, you reduce the overhead of the engine having to iterate through every registered component in your hierarchy every frame.

Always ask yourself: "Does this object need to check the world status 60 times a second, or can it just wait to be told what to do?"

Key Takeaway: Disable bCanEverTick by default on all Actors and Components, only enabling it for the absolute minimum number of objects that truly require frame-by-frame updates.