Where does OnLevelWasLoaded fit in this flowchart?

Where does OnLevelWasLoaded() fit in the flowchart on this page?

What I really need to know is if its executed after Start()
so I can use it to trigger a script its settings to update to a saved game state.

Unfortunately, despite the accepted answer, I would strongly recommend to use this “answer” in your projects:

Do not depend on the order of OnLevelWasLoaded being before or after OnEnable/Awake/Start.

This may be unsatisfactory. But everything measured for “this specifc target platform under that specific Unity version with these specific project settings” can easily lead you to a hell of migration problems. If Unity does not document an order, there might be a good reason for this.

IF you really depend on this order, something like this is a nice work around:

class LevelLoadedCallback
{
    // Guaranteed to be called after Start()
    public static event Action AfterStart;
    IEnumerator Start() {
        yield return null;
        if (AfterStart != null)
            AfterStart();
    }
}

...
LevelLoadedCallback.AfterStart += DoSomeStuff;
...
void DoSomeStuff() {
    // called only after Start() finished for all active gameObjects.
}

and then place a gameObject with component LevelLoadedCallback into your scene. If you play around with script execution order, you can provide similar callbacks for BeforeAwake, AfterAwake and so on…

Why all the caution? In my experience, resource loading order is extremely different in performance for different target platforms or settings. For example loading resources from a DVD is totally different (you don’t want to allow user code doing any I/O while loading!) than from a SSD hard drive (dozends of parallel I/O are no problem) or when loading from WWW (you might want to pause unimportant resource download when user-scripts wait for something to improve reaction time).

If this is too far-fetched at the moment, remember that this may become a problem in the future if resource size increases faster than access speed.

I just did a test script to check the execution order for it. The script is:

void OnLevelWasLoaded(int level)
{
	Debug.Log("OnLevelWasLoaded for: "+level);
}

void Awake()
{
	Debug.Log("Awake");
}

void OnEnable()
{
	Debug.Log("OnEnable");
}

void Start ()
{
	Debug.Log("Start");
}

Now some of the findings are:

Usually if everything is enabled then the OnLevelWasLoaded was called after OnEnable but before start. The execution order was:

  • Awake
  • OnEnable
  • OnLevelWasLoaded
  • Start

If the script is disabled then the execution order was:

  • Awake
  • OnLevelWasLoaded
  • And then once the script is enabled then onEnable was called.

If the game object to which this script is attached is disabled then nothing outputs as as soon as the GO was enabled then the order was:

  • Awake
  • OnEnable
  • Start

Notice how the OnLevelWasLoaded was not even called here.

So the place of OnLevelWasLoaded is dependent on the situations. But most of the common situations are listed above.