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); } }
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); } }
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(); } } } } }
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); } } } }
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); } }
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(); }
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('\\', '/')); }