예제 #1
0
        public static void BakeMultipleScenes(string[] paths)
        {
            if (paths.Length == 0)
            {
                return;
            }

            for (int i = 0; i < paths.Length; i++)
            {
                for (int j = i + 1; j < paths.Length; j++)
                {
                    if (paths[i] == paths[j])
                    {
                        throw new System.Exception("no duplication of scenes is allowed");
                    }
                }
            }

            if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
            {
                return;
            }

            var sceneSetup = EditorSceneManager.GetSceneManagerSetup();

            // Restore old scene setup once the bake finishes
            Action OnBakeFinish = null;

            OnBakeFinish = () =>
            {
                EditorSceneManager.SaveOpenScenes();
                if (sceneSetup.Length > 0)
                {
                    EditorSceneManager.RestoreSceneManagerSetup(sceneSetup);
                }
                Lightmapping.bakeCompleted -= OnBakeFinish;
            };

            // Call BakeAsync when all scenes are loaded and attach cleanup delegate
            EditorSceneManager.SceneOpenedCallback BakeOnAllOpen = null;
            BakeOnAllOpen = (UnityEngine.SceneManagement.Scene scene, SceneManagement.OpenSceneMode loadSceneMode) =>
            {
                if (EditorSceneManager.loadedSceneCount == paths.Length)
                {
                    BakeAsync();
                    Lightmapping.bakeCompleted     += OnBakeFinish;
                    EditorSceneManager.sceneOpened -= BakeOnAllOpen;
                }
            };

            EditorSceneManager.sceneOpened += BakeOnAllOpen;

            EditorSceneManager.OpenScene(paths[0]);
            for (int i = 1; i < paths.Length; i++)
            {
                EditorSceneManager.OpenScene(paths[i], OpenSceneMode.Additive);
            }
        }
예제 #2
0
 public static void BakeMultipleScenes(string[] paths)
 {
     if (paths.Length != 0)
     {
         for (int i = 0; i < paths.Length; i++)
         {
             for (int j = i + 1; j < paths.Length; j++)
             {
                 if (paths[i] == paths[j])
                 {
                     throw new Exception("no duplication of scenes is allowed");
                 }
             }
         }
         if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
         {
             SceneSetup[] sceneSetup = EditorSceneManager.GetSceneManagerSetup();
             Lightmapping.OnCompletedFunction OnBakeFinish = null;
             OnBakeFinish = delegate
             {
                 EditorSceneManager.SaveOpenScenes();
                 EditorSceneManager.RestoreSceneManagerSetup(sceneSetup);
                 Lightmapping.completed = (Lightmapping.OnCompletedFunction)Delegate.Remove(Lightmapping.completed, OnBakeFinish);
             };
             EditorSceneManager.SceneOpenedCallback BakeOnAllOpen = null;
             BakeOnAllOpen = delegate(Scene scene, OpenSceneMode loadSceneMode)
             {
                 if (EditorSceneManager.loadedSceneCount == paths.Length)
                 {
                     Lightmapping.BakeAsync();
                     Lightmapping.completed          = (Lightmapping.OnCompletedFunction)Delegate.Combine(Lightmapping.completed, OnBakeFinish);
                     EditorSceneManager.sceneOpened -= BakeOnAllOpen;
                 }
             };
             EditorSceneManager.sceneOpened += BakeOnAllOpen;
             EditorSceneManager.OpenScene(paths[0]);
             for (int k = 1; k < paths.Length; k++)
             {
                 EditorSceneManager.OpenScene(paths[k], OpenSceneMode.Additive);
             }
         }
     }
 }