public void Traverse() { using (var ms = new MemoryStream()) { BinaryWriter writer = new BinaryWriter(ms); #if AtlaS_ON writer.Write(true); #else writer.Write(false); #endif var prefabs = AssetDatabase.FindAssets("t:prefab").Select(i => AssetDatabase.GUIDToAssetPath(i)).ToArray(); writer.Write(prefabs.Length); var prefabLog = new PrefabLog(); for (int i = 0; i < prefabs.Length; i++) { EditorUtility.DisplayProgressBar("Prefab", prefabs[i], (float)i / prefabs.Length); prefabLog.path = prefabs[i]; prefabLog.Serialize(writer); } var scenes = AssetDatabase.FindAssets("t:scene").Select(i => AssetDatabase.GUIDToAssetPath(i)).ToArray(); writer.Write(scenes.Length); var sceneLog = new SceneLog(); for (int i = 0; i < scenes.Length; i++) { EditorUtility.DisplayProgressBar("Scene", scenes[i], (float)i / scenes.Length); sceneLog.path = scenes[i]; sceneLog.Serialize(writer); } var clips = AssetDatabase.FindAssets("t:animationclip").Select(i => AssetDatabase.GUIDToAssetPath(i)).ToArray(); writer.Write(clips.Length); var clipAction = new AnimationClipAction(); for (int i = 0; i < clips.Length; i++) { EditorUtility.DisplayProgressBar("AnimationClip", clips[i], (float)i / scenes.Length); clipAction.path = clips[i]; #if AtlaS_ON clipAction.OnSwitchOff(); #else clipAction.OnSwitchOn(); #endif } File.WriteAllBytes(LogFile, ms.ToArray()); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); EditorUtility.ClearProgressBar(); }
public void Revert() { if (!File.Exists(LogFile)) { return; } using (var fs = File.OpenRead(LogFile)) { BinaryReader reader = new BinaryReader(fs); var isOn = reader.ReadBoolean(); if ( #if AtlaS_ON isOn == true #else isOn == false #endif ) { return; } var prefabLog = new PrefabLog(); var prefabLen = reader.ReadInt32(); for (int i = 0; i < prefabLen; i++) { EditorUtility.DisplayProgressBar("Reverting", "", (float)i / prefabLen); prefabLog.Deserialize(reader); } var sceneLog = new SceneLog(); var sceneLen = reader.ReadInt32(); for (int i = 0; i < sceneLen; i++) { EditorUtility.DisplayProgressBar("Reverting", "", (float)i / sceneLen); sceneLog.Deserialize(reader); } } AssetDatabase.SaveAssets(); AssetDatabase.DeleteAsset(LogFile); EditorUtility.ClearProgressBar(); }