1
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
|
||||
namespace Pinwheel.Jupiter
|
||||
{
|
||||
public class JTakeScreenshot : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private KeyCode hotKey;
|
||||
public KeyCode HotKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return hotKey;
|
||||
}
|
||||
set
|
||||
{
|
||||
hotKey = value;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private string fileNamePrefix;
|
||||
public string FileNamePrefix
|
||||
{
|
||||
get
|
||||
{
|
||||
return fileNamePrefix;
|
||||
}
|
||||
set
|
||||
{
|
||||
fileNamePrefix = value;
|
||||
}
|
||||
}
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
HotKey = KeyCode.F9;
|
||||
FileNamePrefix = "Screenshot";
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(HotKey))
|
||||
StartCoroutine(CrTakeScreenshot());
|
||||
}
|
||||
|
||||
private IEnumerator CrTakeScreenshot()
|
||||
{
|
||||
// wait for graphics to render
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
||||
// create a texture to pass to encoding
|
||||
Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGBA32, false);
|
||||
|
||||
// put buffer into texture
|
||||
texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
||||
texture.Apply();
|
||||
|
||||
// split the process up--ReadPixels() and the GetPixels() call inside of the encoder are both pretty heavy
|
||||
yield return 0;
|
||||
|
||||
byte[] bytes = texture.EncodeToPNG();
|
||||
System.DateTime d = System.DateTime.Now;
|
||||
string timeString = string.Format("{0}-{1}-{2}-{3}-{4}-{5}",
|
||||
d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second);
|
||||
string fileName = string.Format("{0}{1}{2}{3}",
|
||||
FileNamePrefix,
|
||||
FileNamePrefix == null ? "" : "-",
|
||||
timeString,
|
||||
".png");
|
||||
string filePath = Application.dataPath + "/" + fileName;
|
||||
// save our test image (could also upload to WWW)
|
||||
File.WriteAllBytes(filePath, bytes);
|
||||
|
||||
// Added by Karl. - Tell unity to delete the texture, by default it seems to keep hold of it and memory crashes will occur after too many screenshots.
|
||||
Object.Destroy(texture);
|
||||
Debug.Log("Screenshot saved at: " + filePath);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user