Things to check before starting a coroutine?

The main thing to check before calling / making a coroutine is to ask yourself,

“Does this even need to be a coroutine?”

Generally, if your design requires you to call StopCoroutine(), then don’t make it a coroutine.

If you just need something to happen a bit later, this is a more-robust approach:

https://gist.github.com/kurtdekker/0da9a9721c15bd3af1d2ced0a367e24e

If you’re flipping from one value to another, such as fading in, fading out, changing speeds slowly, etc., coroutines are an AWFUL solution to that. Instead use a pattern like this:

Smoothing movement between any two particular values:

https://discussions.unity.com/t/812925/5

You have currentQuantity and desiredQuantity.

  • only set desiredQuantity
  • the code always moves currentQuantity towards desiredQuantity
  • read currentQuantity for the smoothed value

Works for floats, Vectors, Colors, Quaternions, anything continuous or lerp-able.

The code: https://gist.github.com/kurtdekker/fb3c33ec6911a1d9bfcb23e9f62adac4

If you just need cooldown timers for limiting gunfire rates, use a cooldown timer:

Cooldown timers, gun bullet intervals, shot spacing, rate of fire:

https://discussions.unity.com/t/821482/2

GunHeat (gunheat) spawning shooting rate of fire:

https://discussions.unity.com/t/824570/2

Far too often people (including very popular tutorial sites on Youtube) reach for needless coroutines and make a colossal unstable mess of their codebases as a result.

Also: https://discussions.unity.com/t/849607/7

3 Likes