Skip to content

Instantly share code, notes, and snippets.

@westonweiyi
Forked from krzys-h/SaveRenderTextureToFile.cs
Created February 23, 2023 03:21
Show Gist options
  • Save westonweiyi/673d226dba3dc3238378ce3a21cbc425 to your computer and use it in GitHub Desktop.
Save westonweiyi/673d226dba3dc3238378ce3a21cbc425 to your computer and use it in GitHub Desktop.
[Unity] Save RenderTexture to image file
using UnityEngine;
using UnityEditor;
public class SaveRenderTextureToFile {
[MenuItem("Assets/Save RenderTexture to file")]
public static void SaveRTToFile()
{
RenderTexture rt = Selection.activeObject as RenderTexture;
RenderTexture.active = rt;
Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
RenderTexture.active = null;
byte[] bytes;
bytes = tex.EncodeToPNG();
string path = AssetDatabase.GetAssetPath(rt) + ".png";
System.IO.File.WriteAllBytes(path, bytes);
AssetDatabase.ImportAsset(path);
Debug.Log("Saved to " + path);
}
[MenuItem("Assets/Save RenderTexture to file", true)]
public static bool SaveRTToFileValidation()
{
return Selection.activeObject is RenderTexture;
}
}
using UnityEngine;
using UnityEditor;
public class SaveScreenshotToFile {
[MenuItem("Custom/Render Camera to file")]
public static void RenderCameraToFile()
{
Camera camera = Selection.activeGameObject.GetComponent<Camera>();
RenderTexture rt = new RenderTexture(2560, 1440, 24, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB);
RenderTexture oldRT = camera.targetTexture;
camera.targetTexture = rt;
camera.Render();
camera.targetTexture = oldRT;
RenderTexture.active = rt;
Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
RenderTexture.active = null;
byte[] bytes = tex.EncodeToPNG();
string path = "Assets/screenshot.png";
System.IO.File.WriteAllBytes(path, bytes);
AssetDatabase.ImportAsset(path);
Debug.Log("Saved to " + path);
}
[MenuItem("Custom/Render Camera to file", true)]
public static bool RenderCameraToFileValidation()
{
return Selection.activeGameObject != null && Selection.activeGameObject.GetComponent<Camera>() != null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment