Local Time Scale

v1.0

The LocalTimeScale class is the thing that helps objects determine their final TimeScale value. There are three main ways you'll utilize Local Time Scale objects.

Create a Local Time Scale Scriptable Object

Right click in your project and select Create/Magic Time/Time Scale to create a new Scriptable Object.

Often the pre-created objects will populate the Magic Time Manager and Magic Time User lists of "Initial Time Scales".

With this pattern, all objects will be accessing the same runtime instance of these LocalTimeScale objects. Use this for "Global" scales, as well as time scales that are meant to effect specific types of objects, such as "Enemies" or "Projectiles".

Magic Time User and IUseMagicTime

The interface IUseMagicTime is implemented by MagicTimeUser. Each Magic Time User object will automatically create its own LocalTimeScale, which you can think of as that objects internal clock.

Any object that will be changing its time scale using Magic Time should implement IUseMagicTime. Inheriting from MagicTimeUser is likely the best option most of the time.

Create at Runtime

LocalTimeScale objects can be created at runtime as well. Classes like the TimeZone demonstrate how this can be done.

Simialr to the Time Zone objects, creating your own LocalTimeScale enables more options and flexibility to help create the in-game experience you're looking for.

Events

Each LocalTimeScale includes UnityEvents and other events you can subscribe to.

Subscribing to Unity Events at Runtime

Since these objects are Scriptable Objects, in most cases you'll need to subscribe to the UnityEvents at runtime. Your object should reference the LocalTimeScale and add itself as a listener.

// Your script which wants to subscribe to the UnityEvent
localTimeScale.OnTimeScaleChangedUnityEvent.AddListener(OnTimeScaleChanged);

// Note the UnityEvent only provides the float value
public void OnTimeScaleChanged(float value)
{
    Debug.Log($"The new value is {value}");
}

Subscribing to the Events at Runtime

The Events also include the LocalTimeScale object, which is useful if you have one object that is subscribed to multiple LocalTimeScale objects, and needs to know which one called the event.

// Your script which wants to subscribe to the Event
localTimeScale.OnTimeScaleChanged += OnTimeScaleChanged;

// This event also tells you which object triggered it
public void OnTimeScaleChanged(float value, LocalTimeScale localTimeScale)
{
    HandleChangedTimeScaleValues(localTimeScale); // Do something!
}

Additional Scripting

Be sure to check out the Local Time Scale Scripting page with examples on how to use this class.

Local Time Scale Scripting

Last updated