Example #1
0
        protected IEnumerator InitializeLevelAsync(string sceneNamePath, bool isAdditive)
        {
            var levelName        = System.IO.Path.GetFileNameWithoutExtension(sceneNamePath);
            var sceneAssetBundle = Settings.Map.GetAssetBundleName(sceneNamePath);

            // This is simply to get the elapsed time for this phase of AssetLoading.
            float startTime = Time.realtimeSinceStartup;

            // Load level from assetBundle.
            AssetBundleLoadOperation request = AssetBundleManager.LoadLevelAsync(sceneAssetBundle, levelName, isAdditive);

            if (request == null)
            {
                if (loadEventHandler != null)
                {
                    loadEventHandler.SendMessage("OnSceneLoadError");
                }
                yield break;
            }
            yield return(StartCoroutine(request));

            if (request.IsError())
            {
                if (request == null)
                {
                    if (loadEventHandler != null)
                    {
                        loadEventHandler.SendMessage("OnSceneLoadError");
                    }
                    yield break;
                }
            }

            var loadedScene = UnityEngine.SceneManagement.SceneManager.GetSceneByName(levelName);

            UnityEngine.SceneManagement.SceneManager.SetActiveScene(loadedScene);

            // Calculate and display the elapsed time.
            float elapsedTime = Time.realtimeSinceStartup - startTime;

            Debug.Log("Finished loading scene " + levelName + " in " + elapsedTime + " seconds");

            if (loadEventHandler != null)
            {
                loadEventHandler.SendMessage("OnSceneLoaded");
            }

            GameObject.Destroy(gameObject);
        }