void OnEnable() { ScreenshotConfig myInstance = (ScreenshotConfig)Resources.Load("Screenshot.asset") as ScreenshotConfig; if (myInstance == null) { // myInstance = CreateInstance<ScreenshotConfig>(); // AssetDatabase.CreateAsset(myInstance , "Assets/Editor/Instant Screenshot/Resources/Screenshot.asset"); // AssetDatabase.SaveAssets(); // AssetDatabase.Refresh(); } if (myCamera == null) { myCamera = Camera.main; } }
void OnGUI() { config = EditorGUILayout.ObjectField(config, typeof(ScreenshotConfig), true, null) as ScreenshotConfig; EditorGUILayout.LabelField("Resolution", EditorStyles.boldLabel); deviceFromAspect = EditorGUILayout.Toggle("Device From ASpect", deviceFromAspect); if (deviceFromAspect) { if (Camera.main.aspect == 1f) { device = Device.Square2k; } else { device = Device.Custom; } } // Select device device = (Device)EditorGUILayout.EnumPopup("Device", device); bool customRes = false; switch (device) { case Device.Square1k: resWidth = 1024; resHeight = 1024; break; case Device.Square2k: resWidth = 2048; resHeight = 2048; break; case Device.Square3k: resWidth = 3072; resHeight = 3072; break; case Device.Square4k: resWidth = 4096; resHeight = 4096; break; default: customRes = true; break; } if (customRes) { resWidth = EditorGUILayout.IntField("Width", resWidth); resHeight = EditorGUILayout.IntField("Height", resHeight); } else { EditorGUILayout.LabelField("Width", resWidth.ToString()); EditorGUILayout.LabelField("Height", resHeight.ToString()); } EditorGUILayout.Space(); scale = EditorGUILayout.IntSlider("Scale", scale, 1, 15); EditorGUILayout.HelpBox("The default mode of screenshot is crop - so choose a proper width and height. The scale is a factor " + "to multiply or enlarge the renders without loosing quality.", MessageType.None); EditorGUILayout.Space(); GUILayout.Label("Save Path", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.TextField(path, GUILayout.ExpandWidth(false)); if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) { path = EditorUtility.SaveFolderPanel("Path to Save Images", path, Application.dataPath); } EditorGUILayout.EndHorizontal(); EditorGUILayout.HelpBox("Choose the folder in which to save the screenshots ", MessageType.None); EditorGUILayout.Space(); GUILayout.Label("Select Camera", EditorStyles.boldLabel); myCamera = EditorGUILayout.ObjectField(myCamera, typeof(Camera), true, null) as Camera; isTransparent = EditorGUILayout.Toggle("Transparent Background", isTransparent); EditorGUILayout.HelpBox("Choose the camera of which to capture the render. You can make the background transparent using the transparency option.", MessageType.None); EditorGUILayout.Space(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Default Options", EditorStyles.boldLabel); if (GUILayout.Button("Set To Screen Size")) { resHeight = (int)Handles.GetMainGameViewSize().y; resWidth = (int)Handles.GetMainGameViewSize().x; } if (GUILayout.Button("Default Size")) { resHeight = 1440; resWidth = 2560; scale = 1; } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.LabelField("Screenshot will be taken at " + resWidth * scale + " x " + resHeight * scale + " px", EditorStyles.boldLabel); if (GUILayout.Button("Take Screenshot", GUILayout.MinHeight(60))) { if (path == "") { path = EditorUtility.SaveFolderPanel("Path to Save Images", path, Application.dataPath); Debug.Log("Path Set"); TakeHiResShot(); } else { TakeHiResShot(); } } EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Open Last Screenshot", GUILayout.MaxWidth(160), GUILayout.MinHeight(40))) { if (lastScreenshot != "") { Application.OpenURL("file://" + lastScreenshot); Debug.Log("Opening File " + lastScreenshot); } } if (GUILayout.Button("Open Folder", GUILayout.MaxWidth(100), GUILayout.MinHeight(40))) { Application.OpenURL("file://" + path); } if (GUILayout.Button("More Assets", GUILayout.MaxWidth(100), GUILayout.MinHeight(40))) { Application.OpenURL("https://www.assetstore.unity3d.com/en/#!/publisher/5951"); } EditorGUILayout.EndHorizontal(); if (takeHiResShot) { int resWidthN = resWidth * scale; int resHeightN = resHeight * scale; RenderTexture rt = new RenderTexture(resWidthN, resHeightN, 24); RenderTexture rtBackup = myCamera.targetTexture; myCamera.targetTexture = rt; TextureFormat tFormat; if (!isTransparent) { tFormat = TextureFormat.RGB24; } else if (myCamera.allowHDR) { tFormat = TextureFormat.RGBAFloat; } else { tFormat = TextureFormat.ARGB32; } Texture2D screenShot = new Texture2D(resWidthN, resHeightN, tFormat, false); myCamera.Render(); RenderTexture.active = rt; screenShot.ReadPixels(new Rect(0, 0, resWidthN, resHeightN), 0, 0); myCamera.targetTexture = rtBackup; RenderTexture.active = null; byte[] bytes = screenShot.EncodeToPNG(); string filename = ScreenShotName(resWidthN, resHeightN); System.IO.File.WriteAllBytes(filename, bytes); Debug.Log(string.Format("Took screenshot to: {0}", filename)); Application.OpenURL(filename); takeHiResShot = false; } EditorGUILayout.HelpBox("In case of any error, make sure you have Unity Pro as the plugin requires Unity Pro to work.", MessageType.Info); }