Blueprint Delays Ignore Custom Time Dilation if the actor has disabled Ticking

When an actor ticks, it will call into the LatentActionManagers “ProcessLatentActions” method using its own DeltaTime, which means this DeltaTime will observe effects of Custom Time Dilation.

void AActor::Tick( float DeltaSeconds )
{
	// Blueprint code outside of the construction script should not run in the editor
	// Allow tick if we are not a dedicated server, or we allow this tick on dedicated servers
	if (GetWorldSettings() != NULL && (bAllowReceiveTickEventOnDedicatedServer || !IsRunningDedicatedServer()))
	{
		ReceiveTick(DeltaSeconds);
	}


	// Update any latent actions we have for this actor
	GetWorld()->GetLatentActionManager().ProcessLatentActions(this, DeltaSeconds);

However, if you call SetActorTickEnabled(false) on this actor it will no longer call this method.

Later when UWorld calls CurrentLatentActionManager.ProcessLatentActions(NULL, DeltaSeconds); (LevelTick.cpp:1237). This will process any latent actions which have not yet been processed this tick under world Delta Seconds. If you have some kind of periodic functionality on an Actor that uses a Delay rather than a tick, that speed now ceases to obey the Actor’s time dilation.

I would expect the code around line 112 of LatentActionManager.cpp to check if the current object is an Actor and if so, multiply DeltaTime by Custom Time Dilation and Tick the Latent Object with that time.

Hello,

After further investigation, I do not believe that this is a bug. If you disable Tick on the actor, it will prevent custom time dilation from affecting anything, as the actor’s Tick function will never be called.

Let me know if you have any further questions, or if I’m misunderstanding the issue.

Have a great day

It actually looks like Delays on an Actor never recognize Custom Time Dilation and only observe Global Time Dilation whether they are ticking or not. My mistake. That still doesn’t match with what my expectations would be but I can see why this might be the design.