예제 #1
0
            public override void Deserialize(BinaryReader reader)
            {
                path = reader.ReadString();
                Scene scene  = default(Scene);
                bool  loaded = false;

                for (int i = EditorSceneManager.sceneCount - 1; i >= 0; i--)
                {
                    var iscene = EditorSceneManager.GetSceneAt(i);
                    if (iscene.IsValid() && Equals(iscene.path, path))
                    {
                        scene  = iscene;
                        loaded = true;
                        break;
                    }
                }
                if (!loaded)
                {
                    scene = EditorSceneManager.OpenScene(path, SceneManagement.OpenSceneMode.Additive);
                }
                var gos    = scene.GetRootGameObjects();
                var length = reader.ReadInt32();

                for (int i = 0; i < length; i++)
                {
                    goLog.go = gos[i];
                    goLog.Deserialize(reader);
                }
                EditorSceneManager.SaveScene(scene);
                if (!loaded)
                {
                    EditorSceneManager.CloseScene(scene, true);
                }
            }
예제 #2
0
            public override void Serialize(BinaryWriter writer)
            {
                writer.Write(path);
                Scene scene  = default(Scene);
                bool  loaded = false;

                for (int i = EditorSceneManager.sceneCount - 1; i >= 0; i--)
                {
                    var iscene = EditorSceneManager.GetSceneAt(i);
                    if (iscene.IsValid() && Equals(iscene.path, path))
                    {
                        scene  = iscene;
                        loaded = true;
                        break;
                    }
                }
                if (!loaded)
                {
                    scene = EditorSceneManager.OpenScene(path, SceneManagement.OpenSceneMode.Additive);
                }
                var gos = scene.GetRootGameObjects();

                writer.Write(gos.Length);
                for (int i = 0; i < gos.Length; i++)
                {
                    goLog.go = gos[i];
                    goLog.Serialize(writer);
                }
                EditorSceneManager.SaveScene(scene);
                if (!loaded)
                {
                    EditorSceneManager.CloseScene(scene, true);
                }
            }
예제 #3
0
 private static void RefreshUI()
 {
     for (int i = EditorSceneManager.sceneCount - 1; i >= 0; i--)
     {
         var iscene = EditorSceneManager.GetSceneAt(i);
         if (iscene.IsValid())
         {
             var roots = iscene.GetRootGameObjects();
             var list  = new List <Image>();
             foreach (var go in roots)
             {
                 if (go.activeSelf)
                 {
                     var comp = go.GetComponent <Image>();
                     if (comp != null)
                     {
                         list.Add(comp);
                     }
                     list.AddRange(go.GetComponentsInChildren <Image>(false));
                 }
             }
             foreach (var image in list)
             {
                 var sprite = image.sprite;
                 if (sprite != null &&
                     sprite.type == UnityEngine.UI.Sprite.Type.Atlas)
                 {
                     sprite.SetSpriteDirty();
                     image.SetAllDirty();
                 }
             }
         }
     }
 }
예제 #4
0
        static void StateChange(PlayModeStateChange change)
        {
            string currentSceneName = EditorSceneManager.GetActiveScene().name;

            if (EditorApplication.isPlaying)
            {
                EditorApplication.playModeStateChanged -= StateChange;

                if (currentSceneName[0] != '_')
                {
                    if (currentSceneName != _menuScene)
                    {
                        // NOTE(SpectatorQL): We're in playmode, right after having pressed Play.
                        RuntimeSceneManager.LoadSceneAsync(_menuScene);
                    }
                }
            }
        }
예제 #5
0
            public override void Translate()
            {
                Scene scene  = default(Scene);
                bool  loaded = false;

                for (int i = EditorSceneManager.sceneCount - 1; i >= 0; i--)
                {
                    var iscene = EditorSceneManager.GetSceneAt(i);
                    if (iscene.IsValid() && Equals(iscene.path, path))
                    {
                        scene  = iscene;
                        loaded = true;
                        break;
                    }
                }
                if (!loaded)
                {
                    scene = EditorSceneManager.OpenScene(path, SceneManagement.OpenSceneMode.Additive);
                }
                var gos        = scene.GetRootGameObjects();
                var collectors = new List <ICollector>();

                for (int i = 0; i < gos.Length; i++)
                {
                    var collector = new GameObjectCollector();
                    collector.go = gos[i];
                    collector.Collect();
                    collectors.Add(collector);
                }
                Util.RebindThenTranslate(collectors, sprites);
                EditorSceneManager.SaveScene(scene);
                if (!loaded)
                {
                    EditorSceneManager.CloseScene(scene, true);
                }
            }
예제 #6
0
            public override void Collect()
            {
                var   list   = new List <UnityEngine.UI.Sprite>();
                Scene scene  = default(Scene);
                bool  loaded = false;

                for (int i = EditorSceneManager.sceneCount - 1; i >= 0; i--)
                {
                    var iscene = EditorSceneManager.GetSceneAt(i);
                    if (iscene.IsValid() && Equals(iscene.path, path))
                    {
                        scene  = iscene;
                        loaded = true;
                        break;
                    }
                }
                if (!loaded)
                {
                    scene = EditorSceneManager.OpenScene(path, SceneManagement.OpenSceneMode.Additive);
                }
                var gos = scene.GetRootGameObjects();

                for (int i = 0; i < gos.Length; i++)
                {
                    var goCollector = new GameObjectCollector();
                    goCollector.go = gos[i];
                    goCollector.Collect();
                    list.AddRange(goCollector.sprites);
                }
                EditorSceneManager.SaveScene(scene);
                if (!loaded)
                {
                    EditorSceneManager.CloseScene(scene, true);
                }
                sprites = list.ToArray();
            }
예제 #7
0
        public static void Install(FileInfo packageFileInfo)
        {
            if (packageFileInfo == null)
            {
                Debug.LogError("Error: Unable to install AGX Dynamics for Unity - file info is null.");
                return;
            }

            if (!packageFileInfo.Exists)
            {
                Debug.LogError($"Error: Unable to install package from {packageFileInfo.FullName} - file doesn't exit.");
                return;
            }

            if (!EditorUtility.DisplayDialog("AGX Dynamics for Unity update",
                                             $"AGX Dynamics for Unity is about to be updated, make sure all" +
                                             $"File Explorer and/or terminals in {IO.Utils.AGXUnityPackageDirectory} " +
                                             $"are closed during this process.\n\nAny new files or file modifications " +
                                             $"made prior to this update in the {IO.Utils.AGXUnityPackageDirectory} " +
                                             $"will be deleted in this process.\n\nAre all files/directories in {IO.Utils.AGXUnityPackageDirectory} " +
                                             $"backed up and all explorers and terminals closed and ready for install?",
                                             "Yes",
                                             "No"))
            {
                return;
            }

            var unsavedScenes = (from scene in Scenes where scene.isDirty select scene).ToArray();

            if (unsavedScenes.Length > 0)
            {
                var saveSceneInstruction = "AGX Dynamics for Unity is about to be updated. " +
                                           "A new empty scene is required for AGXUnity to update. " +
                                           "The following scenes aren't saved:\n";
                foreach (var scene in unsavedScenes)
                {
                    saveSceneInstruction += '\n' + scene.name;
                }
                saveSceneInstruction += "\n\n" + "Select Cancel to abort the update.";

                var decision = EditorUtility.DisplayDialogComplex("Save unsaved scenes?",
                                                                  saveSceneInstruction,
                                                                  "Save and continue",
                                                                  "Cancel",
                                                                  "Continue without saving");
                if (decision == 1)
                {
                    return;
                }

                if (decision == 0)
                {
                    EditorSceneManager.SaveScenes(unsavedScenes);
                }
            }

            EditorSceneManager.NewScene(UnityEditor.SceneManagement.NewSceneSetup.EmptyScene,
                                        UnityEditor.SceneManagement.NewSceneMode.Single);

            Debug.Log("Preparing native plugins before restart...");
#if UNITY_2019_1_OR_NEWER
            foreach (var nativePlugin in NativePlugins)
            {
                nativePlugin.isPreloaded = false;
                nativePlugin.SaveAndReimport();
            }
#else
            Debug.Log($"Removing {IO.Utils.AGXUnityPluginDirectoryFull} from PATH ...");
            var notInPathOrRemovedFromPath = !AGXUnity.IO.Environment.IsInPath(IO.Utils.AGXUnityPluginDirectoryFull) ||
                                             AGXUnity.IO.Environment.RemoveFromPath(IO.Utils.AGXUnityPluginDirectoryFull);
            if (notInPathOrRemovedFromPath)
            {
                Debug.Log("    ... success.");
            }
            else
            {
                Debug.LogWarning("    ...failed. This could cause plugins to be loaded post reload - leading to errors.");
                return;
            }

            foreach (var nativePlugin in NativePlugins)
            {
                nativePlugin.SetCompatibleWithEditor(false);
                nativePlugin.SetCompatibleWithAnyPlatform(false);
                nativePlugin.SaveAndReimport();
            }
#endif

            Debug.Log("Preparing AGX Dynamics for Unity before restart...");
            Build.DefineSymbols.Add(Build.DefineSymbols.ON_AGXUNITY_UPDATE);

            Debug.Log("Restarting Unity...");
            EditorApplication.OpenProject(Path.Combine(Application.dataPath, ".."),
                                          "-executeMethod",
                                          "AGXUnityEditor.PackageUpdateHandler.PostReload",
                                          s_packageIdentifier + packageFileInfo.FullName.Replace('\\', '/'));
        }