'Awake' not called first after scripts are recompiled during execution

I have an ‘awake’ function which sets up an instance, like so:

public static instance MySingleton
private set;

void Awake()
        Instance = this;

This works fine, no problems.

However if I change a script during run time and unity does its recompilation ‘Awake’ isn’t called on ‘MySingleton’ and another script from its normal update routine attempts to access it causing a null reference exception…

Any idea how I could make sure ‘awake’ is called straight after a script is recompiled or does Unity not provide a way to handle this?

Dynamic compilation isn’t really a good idea, but that code is dangerous anyway. You should call an Init function both in get and Awake if the instance is null, that way it’s initialize not matter which one is called first.

I added a simple way to have singleton with monobehaviour to the wiki if you’re interested.