The following will work when in stand alone, and when on webplayer fullscreen mode, but will give odd results when in webplayer windowed mode.
using UnityEngine;
using System.Collections;
public class CaptureScreenThumbnail : MonoBehaviour
{
private Texture2D _capture;
private Vector2 _size;
// Use this for initialization
void Start () {
_size = new Vector2(300, 200);
_capture = new Texture2D((int)_size.x, (int)_size.y, TextureFormat.RGB24, false);
}
void OnGUI () {
if (GUI.Button(new Rect(0,300,40,40), "||"))
{
StartCoroutine (CaptureThumbnail (_size));
}
GUI.DrawTexture(new Rect(0,0,_capture.width, _capture.height), _capture);
}
private IEnumerator CaptureThumbnail (Vector2 size)
{
// creating a Texture to Render to, the size of the thumbnail
RenderTexture myRenderTexture = new RenderTexture((int)size.x, (int)size.y, 24);
myRenderTexture.Create();
// Setting the Camera to Render to the Texture
Camera.main.targetTexture = myRenderTexture;
// Setting the Texture to be the Active Texture to read from
RenderTexture.active = myRenderTexture;
// Creating a new Texture2D
Texture2D myTexture2D = new Texture2D ((int)size.x, (int)size.y, TextureFormat.RGB24, false);
// Turning GUI Layer off
Camera.main.GetComponent<GUILayer>().enabled = false;
// Wait for the Frame to be fully rendered
yield return new WaitForEndOfFrame();
// Read pixels from the Render Texture into the Texture 2D
myTexture2D.ReadPixels(new Rect(0, 0, myRenderTexture.width, myRenderTexture.height), 0, 0);
myTexture2D.Apply();
// Restoring the GUI
Camera.main.GetComponent<GUILayer>().enabled = true;
// Reset Camera and Release the RenderTexture
Camera.main.targetTexture = null;
RenderTexture.active = null;
myRenderTexture.Release();
_capture = myTexture2D;
}
}