public void Start()
    {
        if (SaveManager.save == null)
        {
            return;
        }

        TutorialCamera.ResetShownTutorials();

        foreach (var tile in created)
        {
            Destroy(tile);
        }
        created.Clear();

        var worlds = FindObjectsOfType <Levels>().ToList();

        foreach (var world in worlds.OrderBy(w => w.levels[0].world))
        {
            foreach (var level in world.levels)
            {
                if (level.world > SaveManager.save.worldUnlocked)
                {
                    continue;
                }
                if (level.world == SaveManager.save.worldUnlocked && level.number > SaveManager.save.levelUnlocked)
                {
                    continue;
                }

                Debug.Log("Loading level " + level.name);

                var newTile = GameObject.Instantiate(LevelTemplate, transform);
                newTile.SetActive(true);

                string displayName = (level.name == $"World {level.world} Level {level.number}" ? $"{level.world}-{level.number}" : level.name);

                newTile.name = level.name;
                newTile.GetComponentInChildren <Text>().text = displayName;

                newTile.GetComponent <Button>().onClick.AddListener(() => { LevelSelectGUI.currentLevel = level; SceneManager.LoadScene(level.name); });

                created.Add(newTile);
            }
        }
    }