Time control for Unity.

Chronos brings full time control to Unity. It is easy to use, optimized for performance and equipped to handle any scenario you have in mind.

Perfect for magic spells, puzzle games, sci-fi abilities or special effects.

Bend time in any way.

With a simple time scale variable, you can achieve any effect.

Slow & Accelerate

Set a time scale between zero and one to slow your scene, ideal for bullet-time type effects or bring attention to a specific event.

Pause

Set the time scale to zero to completely stop all movement and let the player explore a fixed scene.

Rewind

Set the time scale to below zero to go back in time. Even physics are supported.

Multiple timelines.

No need to affect the scene at once: with Chronos, you can target specific objects.

Object Control

With a local clock, you can target any object individually and give it its very own timeline.

Group Control

With global clocks, you can target groups of objects to control them simultaneously.

Area Control

With area clocks, you can affect objects in any shape defined by a collider.

Zero integration needed.

Chronos plugs into almost all built-in Unity components automatically.

Animations
Animator and Animation components
Physics
Rigidbodies and forces (2D or 3D)
Audio
AudioSource components and pitch
Particles
ParticleSystem components
Navigation
NavMeshAgent components
Wind Zones
WindZone components
Occurrences

Chronos introduces a powerful new scripting concept called Occurrences. An occurrence is basically a two-way event (forward and backward) scheduled to any point in time. It allows any piece of code to become easily rewindable without having to think of any time calculation.

using Chronos;

GetComponent<Timeline>().Plan
(
	5, // In five seconds...

	true, // create a repeatable event...

	delegate
	{
		// that sets the color to blue 
		// and saves the previous one...
		Renderer renderer = GetComponent<Renderer>();
		Color previousColor = renderer.material.color;
		renderer.material.color = Color.blue;
		return previousColor; 
	},

	delegate (Color previousColor)
	{
		// and reverts it on rewind.
		Renderer renderer = GetComponent<Renderer>();
		renderer.material.color = previousColor;
	}
);