| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- using UnityEditor;
- using UnityEngine;
- [ExecuteInEditMode]
- public class ScreenShot : EditorWindow
- {
- int resWidth = Screen.width * 4;
- int resHeight = Screen.height * 4;
- public Camera myCamera;
- int scale = 1;
- string path = "";
- bool showPreview = true;
- RenderTexture renderTexture;
- bool isTransparent = false;
- // Add menu item named "My Window" to the Window menu
- [MenuItem("ChivaTool/Instant High-Res Screenshot")]
- public static void ShowWindow()
- {
- //Show existing window instance. If one doesn't exist, make one.
- EditorWindow editorWindow = EditorWindow.GetWindow(typeof(ScreenShot));
- editorWindow.autoRepaintOnSceneChange = true;
- editorWindow.Show();
- editorWindow.title = "Screenshot";
- }
- float lastTime;
- void OnGUI()
- {
- EditorGUILayout.LabelField("Resolution", EditorStyles.boldLabel);
- resWidth = EditorGUILayout.IntField("Width", resWidth);
- resHeight = EditorGUILayout.IntField("Height", resHeight);
- 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;
- if (myCamera == null)
- {
- myCamera = Camera.main;
- }
- 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;
- }
- if(GUILayout.Button("Align With View(Select Camera)"))
- {
- if (myCamera == null) return;
- EditorApplication.ExecuteMenuItem("GameObject/Align With View");
- }
- 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);
- myCamera.targetTexture = rt;
- TextureFormat tFormat;
- if (isTransparent)
- tFormat = TextureFormat.ARGB32;
- else
- tFormat = TextureFormat.RGB24;
- 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 = null;
- 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);
- }
- private bool takeHiResShot = false;
- public string lastScreenshot = "";
- public string ScreenShotName(int width, int height)
- {
- string strPath = "";
- strPath = string.Format("{0}/screen_{1}x{2}_{3}.png",
- path,
- width, height,
- System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
- lastScreenshot = strPath;
- return strPath;
- }
- public void TakeHiResShot()
- {
- Debug.Log("Taking Screenshot");
- takeHiResShot = true;
- }
- }
|