Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

To ensure that a coroutine keeps running even when the game is paused in Unity, you can use the Time.timeScale property. This property controls the speed of the game, where a value of 1 means the game is running at normal speed, and a value of 0 means the game is paused.

You can set the Time.timeScale property to 0 to pause the game, but this will also pause all coroutines. To keep a coroutine running while the game is paused, you can set the Time.timeScale property to a small non-zero value, such as 0.01. This will effectively slow down the game to a near-stop while allowing the coroutine to continue running.

Here's an example of how to implement this in your code:

IEnumerator MyCoroutine()
{
    while (true)
    {
        // Do some work...

        yield return null;

        // Check if the game is paused
        if (Time.timeScale == 0)
        {
            // Keep the coroutine running by setting Time.timeScale to a small non-zero value
            Time.timeScale = 0.01f;
        }
        else
        {
            // Reset the time scale to 1 if the game is not paused
            Time.timeScale = 1f;
        }
    }
}

Note that setting the Time.timeScale property to a small non-zero value will slow down all other game elements, such as physics and animations, so use this with caution. Also, keep in mind that some platform-specific features, such as audio, may not work properly when the game is slowed down.