I've been implementing my own visual coding system for an untitled space exploration game. I had multiple places where I needed to start a coroutine from outside a Monobehaviour component.

The first class is just a class that forces a monobehaviour to persist through scenes

public class PersistentMonoBehaviour : MonoBehaviour { private void Awake() => DontDestroyOnLoad(gameObject); }

And the second class is the actual executor of the coroutine.

public static class CoroutineExecutor { private static CoroutineHandler _monoBehaviour; private static CoroutineHandler Handler => _monoBehaviour ??= new GameObject("CoroutineExecutor").AddComponent<CoroutineHandler>(); public static void Execute(IEnumerator coroutine) => Handler.StartCoroutine(coroutine); private class CoroutineHandler : PersistentMonoBehaviour { } }

Feel free to steal the code for your own projects :)

More posts