/** * Loads any scenes adjacent to the active scene. */ private static void LoadAdjacentScenes() { for (int i = activeSceneX - 1; i <= activeSceneX + 1; i++) { if (i < 0) { continue; } for (int j = activeSceneY - 1; j <= activeSceneY + 1; j++) { if (j < 0) { continue; } String sceneName = SceneMap.GetPartition(i, j); if (sceneName == null || loadedScenes.ContainsKey(sceneName)) { continue; } else { loadedScenes.Add(sceneName, new Vector2(i, j)); SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); print("Loaded Scene: " + sceneName); } } } }
/** * Load the starting scene. */ public void Start() { keyController = gameObject.AddComponent <KeyController>(); string activeScene = SceneMap.GetPartition(activeSceneX, activeSceneY); loadedScenes.Add(activeScene, new Vector2(activeSceneX, activeSceneY)); SceneManager.LoadScene(activeScene, LoadSceneMode.Additive); SceneManager.sceneLoaded += SceneLoaded; }
/** * Call this when the player crosses the bounds into another scene so adjacent scenes are loaded. */ public static void SceneTransitionMade(int x, int y) { string name = SceneMap.GetPartition(x, y); if (activeScene.Equals(name) || name == null) { return; } activeSceneX = x; activeSceneY = y; activeScene = name; UnityEngine.SceneManagement.Scene scene = SceneManager.GetSceneByName(name); UnloadScenes(); LoadAdjacentScenes(); SceneManager.SetActiveScene(SceneManager.GetSceneByName(name)); //printSceneInfo(); }