예제 #1
0
    IEnumerator ExecuteLoadRequests()
    {
        while (loadRequestQueue.Count > 0)
        {
            activeLoadRequest = loadRequestQueue.Dequeue();

            foreach (LoadRequest.LoadScene loadScene in activeLoadRequest.Scenes)
            {
                AsyncOperation op = SceneManager.LoadSceneAsync(loadScene.SceneName, LoadSceneMode.Additive);
                op.allowSceneActivation = false;
                while (op.progress < 0.9f)
                {
                    yield return(null);
                }
                op.allowSceneActivation = true;
                yield return(null); // finish loading scene, OnSceneLoaded will be called

                loadScene.LoadedScene = lastLoadedScene.Value;
                lastLoadedScene       = null;
            }
            if (activeLoadRequest.CompletionEventArg != null)
            {
                foreach (LoadRequest.LoadScene loadScene in activeLoadRequest.Scenes)
                {
                    foreach (GameObject go in loadScene.LoadedScene.GetRootGameObjects())
                    {
                        go.SendMessage("OnLoadRequestCompleted", activeLoadRequest.CompletionEventArg);
                    }
                }
            }

            if (activeLoadRequest.OnRequestCompleted != null)
            {
                activeLoadRequest.OnRequestCompleted(activeLoadRequest);
            }
            activeLoadRequest = null;
        }
        activeCoroutine = null;
    }